32简介
32的内核是ARM 32位的Cortex-M3。
启动模式
内置flash:主闪存,对应着烧写到flash的用户程序
系统存储器:对应着系统的启动代码,将采用串口1下载代码到flash。使用串口下载代码时使用
内置SRAM:访问SRAM
GPIO
一个GPIO端口至少需要两个寄存器,一个做控制用的“通用I/O端口控制寄存器”,还有一个是存放数据的“通用I/O端口数据寄存器”。
STM32的输入输出管脚有以下8种可能的配置:(4输入+2输出+2复用输出)
浮空输入_IN_FLOATING
带上拉输入_IPU
带下拉输入_IPD
模拟输入_AIN
开漏输出_OUT_OD
推挽输出_OUT_PP
复用功能的推挽输出_AF_PP
复用功能的开漏输出_AF_OD
键盘取值
通过键盘扫描获得所按下的键和行列值,借助键盘的行列值通过计算返回需要的键值。
行列扫描法
列线加上拉电阻,行线不加
- 设置列线输出,行线输入。将第一列值0,其他列之1。读取行值。以此循环
- 当某各键被按下,其所在列被置零时,所在行读取到0。由此便可获得按下按键的行列位置。
反转法
行列均加上拉电阻
- 将所有行置0,检测每列线的值。当有按键被按下,该按键所在的列为(低电平)0。得到按键所在列的位置。(未被按下为1)(行输出,列输入)
- 将所有列置0,获取每行线的值。按下按键所在行线为(低电平)0。得到按键所在行的位置。(列输出,行输入)
键盘消抖
- 软件消抖:当检测到有键按下时,延时5-15MS后,检测行线(或列线)是否仍未低电平。若仍为低电平则按键被按下。
- 硬件消抖:采用相应的硬件电路,消除信号的抖动。
点亮数码管
STM32上含有4个八段的数码管。当数码管写入低电平时数码管被点亮。每个数码管有0(亮)1(灭)两种状态。数码管要显示数字时需要用段码还显示。段码是将八个数码管的状态写成八位二进制数并转为16进制保存再在后面加上H。
显示四位数字(动态显示)
- 使用函数利用保存段码确定每个数码管的状态
- 通过循环时4个八段数码管依次点亮
- 最后,利用视觉暂留效果,当循环速度足够快时便可时看起来一同亮起.
静态显示
将4个八段数码管都点亮,显示无闪烁亮度高但是占用线数多所需电流大
数码管的控制引脚:C0 C2 C3 C4 C6 C7 C8 C9 A8 A11 A12 B15
PWM
PWM模式即脉冲宽度调制模式。输出部分产生一个中间波形OCxREF(高有效)作为基准,链的末端决定最终输出信号的极性。占空比指一个脉冲周期内,通电时间占总周期的比例。
占空比:Duty_R=100%×Width_P/Period_P 计时器的周期和预分频器的值通过CubeMX中设置
周期:Period_P 脉冲宽度:width_P
中断
中断:当 CPU 执行程序时,由于发生了某种随机的事件(外部或内部),CPU暂停当前的任务去执行另一段程序。事件处理完后又返回被中断的程序继续执行,这一过程就称为中断。
优先级规则
- 高抢占优先级的中断可以打断低抢占优先级的中断服务,从而构成嵌套;相同子优先级的中断之间不能构成中断嵌套。
- 子优先级不能够构成中断嵌套;抢占优先级相同,而子优先级不同的中断同时发生时,首先响应子优先级高的中断。
- 抢占优先级和子优先级相同的中断同时发生时,首先响应编号小的中断。
I2C通讯
写数据
若配置的方向传输位为“写数据”方向,如图的情况,广播完地址,接收到应答信号后,主机开始正式向从机传输数据(DATA),数据包的大小为 8 位,主机每发送完一 个字节数据,都要等待从机的应答信号(ACK),重复这个过程,可以向从机传输 N 个数据, 这个 N 没有大小限制。当数据传输结束时,主机向从机发送一个停止传输信号(P),表示不 再传输数据。
读数据
若配置的方向传输位为“读数据”方向,如图的情况,广播完地址,接收到应 答信号后,从机开始向主机返回数据(DATA),数据包大小也为 8 位,从机每发送完一个数 据,都会等待主机的应答信号(ACK),重复这个过程,可以返回 N 个数据,这个 N 也没有 大小限制。当主机希望停止接收数据时,就向从机返回一个非应答信号(NACK),则从机自动停止数据传输。
起始和停止信号(一般由主机产生)
相关函数
HAL_I2C_Mem_Write(I2C的句柄(或者说地址,确定选择那个I2C),设备外部地址,设备内部地址,写内部地址的方式(8位或16位),写入的数组或指针,写入字节数,超时时间)
HAL_I2C_Mem_Read(&hi2c2, ADDR_AT24C02_Read, 0, 读的方式,读给的变量,读取长度, 超时时间);
DMA
- 传输源:DMA控制器从传输源读出数据;
- 传输目标: DMA控制器将数据传输的目标;
- 触发信号:用于触发一次数据传输的动作,执行一个单位的数据传输。
- 示例:在AD采样的应用中
- 传输源:ADC的结果寄存器
- 传输目标:通常是内存单元,也就是存储器
- 触发信号:软件触发、定时器触发或外部触发