STM32 USART Rx中断无法正常工作

时间:2017-02-06 21:24:24

标签: interrupt stm32 usart stm32f4

我正在使用STM32F407,并且正在尝试使用USART3接收数据的项目。

项目概述:

我必须通过电线发送一个特殊的PWM序列。在我发送PWM之后,我立即在同一线上获得了串行数据的响应(USART标准,8N1)。我使用timer1更新中断生成PWM。在最后一个脉冲之后,我停用timer1中断,激活USART Rx中断。然后 - 正常 - 我应该收到串行数据。接收数据并将其存储在ringbuffer中的代码在其他项目中工作得非常好。

我的问题:

传入的串行数据有时正确接收(它是96个单字节的流)。使用可以解码USART信号的示波器,我可以看到正确的数据到达USART Rx引脚。但USART Rx中断无法正常工作。大多数情况下,我只收到一个字节(只有一个中断)。为了调试ISR,我已将SR,DR和CR1寄存器保存到一个数组中,以记录发生的错误标志。寄存器值显示我,非常时间,帧的接收失败,我设置了一个或多个不同的错误标志。噪音错误,超限错误和帧错误。但是,如果有时接收有效,我看到没有设置错误标志。

我认为只要一个字节到达USART就会生成一个Rx中断,而与错误标志的状态无关......

我真的不知道为什么如果有错误标志,ISR只能运行一次。

有人可以帮助我吗?

更新1

这是一个简短的更新。 我跟一个告诉我的人说过,USART接收PWM信号也可能是一个问题。当USART仍在运行时,我将尝试将引脚的状态更改为输出。在最后一个PWM脉冲之后,我将把引脚的状态改为UASRT Rx输入。如果USART只能接收串行信号,这可能会解决问题。我会在这里发布我的proccress。

解决方案

上周我解决了我的问题。

首先我遇到的问题是函数将Rx引脚配置为另一个外设的输入......(._。)

第二个问题是信号质量差。 STM32的USART可以在ONEBIT模式下工作。这种模式(据我所知)每次只采样一次而不是三次。所以我将USART的容差提高到了3,88%。

最后,但这只是为了安全起见,在激活USART Rx中断之前,我清除了所有挂起的USART中断位。

现在我可以接收可靠的传入帧。

感谢您的评论和帮助。

0 个答案:

没有答案