高质量程序是怎么写出来的?串口DMA机制

💡 原文中文,约19200字,阅读约需46分钟。
📝

内容提要

本文介绍了串口的DMA功能及其作用,包括低速通信场景下不需要使用DMA,但对于大数据量和高波特率的情况,使用DMA可以提高串口性能。文章详细介绍了串口DMA接收和发送的实现方式,并提供了配置代码和处理方法。最后,给出了完整的源码和压力测试结果。

🎯

关键要点

  • DMA(直接存储器访问)可以在数据传输过程中释放CPU资源。
  • 在低速通信场景下,串口不需要使用DMA,但在高波特率和大数据量情况下,使用DMA是必要的。
  • 高波特率下,使用DMA可以避免线程阻塞和频繁中断带来的CPU资源消耗。
  • STM32串口使用DMA的基本流程包括初始化串口、使能DMA接收模式和配置DMA参数。
  • 串口DMA接收需要使用双缓冲机制,以避免数据覆盖风险。
  • DMA接收数据时,需处理buf溢满和buf半满中断,以及串口空闲中断。
  • DMA发送时,需在每次发送数据前重新配置DMA通道。
  • 发送处理函数需循环查询发送fifo,确保数据及时发送。
  • 串口设备的数据结构包括发送状态、发送和接收fifo、DMA接收和发送缓存等。
  • 压力测试表明,1.5Mbps波特率下,STM32F0能够稳定接收和发送数据。
➡️

继续阅读