1 STM32 USART 串口 DMA 接收和发送的源码详解
嘿儿哈20130126 一直都没有机会用STM32 做什么项目,好在公司产品要平台升级,用到了STM32,所以最近在调试STM32,先说USART,后面再来说I2C 等等 硬件平台:STM32F103ZET6; 开发环境:KEIL 4; 先说说应用通讯模式,串口终端的工作方式和迪文屏差不多,终端被动接受MCU 发的指令,终端会偶尔主动发送一些数据给MCU(像迪文屏的触摸信息上传)
串口DMA 发送: 发送数据的流程: 前台程序中有数据要发送,则需要做如下几件事 1
在数据发送缓冲区内放好要发送的数据,说明:此数据缓冲区的首地址必须要在DMA 初始化的时候写入到DMA 配置中去
将数据缓冲区内要发送的数据字节数赋值给发送DMA 通道,(串口发送DMA和串口接收 DAM 不是同一个 DMA 通道) 3
开启 DMA,一旦开启,则 DMA 开始发送数据,说明一下:在KEIL 调试好的时候,DMA 和调试是不同步的,即不管 Keil 是什么状态,DMA 总是发送数据
等待发送完成标志位,即下面的终端服务函数中的第 3 点设置的标志位
或者根据自己的实际情况来定,是否要一直等待这个标志位,也可以通过状态机的方式来循环查询也可以
或者其他方式
判断数据发送完成: 启动DMA 并发送完后,产生 DMA 发送完成中断,在中断函数中做如下几件事: 1
清 DMA 发送完成中断标志位 2
关闭串口发送DMA 通道 3
给前台程序设置一个软件标志位,说明数据已经发送完毕 串口DMA 接收: 接收数据的流程: 已 核 实通过 2 串口接收DM A 在初始化的时候就处于开启状态,一直等待数据的到来,在软件上无需做任何事情,只要在初始化配置的时候设置好配置就可以了
判断数据数据接收完成: 这里判断接收完成