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

  

 

 
posted @ 2020-06-20 22:31  秋水寒林  阅读(1886)  评论(0编辑  收藏  举报