STM32 USART接收中断程序问题
我自己编程学习,提取串口发送的5个字节中的第三个字节,用来作判断。现在我用串口调试助手发送5个16进制的字节,试验了好几次,发现串口接收中断一直在循环,存在问题,调不到我...
我自己编程学习,提取串口发送的5个字节中的第三个字节,用来作判断。现在我用串口调试助手发送5个16进制的字节,试验了好几次,发现串口接收中断一直在循环,存在问题,调不到我所想要的结果,希望各位高手帮忙!我对串口的配置如下:
展开
展开全部
void USART1_IRQHandler(void)接收中断函数中一直循环,可能是你中断函数的处理
程序太多了,导致延时太大,建议你直接在中断处理函数里只放些标志位,中断就改变标志位,在主循环中根据标志位处理判断。并且最好再提高系统时钟频率。你用的115200的速度,有点高!
程序太多了,导致延时太大,建议你直接在中断处理函数里只放些标志位,中断就改变标志位,在主循环中根据标志位处理判断。并且最好再提高系统时钟频率。你用的115200的速度,有点高!
更多追问追答
追问
我发现USART_ClearITPendingBit(USART1,USART_IT_RXNE)指令,清不掉RXNE标志位,导致RXNE=1,一直在进接收中断去,你遇到过这情况么?
追答
之所以清不掉中断标记,很可能是它中断间隔太短了,导致清掉了,之后又马上进入中断了!
展开全部
用这个试试:
if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)
{
USART_ClearFlag(USART2,USART_FLAG_ORE); //读SR其实就是清除标志
USART_ReceiveData(USART2); //读DR
}
追问
谢谢你!问题已经找到了,是之前对串口配置的程序顺序出错了,无奈只能采纳一个人的答案
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在哪个函数里循环? 你只发一次,结果串口一直中断?
更多追问追答
追问
void USART1_IRQHandler(void)接收中断函数中一直循环,我即使不从串口助手发数据,这中断函数也一直在循环,怎样配置使得我发完一个字节,接收中断收到后就停下来?
追答
你用示波器看一下,你的RX口是不是电平不稳定?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询