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接受中断 */

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值