本帖最后由 txm2006 于 2012-6-18 15:16 编辑
STM32F051 串口接收数据多时,串口就不能读取到接收的数据。一旦出现异常即使不向串口发送数据,也会一直进中断。 | 中断函数如下:
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_FLAG_ORE) != RESET)
{
USART_ClearITPendingBit(USART2, USART_FLAG_ORE);
UART2_temp_buff = USART_ReceiveData(USART2);
}
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
UART2_temp_buff = USART_ReceiveData(USART2);
}
}
USARTx
ISR 寄存器 的值为0x006000D8
中断程序中已经清除了ORE标志,但是不起作用。
问题已经困扰好几天了,求指点!
位 3 ORE: 溢出错误
在RXNE=1 的的条件下(也就是上次数据还没有读走),串口接收寄存器又接收好
了一个字节的数据并准备往RDR 寄存器去转移的时候,会由硬件将这个位置1。
由软件向USART_ICR 寄存器的ORECF 位写1,可以清除这个标志。
如果USART_CR1 寄存器中的RXNEIE 位或EIE 位是1,就会产生中断请求。
0: 没有溢出错误
1: 检测到溢出错误
注: 1. 当这个位被置1,RDR 寄存器中的数据不会丢,但移位寄存器中的(那个新的)
数据就会蒸发掉了。 如果在多缓冲区通讯时EIE 位是1,并且ORE 标志被置1 的话,
就会同步引起一个中断请求。
2. 如果USART_CR3 寄存器中的OVRDIS 位是1,那么这个位就会被长期的强制
为零(没有了溢出检测功能)
|
|