求助关于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
1楼-- · 2019-07-20 04:36
 精彩回答 2  元偷偷看……
rong1990
2楼-- · 2019-07-20 06:11
#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx)            
    /* PCLK2 = HCLK / 2*/
    RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
               
    /* PCLK1 = HCLK / 4*/
    RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
#endif /* STM32F40_41xxx || STM32F427_437x || STM32F429_439xx */


是不是这里少了东西呀?
rong1990
3楼-- · 2019-07-20 06:50
本帖最后由 rong1990 于 2017-12-12 19:00 编辑

今天试了USART3  还是一样的情况  uart_init(115200)   但是串口助手调到57600才正常。  有没有可能是硬件的问题呢?  因为 我把原子哥的教程    《实验4 串口实验》  作为模板  不修改任何东西  波特率也是一半呀?
正点原子
4楼-- · 2019-07-20 08:47
 精彩回答 2  元偷偷看……
rong1990
5楼-- · 2019-07-20 08:52
 精彩回答 2  元偷偷看……
rong1990
6楼-- · 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修改后不影响波特率

一周热门 更多>