最近因为调试ESP8266,发现一直USART1(ESP8266用的是UASRT1)中断函数一直进入死循环问题,网上也找了很多资料,可是都是说ORE没有清除的原因导致的,尝试了还是不行,反复检查了我的代码N次,一点头绪都没有,想了下,我就使用USART2纯粹的做一个实验,验证一下到底是哪里出了问题?
我用的芯片是STM32F030R8,在USART2中断函数增加如下红色代码,就会进入中断死循环,放在任何地方都不行,如果要在中断发送字符给USART(在中断函数中发送字符给USART,中断就会进入死循环),最好是按照蓝色字体的方式!
USART2中断服务函数
void USART2_IRQHandler(void)
{
uint8_t temp;
//printf("coming in USART2\r\n");
//USART2_Send_Byte(USART2,65);
//printf("coming in USART2_Interrupt i---- %d\n",i++);
if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) != RESET)
{
//printf("coming in USART2_Interrupt z---- %d\n",z++);
// temp = USART_ReceiveData(USART2);
//USART_SendData(USART2, USART_ReceiveData(USART2));
// USART2_Send_Byte(USART2,65);
}
//USART2_Send_Byte(USART2,65);
}

编辑的时候可以看到着色,编辑完就没有了,按照C语言的风格来了,这里截个编辑时的着色图片
printf,USART2_Send_Byte封装函数如下
void USART2_Send_Byte(USART_TypeDef* pUSARTX, uint8_t Data)
{
pUSARTX->TDR = (Data & (uint16_t)0x01FF);
while(USART_GetFlagStatus(pUSARTX, USART_FLAG_TXE) == RESET);
}
int fputc(int data, FILE * file)
{
USART_SendData(USART2, (uint8_t)data);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
return data;
}
int fgetc(FILE * file)
{
while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);
return USART_ReceiveData(USART2);
}
