现象:
串口2可以正常printf到窗口,串口1printf没有反应
原因:
由于串口1的功能复用和串口2的功能复用不相同,查表可得
Table 12. Alternate functions selected through GPIOA_AFR registers for port A
而代码中均复制了AF1的复用,导致了串口1无法正常使用:
/*
USART1
PB6
PB7
*/
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟
GPIO_Initure.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_Initure.Mode = GPIO_MODE_AF_PP;
GPIO_Initure.Pull = GPIO_NOPULL;
GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_Initure.Alternate = GPIO_AF1_USART1; //此处有误,需改为GPIO_AF0_USART1
HAL_GPIO_Init(GPIOB, &GPIO_Initure);
/*
USART2
PA2
pA3
*/
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_USART2_CLK_ENABLE(); //使能USART2时钟
GPIO_Initure.Pin = GPIO_PIN_2|GPIO_PIN_3;
GPIO_Initure.Mode = GPIO_MODE_AF_PP;
GPIO_Initure.Pull = GPIO_PULLUP;
GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_Initure.Alternate = GPIO_AF1_USART2;
HAL_GPIO_Init(GPIOA, &GPIO_Initure);
解决办法:
串口1的复用由GPIO_AF1_USART1改为GPIO_AF0_USART1