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

相关文章

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle