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);
}

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM