上次讲到了STM32串口波特率在使用中的改变:
void MX_USART_UART_Init(UART_HandleTypeDef *huart, USART_TypeDef * uart, int BaudRate)
{huart->Instance = uart;huart->Init.BaudRate = BaudRate;huart->Init.WordLength = UART_WORDLENGTH_8B;huart->Init.StopBits = UART_STOPBITS_1;huart->Init.Parity = UART_PARITY_NONE;huart->Init.Mode = UART_MODE_TX_RX;huart->Init.HwFlowCtl = UART_HWCONTROL_NONE;huart->Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(huart) != HAL_OK){Error_Handler();}
}
然后在需要改变波特率的地方添加:
//波特率修改
if(rxdata[2] == 1)
{MX_USART_UART_Init(&huart1, USART1, 115200);
}
if(rxdata[2] == 0)
{MX_USART_UART_Init(&huart1, USART1, 9600);
}
就可以改变波特率了,在测试中真的非常顺利,在实际使用碰到了问题,调试好几天都没有想出解决的方案,因为串口的寄存器都是对的,今天不知道为什么突然想到了解决方法,竟然成功了,在改变波特率后添加开启中断使能。
void MX_USART_UART_Init(UART_HandleTypeDef *huart, USART_TypeDef * uart, int BaudRate)
{huart->Instance = uart;huart->Init.BaudRate = BaudRate;huart->Init.WordLength = UART_WORDLENGTH_8B;huart->Init.StopBits = UART_STOPBITS_1;huart->Init.Parity = UART_PARITY_NONE;huart->Init.Mode = UART_MODE_TX_RX;huart->Init.HwFlowCtl = UART_HWCONTROL_NONE;huart->Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(huart) != HAL_OK){Error_Handler();}HAL_UART_Receive_IT(huart, Usart1_RxBuffer, 1); //改变串口波特率后,要加这句话,很重要,打开串口中断使能}
竟然完美解决了,太开心了。
有时候一个小问题憋好几天,真的太难了。