stm32f4 uart波特率设置?

时间:2013-03-26 16:45:29

标签: uart baud-rate stm32f4discovery

现在我有一个stm32f4-discovery。我为uart创建了一个max232来连接stm32f4。我使用usb-rs232连接max232。我希望我可以通过uart与stm32f4和PC进行通信。我在Linux中打开putty。但是关于设置uart波特率我有一个很大的问题。如果我设置相同的波特率,则无法接收正确的消息。我用示波器观察。最后,我设置了7680(stm32f4)和3200(putty)。然后我就能得到正确的信息。但我不知道为什么它适用于不同的波特率。谁能告诉我为什么?这是我的代码,thx https://gitcafe.com/ctc8631/stm32f4-test-uart

4 个答案:

答案 0 :(得分:3)

您可能需要检查时钟设置。发现板具有8MHz晶振,例如标准外设库中的相关配置文件(Libraries / CMSIS / Device / ST / STM32F4xx / Source / Templates / system_stm32f4xx.c)似乎是为25Mhz晶体设置的。它有这些定义

#define PLL_M      25
#define PLL_N      336
#define PLL_P      2
#define PLL_Q      7

从25MHz生成168Mhz而发现板的工作以太网示例在网络上发现

#define PLL_M      8
#define PLL_N      288
#define PLL_P      2
#define PLL_Q      6

从8MHz获得144Mhz。

编辑:事实证明这样做是不够的,因为stm32f4xx.h定义了" HSE_VALUE"除非在包含文件时已经定义,否则为25000000(25MHz)。因此,我看到的正确工作示例未定义,并在stm32f4xx_conf.h中将其重新定义为8000000(8MHz)。但我想正确的做法是在编译器命令行上定义它(例如,如果你使用IDE,在某些属性框中)。至少在IAR EWARM中运行良好。

答案 1 :(得分:1)

在文件stm32f4xx.h中,您需要修复

HSE_VALUE from 25000000 to 8000000

然后在文件system_stm32f4xx.c中 设置如下:

/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      8
#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7

答案 2 :(得分:0)

可能你在腻子上使用自动波特率。取消激活自动波特率,然后重试。如果仍然有效,apb1 / apb2-bus频率可能是错误的。您可以通过stm32f4xx_rcc.c

编辑总线频率

答案 3 :(得分:0)

我有完全相同的问题。我在项目中使用了各种库和包含文件。其中大多数比ST提供的原件更新。这是我“升级”它们的动机,但我这是一个很大的错误。

我的解决方案/解决方法是:

使用TRUEStudio。制作新的嵌入式C应用程序。正确设置向导(这是明确的,但这是一个关于它的视频:http://www.youtube.com/watch?v=mT5bAgpW3jU)。它将生成所有必要的文件并设置好一切(项目结构,调试接口等)。添加您自己的源并修改必要的源,并且USARTx将运行所需的波特率。

我想问题是外围时钟速度设置错误,这就是操作速度不匹配的原因。我只是觉得我找不到问题的根源,但是如果你使用不同的IDE,我建议将特定于板的库更改回原来的。