硬件平台:STM32H743
软件平台:Keil 5 采用HAL库+FreeRTOS系统
初始化UART配置
void DEBUG_USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit;
/* 配置串口2时钟源*/
RCC_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;
RCC_PeriphClkInit.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphClkInit);
/* 使能串口时钟 */
__USART2_CLK_ENABLE();
/* 使能GPIO口时钟 */
__HAL_RCC_GPIOD_CLK_ENABLE();
/* 配置USART2------D5、D6 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/* 配置USART2 */
Uart2Handle.Instance = USART2;
Uart2Handle.Init.BaudRate = 115200;
Uart2Handle.Init.WordLength = UART_WORDLENGTH_8B;
Uart2Handle.Init.StopBits = UART_STOPBITS_1;
Uart2Handle.Init.Parity = UART_PARITY_NONE;
Uart2Handle.Init.Mode = UART_MODE_TX_RX;
Uart2Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
Uart2Handle.Init.OverSampling = UART_OVERSAMPLING_16;
Uart2Handle.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED;
Uart2Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
HAL_UART_Init(&Uart2Handle);
/*串口2中断初始化--连接ROS */
HAL_NVIC_SetPriority(USART2_IRQn, 6, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);
/*配置串口接收中断 */
__HAL_UART_ENABLE_IT(&Uart2Handle,UART_IT_RXNE);
}
上述代码也可以用STM32CubeMX自动生成,或者野火例程里面也可以直接复制。如果发现串口HAL函数不可用,很可能并没有引入该库函数。需要在stm327xx_hal_conf.h把注释去掉。

本文详细介绍了基于STM32H743的UART2初始化配置,使用Keil5和HAL库+FreeRTOS系统。讲解了如何配置串口、使能中断、创建通信任务,以及中断服务函数的工作原理。在中断处理中,重点分析了HAL_UART_IRQHandler函数的内部逻辑,并展示了如何编写任务函数和回调函数以实现串口数据的接收与发送。此外,还讨论了中断使能函数的冗余问题和任务等待通知的机制。
3657

被折叠的 条评论
为什么被折叠?



