Interrupt STM32 USART Rx中断不存在´;我不能正常工作

Interrupt STM32 USART Rx中断不存在´;我不能正常工作,interrupt,stm32,usart,stm32f4,Interrupt,Stm32,Usart,Stm32f4,我正在使用STM32F407,并在一个项目上工作,我试图通过USART3接收数据 项目概述: 我必须通过电线发送一个特殊的PWM序列。发送PWM后,我在同一根电线上立即得到串行数据的响应(USART标准,8N1)。我使用定时器1更新中断生成PWM。在最后一个脉冲后,我停用定时器1中断并激活USART Rx中断。然后-正常-我应该收到串行数据。接收数据并将其存储在ringbuffer中的代码在其他项目中工作得非常好 我的问题: 输入的串行数据有时会被正确接收(它是一个96个单字节的流)。使用能够解

我正在使用STM32F407,并在一个项目上工作,我试图通过USART3接收数据

项目概述:

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

我的问题:

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

我认为Rx中断会在每次一个字节到达USART时生成,而与错误标志的状态无关

我真的不知道为什么ISR只在有错误标志的情况下工作一次

有人能帮我吗

更新1

这里有一个简短的更新。 我和一位告诉我,USART也接收PWM信号可能是个问题。当USART仍在运行时,我将尝试将引脚的状态更改为输出。在最后一个PWM脉冲后,我将改变作为UASRT Rx输入的引脚状态。如果USART只能接收串行信号,也许这可以解决问题。我将在这里发布我的程序

解决方案

上周我解决了我的问题

首先,我有一个问题,一个功能配置的Rx引脚输入另一个外设。。。(.)

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

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

现在我可以可靠地接收传入帧


谢谢你的评论和帮助

我们也不知道没有任何代码来分析…抱歉,但我现在不能发布我的代码。我唯一能说的是,如果我也收到串行数据,那么在另一个项目中,完全相同的代码运行良好。但我会尽快发布代码。你的硬件还好吗?IO引脚上有干净的3V3信号吗?接地正确吗?波特率正确吗?在STM407上,USART1和6的时钟与其他USART(APB2和APB1)不同。计时器也是一样,有些在不同的公共汽车上。如果将USART或定时器的代码从一个移动到另一个,则波特率或定时器设置将是错误的。我以前也犯过这样的错误,谢谢你。好的,我会再次检查硬件。USART的配置似乎是正确的,因为我有时可以正确地接收到完整的帧。我不会改变基本配置。我唯一更改的是中断启用…您使用的是哪个IDE?