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

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

相关推荐

三大运营商(高管)薪酬对比,最高96万
365赢多少钱会被限额

三大运营商(高管)薪酬对比,最高96万

⌛ 10-22 👁️ 540
【月圆英雄强度榜】全英雄强度榜&T0、T1英雄点评!
yy语音中怎么抢麦序?yy语音中抢麦序的方法
365赢多少钱会被限额

yy语音中怎么抢麦序?yy语音中抢麦序的方法

⌛ 09-06 👁️ 4003