2026/6/19 8:55:27
网站建设
项目流程
做阿里巴巴网站可以贷款吗,网站后台怎么用ftp打开,企业管理系统项目简介怎么写好,c4d培训机构推荐目录
一、前言二、DMA 通信核心原理简述三、CubeMX 的 DMA 串口配置四、FreeRTOS DMA 收发任务代码开发五、总结六、结尾
一、前言
前文我们已经完成了串口 RS485 通信的查询方式与中断方式开发#xff0c;两种方式各有适配场景。本次笔记将在此基础上#xff0c;讲解串口…目录一、前言二、DMA 通信核心原理简述三、CubeMX 的 DMA 串口配置四、FreeRTOS DMA 收发任务代码开发五、总结六、结尾一、前言前文我们已经完成了串口 RS485 通信的查询方式与中断方式开发两种方式各有适配场景。本次笔记将在此基础上讲解串口通信的第三种实现方案 ——DMA 方式。串口的收发数据始终依靠 TDR 发送寄存器、RDR 接收寄存器完成数据中转无论数据量多少都需经这两个寄存器经手而 DMA 相当于独立的「硬件搬运工」可自主完成寄存器与内存之间的数据搬运全程无需 CPU 参与能最大化解放 CPU 资源是串口大数量、高频次数据传输的最优方案本次依旧基于 FreeRTOS 多任务完成功能开发保持功能逻辑不变。二、DMA 通信核心原理简述DMA直接存储器访问的核心作用是在外设寄存器与内存地址之间建立独立的数据传输通道无需 CPU 的指令干预自主完成数据的读写搬运。对于串口通信而言发送时DMA 将内存中的数据搬运至串口 TDR 发送寄存器接收时DMA 将串口 RDR 接收寄存器的数据搬运至内存整个传输过程 CPU 可完全脱离仅在传输完成 / 异常时触发少量响应逻辑大幅降低 CPU 的资源占用率。三、CubeMX 的 DMA 串口配置CubeMX 中有 DMA 功能的专属配置页面本次开发沿用之前的串口 2 作为发送端、串口 4 作为接收端为两路串口分别配置独立的 DMA 通道其余串口、中断、FreeRTOS 相关配置均与上一篇中断版保持一致具体 DMA 配置如下配置Channel0作为串口 2 的 DMA 通道触发方式选择UART2_TX数据传输方向为内存到外设源地址设置为每次递增 1 字节。配置Channel1作为串口 4 的 DMA 通道触发方式选择UART4_RX数据传输方向为外设到内存目的地址设置为每次递增 1 字节。四、FreeRTOS DMA 收发任务代码开发DMA 方式的串口开发在代码层面的逻辑与中断方式几乎完全一致核心改动仅为将中断收发启动函数替换为 DMA 收发启动函数依旧沿用此前编写的完成等待函数做传输状态判断与超时控制当接收出现超时异常时调用专用函数停止对应串口的 DMA 传输规避异常占用完整的任务代码如下// 串口2 DMA发送任务周期发送自增字节数据staticvoidCH1_UART2_TxTaskFunction(void*pvParameters){uint8_tc0;while(1){HAL_UART_Transmit_DMA(huart2,c,1);// 启动串口2 DMA发送1字节wait_uart2_tx_cplt(100);// 等待DMA发送完成超时100msvTaskDelay(1000);// 延时1秒固定周期发送c;// 发送数据自增}};// 串口4 DMA接收任务接收数据并实时显示至LCDstaticvoidCH2_UART4_RxTaskFunction(void*pvParameters){uint8_tc0;intcnt0;charbuf[100];HAL_StatusTypeDef err;while(1){errHAL_UART_Receive_DMA(huart4,c,1);// 启动串口4 DMA接收1字节if(wait_uart4_rx_cplt(1000)0)// 等待DMA接收完成超时1000ms{// 接收成功格式化数据并LCD显示sprintf(buf,Recv Data : 0x%02x, Cnt : %d,c,cnt);Draw_String(0,0,buf,0x0000ff00,0);}else{HAL_UART_DMAStop(huart4);// 接收超时停止串口4的DMA传输}}};由此能清晰看出串口的 DMA 传输与中断传输在业务代码的实现逻辑上本质一致只是底层的硬件数据传输方式不同。五、总结串口通信有查询、中断、DMA 三种实现方式核心数据中转均依赖 TDR/RDR 寄存器DMA 为硬件独立搬运数据无需 CPU 参与相比中断更能解放 CPU 资源传输效率更高DMA 版代码逻辑与中断版高度复用仅替换收发启动函数开发适配成本低DMA 传输需做好超时异常处理通过停止 DMA 规避硬件资源异常占用三种方式各有优势查询简单、中断省资源、DMA 效率最优按需选型即可。六、结尾本次完成了串口 RS485 通信三种实现方式的闭环学习从查询到中断再到 DMA是逐步优化 CPU 资源利用、提升传输效率的过程也是嵌入式开发的核心优化思路。三种串口通信方式的开发逻辑可通用至各类外设是嵌入式必备的基础能力。感谢各位的阅读持续关注本系列后续将带来更多项目实战的干货复盘与技术优化