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

用cubemx的串口中断接收时,过一段时间串口中断不进了

[复制链接]
张亚飞 提问时间:2017-7-20 09:57 /
我用stm32cubemx建的工程本来跑的挺好的,最近发现有bug。 我用uart1 在TIM3里边 1s定时发送数据,采用问答式通讯,对端收到了之后发送8个字节的应答。问题是跑了几十分钟之后或者一个小时多串口中断进不去了,我用两根线挂在总线上在电脑上用串口助手监听收发的数据,发送和应答的过程还在持续,其他功能也都正常只是cubemx的程序认为没有收到数据。很难定位是哪里的问题。我把定时器发送 和接收的代码贴在下边还有仿真的界面。

TIM3

TIM3



收发函数

收发函数


仿真

仿真



收藏 评论10 发布时间:2017-7-20 09:57

举报

10个回答
张亚飞 回答时间:2017-7-20 10:03:16
仿真图是问题出现之后可以不停的到第一个断点,第二个断点进不去。
张亚飞 回答时间:2017-7-20 14:35:01
刷一次
废鱼 回答时间:2017-7-21 10:34:43
楼主你看一下串口状态,如果是发生了溢出,重新初始化。
张亚飞 回答时间:2017-7-21 11:06:23
安 发表于 2017-7-21 10:34
楼主你看一下串口状态,如果是发生了溢出,重新初始化。

版主你好。 为什么会发生溢出呢?  而且仿真时怎么确定是不是溢出呢?
废鱼 回答时间:2017-7-21 11:20:17
串口结构体里面有个串口标志位。溢出是因为接收超时导致的。仿真的时候容易出这个问题。
张亚飞 回答时间:2017-7-21 13:59:59
安 发表于 2017-7-21 11:20
串口结构体里面有个串口标志位。溢出是因为接收超时导致的。仿真的时候容易出这个问题。 ...

不仿真的时候也这样,而且中断式接收的话跟超时应该没关系吧?
废鱼 回答时间:2017-7-21 14:17:14
楼主,你可以看一下手册里面介绍的,溢出产生的原因:
This bit is set by hardware when the word currently being received in the shift register is
ready to be transferred into the RDR register while RXNE=1. An interrupt is generated if
RXNEIE=1 in the USART_CR1 register. It is cleared by a software sequence (an read to the
USART_SR register followed by a read to the USART_DR register).
任风吹吹 回答时间:2017-7-21 17:37:58
你的串口接收中断优先级是多少?定时器的中断优先级又是多少?将这两个中断优先级改为相同的试下。
张亚飞 回答时间:2017-7-24 10:18:57
任风吹吹 发表于 2017-7-21 17:37
你的串口接收中断优先级是多少?定时器的中断优先级又是多少?将这两个中断优先级改为相同的试下。 ...

谢谢,问题已经找到是485的方向控制线有别的地方误操作
leo2333 回答时间:2019-10-18 14:29:22
张亚飞 发表于 2017-7-24 10:18
谢谢,问题已经找到是485的方向控制线有别的地方误操作

哈哈,我遇到的也是这个问题,感谢分享!

所属标签

相似问题

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