最近因為調試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);
}
