STM32F407使用HAL库做DMA发送数据到串口时系统老是重启

2019-07-20 17:14发布

本帖最后由 Bookworm 于 2017-1-22 20:06 编辑

RT, 使用的是STM32CubeMX生成的MDK工程,在使用DMA功能之前的工程都是正常的. 加了DMA功能, 要实现每按一次按键, DMA就发送一串字符到UART1通过电脑显示.
但是加上DMA功能后, 每按一次按键, 电脑上显示了DMA发送字符串成功了, 但是开发板马上就重启了. 附上工程, 麻烦群友们看看问题出在哪里, 开发板上晶振是8MHz的.

抱歉, 最初发错了工程, 下面为最新的工程:
ex9-1 DMA UART1_correct.zip (16.7 MB, 下载次数: 482) 2017-1-22 20:05 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
charlefu
1楼-- · 2019-07-20 22:23
帮顶!
charlefu
2楼-- · 2019-07-20 22:54
 精彩回答 2  元偷偷看……
FantaSy_
3楼-- · 2019-07-21 01:52
本帖最后由 Bookworm 于 2017-1-23 23:13 编辑
charlefu 发表于 2017-1-23 10:07
粗粗看了你的程序,调用应该是没有问题的。但是流程有点问题,HAL_UART_Transmit_DMA是个异步调用。函数返 ...

查了下, 发现是break;语句放的不合适, 进入if(__HAL_DMA_GET_FLAG(&hdma_usart1_tx,DMA_FLAG_TCIF3_7))之后会执行break;, 而break会跳出整个while(1)大循环, 程序不允许的, 于是重启了. 去掉break就不会重启了.


另外, DMA传输完成后需要HAL_UART_DMAStop(&huart1)关闭, 不然再次按键无法再传输数据了.
Bookworm
4楼-- · 2019-07-21 06:36
本帖最后由 Bookworm 于 2017-1-23 23:11 编辑

附上解决了重启问题的工程.
ex9-1 DMA UART1 - 20170123.zip (16.7 MB, 下载次数: 734) 2017-1-23 23:11 上传 点击文件名下载附件

一周热门 更多>