STM32 USART中断函数进入死循环的问题
最近因为调试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); }