STM32的串口开启中断,在串口悬空(即不接外设)的情况下,CPU会不断的进串口中断服务函数
并且接收到的数据为0,当你把外设接上,一切OK。
void USART2_IRQHandler(void)
{
INT8U tmp;
/* OK */
if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET){
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
tmp = USART_ReceiveData(USART2);
}
}
其实原因很简单,在初始化串口是
输入引脚设置成了悬空输入
-GPIO_Mode_IN_FLOATING。
设置成 上/下拉输入 ,就可以解决。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);