打印
[STM32L1]

USART2进中断老是出不来问题解决了--分享

[复制链接]
1707|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
weicheng168|  楼主 | 2016-2-7 00:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
花了我一天时间,在网上也找了相同的问题,进入USART2中断出不来,不是一直出现rxne 接收中断,而是出现溢出中断,我的问题是,外部USART2输入频率是115200,而我CPU工作在8M,所以,一直处理不过来,经常出现溢出,我把外部频率设置为9600后,一切正常,分享
沙发
zchong| | 2016-2-7 09:43 | 只看该作者
分享是好事,必须点赞!!!

有些哥们就让人吃不消了,大家下面一顿分析,最后他来一个解决了,然后就没有然后了

使用特权

评论回复
板凳
yklstudent| | 2016-2-7 12:49 | 只看该作者
估计楼主串口处理速度慢了

使用特权

评论回复
地板
wsnsyy| | 2016-2-7 13:38 | 只看该作者
过年还在忙啊,辛苦了

使用特权

评论回复
5
mohanwei| | 2016-2-7 17:57 | 只看该作者
不是处理不过来的问题……
是STM32的一个bug,一旦启用接收中断,会默认启动溢出中断……但是库例程里都没有处理溢出中断……
此时只要你的电路没做好保护,在MCU初始化前就收到了数据,只要你一使能串口接收中断就会出不来,不管波特率是多少都一样。
改一下串口中断函数就可以了:
void USart1Handler(void)
{
  ...//原来的接收中断处理
  ...//原来的发送中断处理

//新添加溢出中断处理:
  //溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
    if(USART_GetFlagStatus(g_ulUARTBase[ulPort],USART_FLAG_ORE)==SET)
    {
        USART_ClearFlag(USART1,USART_FLAG_ORE);//读SR
        USART_ReceiveData(USART1);//读DR
    }
}

使用特权

评论回复
6
quray1985| | 2016-2-8 16:20 | 只看该作者
这个外部频率是什么意思,是晶振的频率吗?

使用特权

评论回复
7
643757107| | 2016-2-8 19:55 | 只看该作者
通常来说对于串口来讲,9600bps是最稳定的位置,首先,速率可以满足基本上的字符串发送接收,再次,这个速率很稳定,不会出现识别错误。

使用特权

评论回复
8
734774645| | 2016-2-10 09:46 | 只看该作者
进入后,要设置退出的条件啊。比如清中断标志。不能用死循环。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝