STM32F407系统时钟配置不准确导致串口发送数据乱码、定时器定时不准问题
前言
在用原子的F407探索者开发板时,由于是用的野火的工程模板,导致了一些串口发送乱码、定时器定时不准的问题。如果你也有类似的问题,这个或许可以帮到你。
原因
SYSCLK 系统时钟来源有三个方面:HSI,HSE 和 PLL。在我们实际应用中,因为对时钟速度要求都比较高我们才会选用 STM32F4 这种级别的处理器,所以一般情况下,都是采用 PLL 作为 SYSCLK时钟源,而系统时钟配置不正确就是PPL这里出了问题。
先看一下主PPL在整个时钟树中间的位置。
高速系统时钟一般由PPL_P提供,一般配置为最高168M。
根据公式:
PLL = HSE * N / (M * P) = 8MHz * 336 / (8 * 2) = 168MHz
参数 | 说明 |
---|---|
HSE | 晶振大小(MHz) |
N | 倍频器倍频系数 |
P | 分频器分频系数 |
M | 分频器分频系数 |
系数可以随意选择,只要是让公式最后的结果为168应该都可以,但是在标准库中一般N、PD固定了的。HSE会随着板子上不同的晶振而修改,还有M也可以用来修改系统时钟频率。不过不建议随意修改,因为我菜,菜,菜,留下了没有技术含量的眼泪。
接下来只要在库文件中修改HSE和PPL_M就可以了。
修改
之所以会出现这个问题,是由于系统时钟配置不正确。
1. 要将高亮的地方改为8000000
(在stm32f4xx.h里面)
2. 将高亮的地方改为8
(在system_stm32f4xx.c里面)
经过这两个修改就可以正常使用了。