STM32H743 UART接收中断设置与原理剖析(HAL库结合FreeRTOS操作系统)

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

硬件平台: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把注释去掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值