STM32不同外部晶振时工程的配置问题

2023-11-01 21:20

本文主要是介绍STM32不同外部晶振时工程的配置问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

遇到的问题:

同样的串口配置代码在一种407开发板上能正常输出,但是换到另一种407开发板上后就出现乱码,检查串口输出波形后发现,电平转换芯片没有问题,但是波特率却有问题。

 

问题原因:

   经过故障排查发现出现上述问题的原因是两种STM32F407使用的外部晶振的频率不一样,前者使用的是25MHZ的晶振,而后者却是使用的8MHZ的晶振,如果代码未经更改而直接用在后者身上,就会出现上述串口乱码的情况,而且后者的每bite位的周期就是前者的三倍左右。

 

解决办法:

    方法一:

因为 STM32F407的库文件中默认晶振值为25MHz,若外接晶振8MHz。所以:

1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)处的值(改为8MHz)。此处修改影响Debug时观察到的时钟数值。


2.stm32f4xx.h默认25M外部晶振(HSE):

#if !defined  (HSE_VALUE)

  #defineHSE_VALUE    ((uint32_t)25000000) /*!<Value of the External oscillator in Hz25000000 */

#endif /* HSE_VALUE*/

如果改为8M或其他值,需要修改此宏定义。 

为了尽量保持官方固件库的完整性,可在stm32f4xx_conf.h中添加代码

#if defined (HSE_VALUE)

/* Redefine the HSE value;it's equal to 8 MHz on the STM32F4-DISCOVERY Kit*/

#undef HSE_VALUE

#define HSE_VALUE   ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

#endif /* HSE_VALUE */


注:但PLL_M定义在system_stm32f4xx.c中的,此方法对其不可用,亲测。

 

3. 打开文件 "system_stm32f4xx.c" ,搜索”PLL_M",修改默认PLL_M的参数:

/*************************PLL Parameters *************************************/

/* PLL_VCO = (HSE_VALUEor HSI_VALUE / PLL_M) * PLL_N */

#define PLL_M      25

#define PLL_N      336

 

/* SYSCLK = PLL_VCO /PLL_P */

#define PLL_P      2

 

/* USB OTG FS, SDIO andRNG Clock =  PLL_VCO / PLLQ */

#define PLL_Q      7

 

/******************************************************************************/

同样改为8M的话,PLL_M也应该改为8.(假设最后的时钟值不变)。 
PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N = 
25/25*336 = 336M (8/8*336=336M) 
SYSCLK = PLL_VCO / PLL_P = 
336 / 2 = 168M 默认是168M时钟。    

 

 

方法二:(目前找到的最好解决方法,若有更好的方法,欢迎前来交流

1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)处的值(改为12MHz)。此处修改影响Debug时观察到的时钟数值。


2. 在"Option for target 'xxx'"中的C/C++-> Define处添加

HSE_VALUE=8000000, 宏


在这里修改HSE的值,然后依然要修改"system_stm32f4xx.c"文件中的PLL_M,否则,在115200以上波特率下,首字节字符是乱码。亲测。(修改stm32f4xx.h里面的值不是不可以,但是感觉修改里面的东西不是很好,毕竟都是库来的,以后调用的时候也不用想着这个问题。但是,现在尚未找到更好的解决办法

 

3. 打开文件 "system_stm32f4xx.c" ,搜索”PLL_M",修改默认PLL_M的参数:

/*************************PLL Parameters *************************************/

/* PLL_VCO = (HSE_VALUEor HSI_VALUE / PLL_M) * PLL_N */

#define PLL_M      25

#define PLL_N      336

 

/* SYSCLK = PLL_VCO /PLL_P */

#define PLL_P      2

 

/* USB OTG FS, SDIO andRNG Clock =  PLL_VCO / PLLQ */

#define PLL_Q      7

 

/******************************************************************************/

这篇关于STM32不同外部晶振时工程的配置问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/325837

相关文章

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.