计算机系统应用教程网站

网站首页 > 技术文章 正文

串口空闲中断实现单片机高效接收不定长数据

btikc 2024-10-12 11:44:49 技术文章 9 ℃ 0 评论

在调通STM32基于HAL库的串口收发程序后,我用的20ms的定时查询在主循环里面判断接收buff有数据,总感觉效率太低了。于是把它改为了基于空闲中断的方式进行处理,这样能在每一帧接收之后及时进行处理,响应快,效率高。

空闲中断的处理也需要我们自己手动添加,在LPUART1_IRQHandler这个函数里面,请把自己的代码放在HAL_UART_IRQHandler(&hlpuart1)后面。

这就实现了基于空闲中断完成不定长数据的接收,我寻思既然都写到这了,那就把接收再改为DMA吧,这样在波特率高了之后效率更高,这才是终极的解决办法。

同样,在初始化之后需要手动开启空闲中断,并打开DMA接收。

同样的,需要自己在空闲中断里面重开DMA接收。

这样就解放了CPU,串口的接收完全不需要CPU参与,交给DMA,程序上也不需要再写串口接收回调函数,等一帧报文接收完成之后,在空闲中断里面把数据取出来交给处理机制。

运行测试一下。

习惯了寄存器的开发,一下子转HAL库还是有点不习惯。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表