在STM32板上运行后如何改变串口的波特率?

在STM32板上运行后如何改变串口的波特率?

社区首页 >问答首页 >在STM32板上运行后如何改变串口的波特率?问在STM32板上运行后如何改变串口的波特率?ENStack Overflow用户提问于 2019-07-31 12:44:02回答 4查看 5.7K关注 0票数 6我使用的是STM32F746ZG和five UARTs。All UARTs运行得很好。有人能告诉我在USART初始化后更改波特率的步骤吗?我使用USART6并使用9600波特率进行初始化。启动后,没有任何通过USART的通信。我想更改9600 to 57600 or 115200的波特率。为了进行这种更改,我调用了HAL_UART_DeInit()和MX_USART6_UART_Init_57600(),但它不起作用。如果我没有改变波特率,它工作得很好。但是如果我改变了波特率,我不能通过USART.接收数据,如果有人知道解决方案,请让我知道。

下面是我的代码。

代码语言:javascript复制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(),但它不起作用。

stm32stm32f4discoverystm32f4stm32f7关注问题分享EN回答 4推荐最新Stack Overflow用户发布于 2019-11-21 16:19:17

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

我不知道。

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

代码语言:javascript复制USART6 -> CR1 &= ~(USART_CR1_UE);

USART6 -> BRR = NEWVALUE;

USART6 -> CR1 |= USART_CR1_UE;收藏分享票数 6ENStack Overflow用户发布于 2020-07-14 19:51:25

要更改波特率,您不需要重置UART外设,只需停止任何活动的传输(轮询/IT/DMA)。我混合使用这两种方法:

代码语言:javascript复制huart.Instance->BRR = UART_BRR_SAMPLING8(HAL_RCC_GetPCLK2Freq(), new_baudrate);其中UART_BRR_SAMPLING8()是来自stm32f4xx_hal_uart.h的宏,HAL_RCC_GetPCLK2Freq()函数来自_hal_rcc.c。

这样,我不必手动计算BRR值,也不必执行整个初始化过程,这实际上会切换GPIO状态,从而在串行线上为位于其另一端的任何东西产生噪声。

收藏分享票数 2ENStack Overflow用户发布于 2020-03-15 06:09:39

最初我真的对P_J__的简单答案感到兴奋,但事实证明你不能简单地将所需的波特率放入BRR -它必须是过采样和时钟频率的函数。

我使用了大致相同的方法,但使用了"LL_USART_SetBaudRate“来填充寄存器

收藏分享票数 0EN查看全部 4 条回答页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持原文链接:https://stackoverflow.com/questions/57283327

复制相关文章

相关推荐

【8848钛金手机M5评测】拍照配置保持Android阵容顶配堆积
365bet赌场手机投注

【8848钛金手机M5评测】拍照配置保持Android阵容顶配堆积

📅 07-15 👁️ 647
在抖音开通小黄车需要啥手续?要收费吗?
百特365下载

在抖音开通小黄车需要啥手续?要收费吗?

📅 09-07 👁️ 9225
中国当代最伟大的10位学者,看看你都认识哪几位?
365bet赌场手机投注

中国当代最伟大的10位学者,看看你都认识哪几位?

📅 10-02 👁️ 2763
洛克王国怎么刷洛克钻
日博365投注

洛克王国怎么刷洛克钻

📅 09-12 👁️ 3451
毕业剧情介绍
日博365投注

毕业剧情介绍

📅 09-01 👁️ 4597
中国现代十大女作家盘点 中国现代女作家排行榜
解决FTP传输慢的问题(ftp传输慢为什么)
365bet赌场手机投注

解决FTP传输慢的问题(ftp传输慢为什么)

📅 07-11 👁️ 4670
42寸电视机长宽是多少厘米?客厅电视选购与家居搭配指南
王者荣耀隐匿和狩猎哪个好?
百特365下载

王者荣耀隐匿和狩猎哪个好?

📅 11-02 👁️ 9644