历程详解
详解包括:
中断原理讲解
例程流程详解
库函数分析详解
对应寄存器介绍
对应函数介绍
对应注释详解
本篇文章提供两种方法:
一种是 :IDLE 接收空闲中断+DMA
一种是: IDLE 接收空闲中断+RXNE接收数据中断
都可完成串口数据的收发
知识点介绍:
STM32 IDLE 接收空闲中断
功能:
在使用串口接受字符串时,可以使用空闲中断(IDLEIE置1,即可使能空闲中断),这样在接收完一个字符串,进入空闲状态时(IDLE置1)便会激发一个空闲中断。在中断处理函数,我们可以解析这个字符串。
接受完一帧数据,触发中断
STM32的IDLE的中断产生条件:
在串口无数据接收的情况下,不会产生,当清除IDLE标志位后,必须有接收到第一个数据后,才开始触发,一但接收的数据断流,没有接收到数据,即产生IDLE中断
STM32 RXNE接收数据中断
功能:
当串口接收到一个bit的数据时,(读取到一个停止位) 便会触发 RXNE接收数据中断
接受到一个字节的数据,触发中断
比如给上位机给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。
串口CR1寄存器
对bit4写1开启IDLE接受空闲中断
,对bit5写1开启RXNE接收数据中断。
串口ISR寄存器
此寄存器为串口状态查询寄存器
当串口接收到数据时,bit5 RXNE就会自动变成1,当接收完一帧数据后,bit4就会变成1.
清除RXNE中断标志位的方法为:
只要把接收到的一个字节读出来,就会清除这个中断
在STM32F1 /STM32F4 系列中 清除IDLE中断标志位的方法为:
先读SR寄存器,
再读DR寄存器。
memset()函数
extern void *memset(void *buffer, int c, int count)
buffer:为指针或是数组
c:是赋给buffer的值
count:是buffer的长度.
USART采用DMA接收时,如何读取当前接收字节数?
#define __HAL_DMA_GET_CO