STM32串口发送的数据与串口助手显示的数据不一致(巩固STM32时钟树)

问题描述:

STM32发送的数据与串口助手上面显示的数据不一致
硬件平台:STM32F4的主控板
参数配置:串口波特率115200,无校验,一位停止位
STM32初始化的波特率是115200(然而并不是115200)

问题分析:

经过调试发现:
板子上的晶振不是常见的8M晶振,而是10M晶振,这就导致经过初始化之后的主时钟并不是168M,然后在经过倍频、分频后,导致USART外设的时钟并不是自己期望的时钟。最终导致的结果就是,我以为我初始化的时115200的波特率,其实并不是,进而导致发送的数据与显示的数据不一致

解决方案:

1> 在“stm32F4xx.h”中找到
在这里插入图片描述
将8000000改为10000000,高速外部时钟源改为10M

2>在system_stm32f4xx.c中找到PLL Parameters配置这一部分,
设置PLL_M、PLL_Q、PLL_N、PLL_P的值使外设的时钟符合自己预期的时钟
其中PLL_M、PLL_Q、PLL_N、PLL_P的作用如图中所示
STM32串口发送的数据与串口助手显示的数据不一致(巩固STM32时钟树)_第1张图片

问题扩展:

经过上面的分频与倍频得到的是系统主时钟源168M,后面的各级时钟的分频系数在哪里配置呢?

在system_stm32f4xx.c中找到
STM32串口发送的数据与串口助手显示的数据不一致(巩固STM32时钟树)_第2张图片
这里的HCLK、PCLK2、PCLK1对应图中:
STM32串口发送的数据与串口助手显示的数据不一致(巩固STM32时钟树)_第3张图片

总结:

基础知识不够牢固

关注微信公众号一起学习探讨

你可能感兴趣的:(随笔,STM32)