STM32
直播中

摩托罗拉

9年用户 986经验值
私信 关注
[问答]

STM32F412串口波特率最大调到3.1M就上不去了,怎么解决?

之前,用STM32F407的芯片做了串口usart6通讯,波特率调整到3.9M可以正常通讯,发送的数据也都对。现在换STM32F412后发现最大频率的串口波特率只能到3.1M。再上去发出的数据频率就降低到几十KHZ。
       后来调试,发现在串口初始化函数里usrat6用到这条if语句,PCLK2的时钟只有50M导致最后USARTx->BRR里的值不对。对照STM32f407,发现我是在主频168M的条件下,导致这里PCLK2的时钟有84M算的结果可以满足3.9M的波特率。
问题一、我试着设置过RCC_PCLK2Config(RCC_HCLK_Div1);但是不起作用,也曾修改过apbclock = RCC_ClocksStatus.HCLK_Frequency;但是结果还是不对,我想问问格纹技术员大大,这个怎么处理啊,手册上说过可以达到12.5M 的速度呢。怎么可以实现呢?


回帖(1)

微风挽雨

2024-4-2 16:58:48
问题一:如何解决波特率无法调整到3.9M的问题?
尝试修改APB2(PCLK2)的时钟频率。根据你的描述,之前使用的芯片是STM32F407,而现在换成了STM32F412。在初始化函数中的if语句是用来判断APB2的时钟频率的,而PCLK2的时钟频率会影响串口的波特率设置。

在STM32F407芯片中,主频为168MHz,使用PLL时钟倍频为2的时候,APB2的时钟频率为84MHz。在这个条件下,可以成功设置串口波特率为3.9M。

而在STM32F412芯片中,主频看来是可能为100MHz,使用PLL时钟倍频为2的时候,APB2的时钟频率为50MHz。在这样的情况下,无法成功设置串口波特率为3.9M。

解决办法之一是修改APB2时钟的设置,使得PCLK2的时钟频率能够达到3.9M所需的频率。具体可以尝试以下方法:

1. 修改系统时钟和PLL配置,使得主频为168MHz。
2. 使用PLL时钟倍频为4的时候,APB2的时钟频率为84MHz,这样就可以成功设置串口波特率为3.9M。

问题二:RCC_PCLK2Config(RCC_HCLK_Div1)不起作用的解决办法
你提到尝试使用RCC_PCLK2Config(RCC_HCLK_Div1)来设置PCLK2的时钟频率,但是没有起作用。这可能是因为不同的芯片系列之间存在一些差异,导致该函数在STM32F412系列中无法起作用。

如果这个函数无法起作用,可以尝试使用其他的方法来修改PCLK2的时钟频率,比如使用RCC_SetClockDivisor()函数来设置时钟分频系数。

总之,通过修改主频和PLL配置来增加APB2时钟频率,或者使用其他方法设置PCLK2的时钟分频系数,可以解决波特率无法调整到3.9M的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分