你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

汇报STM32F030的UART在DMA接收下的HAL BUG

[复制链接]
a208hlc-57526 提问时间:2015-7-28 03:15 /
我测试了Cube下STM32F030的DMA接收串口数据函数,如下
HAL_UART_Receive_DMA(&huart1, RxDatabuf, 32);
如果该函数被调用前,串口已经发生数据溢出,则调用该函数,DMA接收将不会正常启动,只接收1个字符,然后卡住这无法运行,无论是否重新调用该函数,都继续卡着,包括调用HAL_UART_DMAStop(&huart1) 也无济于事。
解决办法还没有仔细研究,但重新初始化串口之后可以继续运行。还没测试直接清除串口溢出位标志是否可行,但直接操作寄存器有违HAL的初衷。

如果可能的话,ST的cube能否修正一下呢?HAL用的人越来越多了,不知道其他型号是否也存在这个问题。
收藏 1 评论13 发布时间:2015-7-28 03:15

举报

13个回答
ts2000 回答时间:2015-7-28 08:30:34
STM32F030 的外设好像是有点问题。上次我用SPI的也是有问题
JackieLaura 回答时间:2015-7-28 09:05:29
没用过HAL库,无能为力,帮顶。。
a208hlc-57526 回答时间:2015-7-28 10:57:21
其实STM32F0xx串口还有个新的中断,叫接收超时中断,注意,不是空闲中断哦,可以设置超时时间,STM32多少年才改进这个设计啊,有兴趣可以去测试一下
你好我好大家好! 回答时间:2015-7-28 12:01:51
帮顶                          
stary666 回答时间:2015-7-28 13:38:33
从不用HAL库
a208hlc-57526 回答时间:2015-7-28 14:24:13

HAL越来越强大,跨芯片平台,统一了STM32F系列的所有芯片,代码迁移很容易,只是现在bug还较多
stary666 回答时间:2015-7-29 12:10:17
bug最致命啊
gujiao 回答时间:2016-1-15 23:05:31
      我用的是F103也遇到了类是问题,在仿真状态下串口接收正常,直接上电运行串口就不能有效接收数据。首先感谢楼主给出具体的问题所在。
      我发现如果在开启DMA接收前,已经使能了串口接收就有可能出现接收溢出。解决办法就是调用了HAL_UART_Receive_DMA函数后再使能串口接收。
     方法一、数据发送时串口只配置为UART_MODE_TX,收据接收时串口配置为UART_MODE_RX或UART_MODE_TX_RX。
     方法二、以#define __HAL_UART_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR1 |=  USART_CR1_UE)为原型,建立串口接收和发送使能失效功能函数,随时可用。
#define __HAL_UART_TX_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR1 |=  USART_CR1_TE)

#define __HAL_UART_TX_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->CR1 &=  ~USART_CR1_TE)
loook 回答时间:2016-10-19 22:49:31
楼主兄弟遇到的问题我也遇到了,我也汇报一下情况吧,希望大家共同进步,因为我解决问题的思路也是来自相关论坛。最近我在调试串口,USB,以及蓝牙模块的通信。大致流程是蓝牙接收的数据经过MCU串口接收,经过处理,在由USB转发出去。需要说明的是用的是ST公司推出的HAL库。在串口接收数据遇到了不少的麻烦,其中就是HAL_UART_Receive_DMA接收数据。遇到了楼主遇到的问题“如果该函数被调用前,串口已经发生数据溢出,则调用该函数,DMA接收将不会正常启动,只接收1个字符,然后卡住这无法运行,无论是否重新调用该函数,都继续卡着,包括调用HAL_UART_DMAStop(&huart1) 也无济于事。”为什么会这样呢?原因是蓝牙模块配置好以后收到了来自另一个蓝牙模块的命令。该命令本来是用来控制另一个模块的,但是由于没有及时检测到蓝牙已经连接,然后控制命令经过蓝牙透传模式发到了我这边,但是实际上我这边还没有,下发开始传输数据的命令,也就是说发生了串口上溢的错误,导致当发送开始传输命令时怎么也接收不到数据。我采用的解决办法是重新初始化了串口,然后问题迎刃而解。不过个人感觉应该还有其他办法解决这个问题,需要仔细研究一下HAL库和芯片的datasheet。好吧先这样了,回头接着汇报吧。我的联系方式345938198,有问题希望大家多多交流。
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版