现在我有了一个stm32f4-discovery。我为uart创建了一个连接stm32f4的max232。并使用USBRS232串口连接max232。我希望我能通过串口与PC机进行stm32f4通信。我在Linux中打开putty。但是我有一个关于设置uart波特率的大问题。如果我设置相同的波特率,它不能接收正确的信息。我用示波器观察。最后,我设置了7680(stm32f4)和3200(putty)。这样我就能得到正确的信息。但我不知道为什么它能在不同的波特率下工作。有人能告诉我为什么吗?这是我的代码,thx https://gitcafe.com/ctc8631/stm32f4-test-uart
发布于 2014-02-01 00:34:17
您可能需要检查您的时钟设置。发现板有一个8 8MHz的晶体,而例如,标准外设库中的相关配置文件(Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c)似乎是为25 8MHz的晶体设置的。它有这些定义
#define PLL_M 25
#define PLL_N 336
#define PLL_P 2
#define PLL_Q 7要从25 the产生168 the,而在网上发现的发现板的一个工作以太网示例使用
#define PLL_M 8
#define PLL_N 288
#define PLL_P 2
#define PLL_Q 6从8 8MHz得到144 8MHz。
编辑:事实证明,这样做是不够的,因为stm32f4xx.h将"HSE_VALUE“定义为25000000 (25 the ),除非在包含文件时已经定义了它。因此,我查看的正常工作的示例未定义,并在stm32f4xx_conf.h中将其重新定义为8000000 (8 8MHz)。但我想正确的做法是在编译器命令行中定义它(如果使用IDE,则在某些属性框中定义)。至少这在IAR EWARM中运行良好。
发布于 2014-09-19 17:22:46
在文件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发布于 2013-08-04 00:38:30
也许你在putty上使用了自动波特率。停用自动波特率,然后重试。如果仍然有效,则apb1/apb2-总线频率可能错误。您可以通过stm32f4xx_rcc.c编辑总线频率
https://stackoverflow.com/questions/15642696
复制相似问题