stm32f407 6路串口dma配置_FreeRTOS例程4-串口DMA收发不定长数据

v2-85561ea69402d1a7222f0269c840cbd4_1440w.jpg?source=172ae18b

1 基础知识点

DMA

DMA(Direct Memory Access),即直接内存存储,在一些数据的传输中,如串口、SPI等,采用DMA方式,传输过程不需要CPU参与,可用让CPU有更多的时间处理其他的事情。

STM32F4的DMA通道选择如下:

v2-f1a91f6ade6ea97996d442e8eefecc84_b.jpg

接下来的程序思路如下:

v2-e789198da762fbc62df20694b021bf90_b.jpg

2 编程要点

2.1 DMA发送

2.1.1 串口DMA发送配置

由于是发送不定长的数据,先不需要配置发送的长度,在每次的发送时,再配置。

//=======================================

2.1.2 DMA发送完成中断

DMA发送完成后,触发DMA发送完成中断,这里可用释放自定义的DMA发送完成信号量,表明下次的DMA传输可用进行。

//=======================================

2.1.3 DMA发送函数接口

//=======================================

2.2 DMA接收

2.2.1 串口DMA接收配置

需要配置一个接收地址和一个接收长度,用于DMA接收数据的暂存。

//=======================================

2.2.2 串口空闲中断

串口空闲中断的作用与上一篇

码农爱学习:FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用​zhuanlan.zhihu.com
v2-dcf089f1bea515ca456c2db1439671fa_180x120.jpg

介绍的一样,都是在发送完一串字符后被触发,这次由于使用了DMA接收,所以接收的数据在DMA缓冲区,且接收的数据长度可用根DMA接收通道的总长度与剩余长度的差值来计算,将接收的数据复制出来使用即可,同时释放自定义的串口空闲信号量,以便其它任务可用及时获取串口接收到的数据。

//=======================================

2.3 串口配置与测试任务

2.3.1 串口配置

基础的GPIO配置,以及串口空闲中断配置,并调用上面的串口DMA发送与接收配置。

//=======================================

2.3.2 测试任务

创建DMA发送完成信号量和串口空闲信号量,并先释放DMA发送完成信号量,用于第一次DMA发送时获取信号量。然后测试两条DMA发送不定长字符串,最后测试DMA接收不定长字符串。

//打印任务函数(测试任务)

3 实验结果

通过串口助手,可以先接收到DMA发送的两个字符串(第一条hello是测试串口的,不是DMA发的),然后通过串口调试助手发送两次nice to meet you,测试DMA接收。

hello
ma nong ai xue xi
xxpcb.github.io
receive:nice to meet you
receive:nice to meet you

完整工程代码已保存至GitHub:

https://github.com/xxpcb/FreeRTOS-STM32F407-examples​github.com

觉得文章有用,可以关注我哟~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值