1、使用了串口3和串口4,串口3为USART,而串口4为UART,在进行初始化时,容易踩坑,
一开始将串口4的GPIO_Initure.Alternate配置成GPIO_AF8_UART4; //复用为USART4,
希望大家写的时候也能注意,GPIO_AF8_UART4的管脚映射的并不是PA11,PA12两个端口
串口3:
GPIO_Initure.Pin=GPIO_PIN_10|GPIO_PIN_11; //PC10,11
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;//高速
GPIO_Initure.Alternate=GPIO_AF7_USART3; //复用为USART3
HAL_GPIO_Init(GPIOC,&GPIO_Initure); //初始化PC10,11
串口4:
GPIO_Initure.Pin=GPIO_PIN_11|GPIO_PIN_12; //PA11,12
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;//高速
GPIO_Initure.Alternate=GPIO_AF6_UART4; //复用为USART4
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA11,12
2.在调用串口接收中断时,注意区分USART和UART的区别,要不然,串口中断不起作用,希望大家注意这个坑。
串口3为void USART3_IRQHandler(void),
串口4为void UART4_IRQHandler(void)
3、还有就是中断优先级的问题,我的串口3是
HAL_NVIC_SetPriority(USART3_IRQn,3,3); //抢占优先级3,子优先级3
串口4是 HAL_NVIC_SetPriority(UART4_IRQn,1,0); //抢占优先级4,子优先级4
希望大家在使用STM32H7两串口时,可以有所帮助。