STM32 USART接收中断程序问题

我自己编程学习,提取串口发送的5个字节中的第三个字节,用来作判断。现在我用串口调试助手发送5个16进制的字节,试验了好几次,发现串口接收中断一直在循环,存在问题,调不到我... 我自己编程学习,提取串口发送的5个字节中的第三个字节,用来作判断。现在我用串口调试助手发送5个16进制的字节,试验了好几次,发现串口接收中断一直在循环,存在问题,调不到我所想要的结果,希望各位高手帮忙!我对串口的配置如下: 展开
 我来答
yuliang_8
推荐于2017-12-15 · 超过19用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:36万
展开全部
void USART1_IRQHandler(void)接收中断函数中一直循环,可能是你中断函数的处理
程序太多了,导致延时太大,建议你直接在中断处理函数里只放些标志位,中断就改变标志位,在主循环中根据标志位处理判断。并且最好再提高系统时钟频率。你用的115200的速度,有点高!
更多追问追答
追问
我发现USART_ClearITPendingBit(USART1,USART_IT_RXNE)指令,清不掉RXNE标志位,导致RXNE=1,一直在进接收中断去,你遇到过这情况么?
追答
之所以清不掉中断标记,很可能是它中断间隔太短了,导致清掉了,之后又马上进入中断了!
waitig888
2014-06-18
知道答主
回答量:2
采纳率:0%
帮助的人:2.4万
展开全部

用这个试试:

 

if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)
{
      USART_ClearFlag(USART2,USART_FLAG_ORE); //读SR其实就是清除标志
      USART_ReceiveData(USART2);    //读DR
}
追问
谢谢你!问题已经找到了,是之前对串口配置的程序顺序出错了,无奈只能采纳一个人的答案
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
泉谈轶事5I
2013-09-09 · TA获得超过453个赞
知道小有建树答主
回答量:369
采纳率:0%
帮助的人:205万
展开全部
在哪个函数里循环? 你只发一次,结果串口一直中断?
更多追问追答
追问
void USART1_IRQHandler(void)接收中断函数中一直循环,我即使不从串口助手发数据,这中断函数也一直在循环,怎样配置使得我发完一个字节,接收中断收到后就停下来?
追答
你用示波器看一下,你的RX口是不是电平不稳定?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式