在STM32板上运行后如何更改UART波特率?

Han*_*ans 6 stm32 stm32f4discovery stm32f4 stm32f7

我正在使用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();

}
Run Code Online (Sandbox Code Playgroud)

我打过电话,Change_UART()但没有用。

P__*_*J__ 6

您的问题应该是:如何使用膨胀软件 HAL 更改 bautrate?

我不知道。

但它可以在3行简单代码中存档。

USART6 -> CR1 &= ~(USART_CR1_UE);
USART6 -> BRR = NEWVALUE;
USART6 -> CR1 |= USART_CR1_UE;
Run Code Online (Sandbox Code Playgroud)