STM32 HAL库串口波特率及其他配置动态修改指南

    一般情况下,STM32串口使用固定的波特率等参数进行通信,为了灵活适配各种应用场景,增加在线485方式修改串口参数功能,且串口的相关参数保存在EEPROM中,保证下次断电重启时修改的参数有效。芯片型号:STM32L431CCT6;使用HAL库开发。

    串口原有固定波特率配置如下:

    UART1_Handler.Instance=USART1;                        
    UART1_Handler.Init.BaudRate=9600;                   
    UART1_Handler.Init.WordLength=UART_WORDLENGTH_9B;   
    UART1_Handler.Init.StopBits=UART_STOPBITS_1;       
    UART1_Handler.Init.Parity=UART_PARITY_EVEN;          
    UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   
    UART1_Handler.Init.Mode=UART_MODE_TX_RX;            
    if (HAL_UART_Init(&UART1_Handler) != HAL_OK)    
    {
     Error_Handler(__FILE__, __LINE__);
    }
        
    CLEAR_BIT(USART1->ISR, USART_ISR_TC);   /* 清除TC发送完成标志 */
  CLEAR_BIT(USART1->ISR, USART_ISR_RXNE); /* 清除RXNE接收标志 */
    SET_BIT(USART1->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE);    /* 使能PEIE, RX接受中断 */

在线修改串口参数时使用以下配置(在串口接收协议中处理),需要注意的地方主要是先失能串口__HAL_UART_DISABLE(&UART1_Handler);,初始化之后再使能__HAL_UART_ENABLE(&UART1_Handler);

        __HAL_UART_DISABLE(&UART1_Handler);
        UART1_Handler.Instance=USART1;                       
        UART1_Handler.Init.BaudRate=baud_rate;                   
        UART1_Handler.Init.WordLength=pdata_len;   
        UART1_Handler.Init.StopBits=stopbit_len;        
        UART1_Handler.Init.Parity=aParity;            
        UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   
        UART1_Handler.Init.Mode=UART_MODE_TX_RX;           
        if (HAL_UART_Init(&UART1_Handler) != HAL_OK)    
        {
             Error_Handler(__FILE__, __LINE__);
        }
        
        __HAL_UART_ENABLE(&UART1_Handler);
        
        CLEAR_BIT(USART1->ISR, USART_ISR_TC);   /* 清除TC发送完成标志 */
        CLEAR_BIT(USART1->ISR, USART_ISR_RXNE); /* 清除RXNE接收标志 */
        SET_BIT(USART1->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE);    /* 使能PEIE, RX接受中断 */

作者:wheat_123

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 HAL库串口波特率及其他配置动态修改指南

发表回复