求助关于STM32F407 串口波特率只有设定值一半的问题

2019-07-20 02:55发布

本帖最后由 rong1990 于 2017-12-11 19:36 编辑

大家好,从开试接触stm32到现在一个月左右,这个串口波特率问题一直没有解决,实在想不通哪里出现问题

我的串口波特率初始化112500,串口助手乱码。然后串口助手上一个一个波特率试,发现选取57600时正常
我查过,以下两种情况都没问题呀(或者有我没发现?)
1.    #define HSE_VALUE    ((uint32_t)8000000)   这里没问题呀  我是8MHz的晶振
2.    PLL_M=8   PLL_N=336   PLL_P=2   这里也没问题

我试着修改PLL_M,PLL_N的值,波特率没有变化,还是初始化115200时,助手设定57600正常接收
当我修改HSE_VALUE=4000000  时  初始化115200时,助手设定115200正常接收


还有我的工程是用原子教程中的工程源码修改的  ,但并没有修改任何与时钟有关的地方.

这个没解决脑子里总是惦记着不踏实呀   
还麻烦帮忙分析一下,不胜感谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
rong1990
2019-07-20 13:07
本帖最后由 rong1990 于 2017-12-13 16:17 编辑
正点原子 发表于 2017-12-13 00:48
很明显主频配置的问题,我论坛发过几个帖子,自己找找吧。

核对了一遍几个关键地方没有发现问题。 包括使用其他人没问题的模板  不修改任何东西,下载验证,还是一半
修改PLL_M与PLL_N值不影响波特率  修改HSE_VALUE 会影响。  怀疑系统是直接使用的 HSE  而非  PLL。
但是修改以下代码也没有改变波特率。
#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx)      
    /* PCLK2 = HCLK / 2*/
    RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;     → //将RCC_CFGR_PPRE2_DIV2修改后不影响波特率

    /* PCLK1 = HCLK / 4*/
    RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;     → //将RCC_CFGR_PPRE1_DIV4修改后不影响波特率

一周热门 更多>