UART串口接收中断溢出问题

UART串口接收中断溢出问题

串口在接收数据过多时,会出现串口溢出错误,并进入溢出中断(ORE中断)。

  1. 分析产生错误的原因:

image-20210721173140538

image-20210721155916880

ORE标志位在USART_SR寄存器,但值得注意的是,当我们打开串口接收中断时,同时也就打开了ORE中断。

image-20210721173332138

2.如何解决:

清除ORE位的方法:顺序执行对USART_SR和USART_DR寄存器的读操作。
注意:在此使用USART_ClearITPendingBit(USART1, USART_IT_ORE);清除ORE位是没有任何作用的。还有ORE中断只能使用USART_GetFlagStatus(USART1, USART_FLAG_ORE) 读到(没有使能USART_IT_ERR中断时)。

具体解决方案:

if(USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
{	/*@arg USART_IT_ORE_ER : OverRun Error interrupt if the EIE bit is set */ 
	USART_ClearFlag(USART1, USART_FLAG_ORE); /* 清除溢出中断 */
    (void)UART1->SR;	/*先读SR,再读DR*/
    (void)UART1->DR;
}

if(USART_GetFlagStatus(USART1, USART_FLAG_NE) != RESET)
{
    //同@arg USART_IT_NE: Noise Error interrupt
	USART_ClearFlag(USART1, USART_FLAG_NE);
}

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
	USART_ClearITPendingBit(USART1, USART_IT_RXNE);
	rebuf[num++] = USART_ReceiveData(USART1); /* 读取串口数据 */
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值