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

STM32l072cz单片机串口经常接收不到数据的问题

[复制链接]
阳阳NO1 提问时间:2017-8-14 15:09 /
本帖最后由 阳阳NO1 于 2017-8-14 15:11 编辑

这两天在做LoRa透传模块,发现USART2用起来有问题,不清楚是我哪里没配置好:
现象:
      我接收的数据包最大57个字节,所以我用HAL_UART_Receive(&Sensor_UartHandle,receive_tab,64,50);去固定收64字节,50ms的timeout时间,但每次都是接收正确几包数据后,就出错了,一旦USART发生错误了,就再也接收不到数据了:
Capture.JPG 从图中可以看出:
前面的3包数据没问题,第四包就没收完整了,到了第5包就只收了一个字节,后面再也收不到数据了,
我也在时时读此USART的错误状态:
uart_status = HAL_UART_GetError(&Sensor_UartHandle);
但是从打印来看,根本就没有错误发送,就是*pData++ = (uint8_t)(huart->Instance->RDR & (uint8_t)uhMask);读不到数据。
我自然的想到修改timeout时间,从50改到500,情况依旧,在网上看到有人不停的去初始化USART,我就在每次接收一次之后就去init下此USART,我以30ms一包的频率往芯片里发也没问题了。
不知道各位遇到这样的问题没,究竟是什么原因导致串口收不到数据呢?


收藏 评论9 发布时间:2017-8-14 15:09

举报

9个回答
Dandjinh 回答时间:2017-8-14 15:20:19
会不会是ORE溢出中断的问题?
阳阳NO1 回答时间:2017-8-14 16:24:31
本帖最后由 阳阳NO1 于 2017-8-14 16:26 编辑
Dandjinh 发表于 2017-8-14 15:20
会不会是ORE溢出中断的问题?

我的这个串口没有开任何中断,所以我都是在while(1)里面不停的读状态。我在每次读完数据之后,都去读了错误状态,每次读到的都是0,似乎也没错误发生。
Capture.JPG

废鱼 回答时间:2017-8-14 16:59:27
你把延时长点,50ms有点短,改大点实时。
Dandjinh 回答时间:2017-8-14 17:01:31
HAL_UART_GetError()只有使能了HAL串口中断才能获取到相应的错误,你是查询的话只能自己查寄存器
因为huart->ErrorCode只有在HAL_UART_IRQHandler()才会赋值

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

Dandjinh 回答时间:2017-8-14 17:02:10
你可以看一下HAL_UART_Receive的返回值,这或许能告诉你一些信息
阳阳NO1 回答时间:2017-8-24 13:35:01
安 发表于 2017-8-14 16:59
你把延时长点,50ms有点短,改大点实时。

我从50ms到500ms都试过,现象是一样的。
阳阳NO1 回答时间:2017-8-24 13:53:19
Dandjinh 发表于 2017-8-14 17:01
HAL_UART_GetError()只有使能了HAL串口中断才能获取到相应的错误,你是查询的话只能自己查寄存器
因为huart ...

你说的对。
阳阳NO1 回答时间:2017-8-24 13:54:23
Dandjinh 发表于 2017-8-14 17:02
你可以看一下HAL_UART_Receive的返回值,这或许能告诉你一些信息

这个没用,永远是timeout.
废鱼 回答时间:2017-8-24 13:55:31
波特率配置的是多少,按照波特率算当接收54个字符时,需要的时间。这个延时最好是要大于这个时间。还是建议使用串口中断进行接收。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版