张亚飞 发表于 2017-7-20 09:57:43

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

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








张亚飞 发表于 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的方向控制线有别的地方误操作
页: [1] 2
查看完整版本: 用cubemx的串口中断接收时,过一段时间串口中断不进了