CH5-IDLE
CH5-IDLE
IDLE原理
在使用串口接受字符串时,可以使用空闲中断(IDLEIE置1,即可使能空闲中断),这样在接收完一个字符串,进入空闲状态时(IDLE置1)便会激发一个空闲中断。在中断处理函数,我们可以解析这个字符串。
接受完一帧数据,触发中断
STM32的IDLE的中断产生条件:
在串口无数据接收的情况下,不会产生,当清除IDLE标志位后,必须有接收到第一个数据后,才开始触发,一但接收的数据断流,没有接收到数据,即产生IDLE中断
CubeMX配置







MDK程序编写
function.c
fputc函数
1 | int fputc(int ch,FILE *f) |
串口接收函数组
流程

1.初始化:打开IDLE中断;打开DMA接收,当MCU通过USART接收外部发来的数据时,在进行第①②③步的时候,DMA直接将接收到的数据写入缓存rx_buffer[100] //接收数据缓存数组,程序此时也不会进入接收中断,在软件上无需做任何事情,要在初始化配置的时候设置好配置就可以了。
2.中断处理:当数据接收完成之后产生接收空闲中断④ 在中断服务函数中做这几件事:
- 判断是否为IDLE接受空闲中断
- 在中断服务函数中将接收完成标志位置1
- 关闭DMA防止在处理数据时候接收数据,产生干扰。
- 计算出接收缓存中的数据长度,清除中断位,
3.接收处理函数(放入while循环中,主程序)
- 主程序中检测到接收完成标志被置1
- 进入数据处理程序,现将接收完成标志位置0,将接收到的数据长度清零
- 根据要求自定义函数
- 重新设置DMA下次要接收的数据字节数,使能DMA进入接收数据状态。
定义接收变量
1 |
|
初始化函数
1 | void USART_RX_IDLE_Init(void) |
IDLE中断函数
==注:1.需要将USART_RX_IDLE_EXTI()
放进stm32l0xx_it.c中的void USART2_IRQHandler(void)
中==
==2.中断一定是UART_FLAG_IDLE==
1 | void USART_RX_IDLE_EXTI(void) |
接收处理函数
1 | void USART_RX_IDLE_DEAL(void) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Kevin's blogs!