【发布时间】:2019-12-08 12:49:36
【问题描述】:
我正在使用 STM32F746ZG 并使用五个 UARTs。 All UARTs 工作正常。
有人可以告诉我在 USART 初始化后更改波特率的程序吗?我正在使用USART6 并使用9600 波特率进行初始化。启动后,通过USART 没有任何通信。我想从9600 to 57600 or 115200 更改波特率。对于这种变化,我调用了HAL_UART_DeInit() 和MX_USART6_UART_Init_57600(),但它不起作用。
如果我没有改变波特率,它工作正常。但是如果我改变波特率,我无法通过USART.接收数据
如果有人知道解决方案,请告诉我。
以下是我的代码。
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_UART7_Init();
MX_UART8_Init();
MX_USART2_UART_Init();
MX_USART3_UART_Init();
MX_USART6_UART_Init();
}
void MX_USART6_UART_Init(void)
{
huart6.Instance = USART6;
huart6.Init.BaudRate = 9600;
huart6.Init.WordLength = UART_WORDLENGTH_8B;
huart6.Init.StopBits = UART_STOPBITS_1;
huart6.Init.Parity = UART_PARITY_NONE;
huart6.Init.Mode = UART_MODE_TX_RX;
huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart6.Init.OverSampling = UART_OVERSAMPLING_16;
huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart6) != HAL_OK)
{
Error_Handler();
}
}
void MX_USART6_UART_Init_57600(void)
{
huart6.Instance = USART6;
huart6.Init.BaudRate = 57600; // change from 9600 to 57600
huart6.Init.WordLength = UART_WORDLENGTH_8B;
huart6.Init.StopBits = UART_STOPBITS_1;
huart6.Init.Parity = UART_PARITY_NONE;
huart6.Init.Mode = UART_MODE_TX_RX;
huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart6.Init.OverSampling = UART_OVERSAMPLING_16;
huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart6) != HAL_OK)
{
Error_Handler();
}
}
int Change_UART(void)
{
HAL_UART_DeInit(&huart6);
MX_USART6_UART_Init_57600();
}
我打电话给Change_UART(),但它不起作用。
【问题讨论】:
-
直接用57600波特初始化会怎样? (没有先用 9600 波特初始化它)它工作吗?
-
嗨。我解决了这个问题。问题是我没有再次调用 HAL_UART_Receive_IT() 函数。如果我在更改参数后再次调用此函数。它工作正常。所以我可以随时更改波特率、停止位、奇偶校验位。以下是最终解决方案。 int Change_UART(void) { HAL_UART_DeInit(&huart6); MX_USART6_UART_Init_57600(); HAL_UART_Receive_IT(&huart6, (uint8_t*)uart_rx_data_6, 1);上层函数是简单的代码。我为五个 UART 编写了一些复杂的代码来更改波特率、奇偶校验位、停止位等等。谢谢你。再见~
-
@Hans 你可以回答你自己的问题。它将作为已回答的问题提供,以供其他开发人员将来参考。
标签: stm32 stm32f4discovery stm32f4 stm32f7