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);
时间: 2024-10-13 23:22:08