IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32(新手村第一天)(宏的概念|定义宏|带参宏【续行符】) -> 正文阅读

[嵌入式]stm32(新手村第一天)(宏的概念|定义宏|带参宏【续行符】)

天数:第二天

总内容:6400min

进度(剩余):5846min

今日进度:按键检测(19)

跟:野火

今日学习总结:


大纲

一、宏的概念

二、带参宏【续行符】

三、GPIO按键检测

四、翻转指令的实现:【异或的语法】

五、同时读取多位:(使用按位与)

六、位操作

七、启动文件

正文

一、宏的概念(使用户更明白填进去的是控制啥)

在stm32中,假设一个基地址会映射到GPIOB等等的寄存器,如果直接调用GPIOB不直观,如果将该寄存器映射宏定义为所需要进行的外设名字(如LED_G)则容易区分不同GPIO所对应的不同“器件”

#define LED_G_PIN          GPIO_PIN_0

二、带参宏【续行符】

如果想达到

LED_G(ON)

这种效果,需要定义一个带有参数的宏

如:

#define LED_G(a) if(a == true) /*执行开灯函数   ;  */ else /*执行关灯函数   ;   */

如果嫌弃过长,则可添加续行符转行进行配置

//如果嫌弃长,则添加续行符
//            \              //注意续行符后不可以添加任何字符,除了回车

#define LED_G(a) if(a == true) \
					/*执行开灯函数   ;  */\
				else /*执行关灯函数   ;   */

注意:假如突然出现十多个错误,极可能是续行符后出现其他的字符

?

三、GPIO按键检测

思考:能不能使用pwm的模式,让不同的按钮接不同的电阻,从而按下的时候给到io口的电平各有不同,则可以让一个io口,负责多个按钮,(例如1~9的按钮,各个给同一个io口不同的pwm,进行判断识别)

在其他单片机中,按键检测需要通过软件进行消抖

因为:按键按下的时候,具有一定时间才稳定IO口的电平

在stm32开发板中,一般并联一个电容

当按钮按下的时候,理应是电容左右端电压都相等,但是因为存在抖动,因此存在电位差。(前提)

一、当电平变高的时候,吸能(不让电位突变到很高)

二、当电平向下抖动的时候,便释放能量(使电位升高)

总体表现:减小抖动的波动值

检测到按钮按下后,要检测是否松手

一、使用while函数,当I口的电平一直在高的时候,进入死循环

二、当松手后,电平掉落到低电平,跳出循环,给出按钮被敲击的返回值

四、异或的使用

异或(^)

当位异或1则改变

当位异或0则不变

?五、同时读取多位:(使用按位与)

假如要同时读取四位

一、把头四位置1

二、按位移动到适合的位置

三、按位与运算后,得到的是目标地址的值

四、解码:如0011,1100,0101 有2^4 = 16的可能性,通过解码后读取

?六、位带操作

概念

ODR是一个16位的操作器,如果直接操作它就一下操作16位

如果要操作ODR中的某一个位,则使用到位带操作

在这里插入图片描述

在真正位带区,一个地址中有八个位(相当于直接控制寄存器的话,同时要改变32个位,也就是4个字节)

但是我仅仅想控制其中一个位?

但是难以根据根据地址进行控制

因此将位带区的八个位,每个位都膨胀成32倍(4个字节|4个地址)

但是实际上,膨胀后的4个地址中,仅有最低位的地址中的值(0/1)控制该bit位

这样就能根据地址找到相应的位,进行0/1控制

位带操作

范围:(图中的SRAM和片上外设)

?

公式统一为

?

?

寄存器地址:先找到外设地址+偏移量

位号:第几位

使用位带操作,实现GPIO的输入和输出

待补充

七、启动文件?

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:55:48  更:2021-12-02 16:56:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:35:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码