初级会员

- 积分
- 85
- 金钱
- 85
- 注册时间
- 2019-4-29
- 在线时间
- 43 小时
|
最近在弄STM32 + 串口DMA接收和发送,在论坛上参考这位原创作者(http://www.openedv.com/forum.php ... d=284146&extra=)的实例后,利用串口DMA接收+空闲中断,然后串口DMA再发送接收的数据,一开始测试预期的功能好像达到了,但是在测试串口发送的字节大于设定DMA接收的字节时,会出现BUG(通过仿真发现再重新开启DMA接收时,接收数组的第一个字节已被写入)。后面查看了数据手册,发现在重新开启DMA接收时,需要停止通道工作才能重新写入数据传输数量,也就是停止DMA_Cmd(x,DISABLE)DMA的同时,也要停止串口2的DMA发送或接收USART_DMACmd(x,x,DISABLE)原创作者的是没有停止的,我后面修改后加上就好了。(但是做DMA发送时加或不加都没有bug,原子哥的也只是使能了串口的DMA发送 )
修改后:1,串口DMA接收到多少个字节,然后串口DMA再发送多少个字节(串口DMA已不会发送设定的字节数)
2,串口DMA接收到超过设定DMA接收字节数,然后串口DMA再稳定发送设定的字节
原创作者出现的BUG
修改后
代码优化
修改后_UART1_DMA接收和发送.rar
(289.59 KB, 下载次数: 1427)
|
|