关闭 ho-ho-ho 打开了这个issue 2022 年 6 月 14 日 · 1条评论 关闭 STM32F407VGT6 上串口的波特率生成错误#77 ho-ho-ho 打开了这个issue 2022 年 6 月 14 日 · 1条评论 评论 哈哈哈 评论了 2022 年 6 月 14 日 • 编辑 我正在使用板载 STM32F407VGT6 控制器的 STM32F4 Discovery,当我尝试连接 USART3 上的设备(PD8/9,由 SERIAL_MOD = 3 选择)时,我只收到损坏的数据。所以在深入挖掘之后我注意到 STM32F4xx/Src/serial.c 第 216 至 229 行 c5b8e6a static bool serialSetBaudRate ( uint32_t波特率) { #如果SERIAL_MOD == 2 USART-> CR1 = USART_CR1_RE|USART_CR1_TE; USART-> BRR = UART_BRR_SAMPLING16 ( HAL_RCC_GetPCLK1Freq (), baud_rate); USART-> CR1 |= (USART_CR1_UE|USART_CR1_RXNEIE); #否则 USART-> CR1 = USART_CR1_RE|USART_CR1_TE; USART-> BRR = UART_BRR_SAMPLING16 ( HAL_RCC_GetPCLK2Freq (), baud_rate); USART-> CR1 |= (USART_CR1_UE|USART_CR1_RXNEIE); #结尾 返回 真; } 使用了错误的时钟域。更改为正确的后,我得到了正确的数据:) 来自 STM32F405/415、STM32F407/417、STM32F427/437 和 STM32F429/439 的 RM: 只有 USART1 和 USART6 使用 PCLK2 提供时钟。其他 USART 使用 PCLK1 计时 到目前为止,我的解决方案是一个很大的 #if 混乱,但我不确定这是否是目前最好的解决方案: static bool serialSetBaudRate (uint32_t baud_rate) { #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F429xx) || defined(STM32F437xx) || defined(STM32F439xx) #if SERIAL_MOD == 3 USART->CR1 = USART_CR1_RE|USART_CR1_TE; USART->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK1Freq(), baud_rate); USART->CR1 |= (USART_CR1_UE|USART_CR1_RXNEIE); #else USART->CR1 = USART_CR1_RE|USART_CR1_TE; USART->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK2Freq(), baud_rate); USART->CR1 |= (USART_CR1_UE|USART_CR1_RXNEIE); #endif #else #if SERIAL_MOD == 2 USART->CR1 = USART_CR1_RE|USART_CR1_TE; USART->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK1Freq(), baud_rate); USART->CR1 |= (USART_CR1_UE|USART_CR1_RXNEIE); #else USART->CR1 = USART_CR1_RE|USART_CR1_TE; USART->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK2Freq(), baud_rate); USART->CR1 |= (USART_CR1_UE|USART_CR1_RXNEIE); #endif #endif return true; } terjeio 添加了引用此问题的提交 2022 年 6 月 16 日 Fix for issue #77 - serial port clock selection. 9b30c38 作者 哈哈哈 评论了 2022 年 8 月 24 日 奇迹般有效 :) ho-ho-ho已完成 关闭 2022 年 8 月 24 日 喜欢 (0) 电脑接口 #76 哎呀,在STM32F401RCT6上,有些参数不能保存,有些参数可以保存,有些参数掉电后不保存 #78 v1.3.8-EDGE 重启后键盘快捷键消失 #427 关闭 无法在 gsender 1.2.0 中打开 .gcode 文件 #367 RaspberryPi 运行 gsender 时出现问题 #89 向 fluidnc 发送 $$ 会导致 gsender 崩溃 #473 v1.3.8-EDGE 重启后键盘快捷键消失 #427 关闭无法在 gsender 1.2.0 中打开 .gcode 文件 #367RaspberryPi 运行 gsender 时出现问题 #89向 fluidnc 发送 $$ 会导致 gsender 崩溃 #473功能请求:抑制发送到机器的 gcode 中的 gcode 注释。 #444 关闭通过网络连接进行连接 #171操纵杆运动的剩余问题 #204 关闭新版本认为我的机器一直处于锁定状态 #474 关闭
我正在使用板载 STM32F407VGT6 控制器的 STM32F4 Discovery,当我尝试连接 USART3 上的设备(PD8/9,由 SERIAL_MOD = 3 选择)时,我只收到损坏的数据。所以在深入挖掘之后我注意到
STM32F4xx/Src/serial.c
第 216 至 229 行 c5b8e6a
使用了错误的时钟域。更改为正确的后,我得到了正确的数据:)
来自 STM32F405/415、STM32F407/417、STM32F427/437 和 STM32F429/439 的 RM:
到目前为止,我的解决方案是一个很大的 #if 混乱,但我不确定这是否是目前最好的解决方案: