STM32G DMA串口发送接收

  • 串口通信:通过 UART3 接收外部设备发送的 RGB 颜色命令,解析后通过 DMA 方式返回处理结果。
  • 命令格式 :接收形如 R:255,G:128,B:64 的字符串,分别对应红、绿、蓝三个通道的亮度值(0~255)。
  • 错误处理 :若命令格式错误或数值超出范围(非 0~255),返回 "ERROR";成功则返回 "OK"
  • 状态更新 :解析成功后,将颜色值存储到 rgb_color 数组,供后续 LED 控制使用。
  1. 中断触发 :当串口接收数据后进入空闲状态(IDLE),触发中断回调函数 UsarReceive_IDLE
  2. 数据捕获
    • 清除 IDLE 中断标志,停止当前 DMA 接收。
    • 计算已接收数据长度 serialRxN(通过 DMA 剩余计数推导)。
    • 在接收缓冲区末尾添加字符串结束符 '\0'
  3. 命令解析
    • 使用 sscanf 解析字符串格式,提取 RGB 值。
    • 校验格式有效性(返回值是否为 3)和数值范围(0~255)。
  4. 响应处理
    • 成功 :将解析的 RGB 值存入 rgb_color 数组,填充 "OK" 到发送缓冲区。
    • 失败 :填充 "ERROR" 到发送缓冲区。
  5. 结果返回:通过 DMA 方式将响应发送回请求方。
  6. 循环接收:重新启动 DMA 接收,等待下一条命令。
  • IDLE 中断:利用串口空闲中断(IDLE)高效捕获不定长数据,避免超时判断。
  • DMA 传输
    • 接收 :通过 DMA 自动将串口数据存入 uartRxBuf,降低 CPU 负担。
    • 发送:通过 DMA 异步发送响应数据,无需阻塞等待。
  • 字符串解析 :使用 sscanf 格式化提取数值,简化命令解析逻辑。