stm32修改外部晶振频率的方法

发布者:SereneMeadow最新更新时间:2025-01-20 来源: jianshu关键字:stm32  外部晶振  频率 手机看文章 扫描二维码
随时随地手机看文章

背景:

身为一个嵌入式程序员,经常要和硬件打交道,遇到不靠谱的硬件工程师,那真的是苦不堪言啊,这不,又遇到一个原理图画8M晶振,焊接12M晶振的坑等我跳,我tn的真的义无反顾的跳进去两天,无法自拔


正题:

stm32f103官方默认8M外部晶振,经过分频倍频后达到72M(根据型号不同也可能是48M等)主频,如果外部晶振换成12M晶振,则需要修改底层文件,下面记录修改方法


环境:

硬件平台:stm32f103vct6(flash 256k,对应HD)

编译环境:iar 8.32.8

系统环境:win10 64bit


修改方法:

1、找到文件 stm32f10x.h ,找到如下代码段:

 将8000000改为12000000即可


2、找到文件system_stm32f10x.c ,找到函数SetSysClockTo72,如下代码段:


将RCC_CFGR_PLLMULL9改为RCC_CFGR_PLLMULL6,因为12*6=72M


总结:

修改以上两个地方后,重新编译烧录,时钟就正常了


PS:

12M晶振可以直接使用上述方法,还需注意flash容量,本文记录的是HD设备的


关键字:stm32  外部晶振  频率 引用地址:stm32修改外部晶振频率的方法

上一篇:【STM32】EEPROM读写浮点数、负整数
下一篇:STM32一文通(9) DMA

推荐阅读最新更新时间:2026-03-22 03:46

STM32使用内部晶振外部晶振
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法: 2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。 2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面 首先要明确的是STM32没有内部晶振,HSI是内部RC振荡器。 HSI内部8MHz的RC振荡器的误差在1%左右 内部RC振荡器的精度通常比用HS
[单片机]
STM32不同外部晶振时工程的配置问题
遇到的问题: 同样的串口配置代码在一种407开发板上能正常输出,但是换到另一种407开发板上后就出现乱码,检查串口输出波形后发现,电平转换芯片没有问题,但是波特率却有问题。 问题原因: 经过故障排查发现出现上述问题的原因是两种STM32F407使用的外部晶振的频率不一样,前者使用的是25MHZ的晶振,而后者却是使用的8MHZ的晶振,如果代码未经更改而直接用在后者身上,就会出现上述串口乱码的情况,而且后者的每bite位的周期就是前者的三倍左右。 解决办法: 方法一: 因为 STM32F407的库文件中默认晶振值为25MHz,若外接晶振8MHz。所以: 1.首先需要修改 Option for target
[单片机]
STM32系统时钟设置,采用外部有源晶振相关配置问题
调试STM32系统时钟设置时遇到一个问题:TIM2定时1Ms,TIM2中断服务函数time++,time=100时LED状态改变。程序运行后发现LED不是按照0.1S的时间闪烁,闪烁的很慢。 查找程序发现在系统时钟初始化时,RCC_HSEConfig(RCC_HSE_Bypass); 语句配置不对,此语句解释为HSE晶振被外部时钟旁路。指将芯片内部的用于外部晶体起振和功率驱动等的部分电路和XTAL_OUT引脚断开,这时使用的外部时钟是有源时钟或者其他STM32提供的CCO输出等时钟信号,直接单线从XTAL_IN输入,这样即使外部有晶体也震荡不起来了。 因为之前用的是有源晶振,接法如下图1:HSE配置如下:RCC_HSEConfig
[单片机]
NRF51822之使用外部32Mhz晶振
硬件平台为微雪BLE400的(将原来的16mhz晶振改为32mhz。两个旁电容改为22pf) 以nRF51_SDK_10.0.0_dc26b5eexamplesble_peripheralble_app_uart项目为例 在main.c中进行修改 #if defined( USB_SYSTEM_CLOCK_32MHZ) #define DEVICE_NAME Nordic_UART_32mhz /** Name of device. Will be included in the advertising data. */ #else #define DEVICE_NAM
[单片机]
NRF51822之使用<font color='red'>外部</font>32Mhz<font color='red'>晶振</font>
STM8S之内外部16M晶振
简介 本文介绍STM8S系列如何分别实现内外部的16M晶振的使用。 实验平台 编译软件:IAR for STM8 1.42.2 硬件平台:stm8s003f3p6开发板 仿真器:ST-LINK 库函数版本:STM8Sx_AN3298_FW_V4.0.0 基础知识 1、STM8默认使用多少时钟频率? 答:默认使用的是内部16M晶振,并且是8分频,也就是2M的时钟频率。 2、内外部16M晶振有什么区别? 答:stm8内部已有16M晶振,但无法精确定时,如控制步进电机这类需要精确时间的项目,需要使用外部16M晶振。 如果是直流电机这类不需要精确时间的项目,只使用内部16M晶振即可。 六、内部16M晶振的使用步骤 1、初
[单片机]
stm32f105使用12M外部晶振
cl:互联型产品,stm32f105/107系列 vl:超值型产品,stm32f100系列 xl:超高密度产品,stm32f101/103系列 ld:低密度产品,FLASH小于64K md:中等密度产品,FLASH=64 or 128 hd:高密度产品,FLASH大于128 STM32F105和107是互联型产品。在system_stm32f10x.c中他们的晶振默认是25M的。 为什么是25M呢?我猜可能是因为网络PHY的关系,以太网需要100M的时钟频率。 使用25M的晶振方便网络时钟的生成。 25M晶振换12M晶振需要更改库文件的两个地方 stm32f10x.h #if !defined HSE_VALUE #
[单片机]
STM8S207使用外部24M晶振不起振的解决办法
具体表现: 1、使用 20M 的外部晶振,程序也能正常工作。 2、使用 24M 的外部晶振,就不能工作,经示波器测量,晶振没有起振。 3、为了去除晶振的原因,就换了一个 24M 的晶振,结果还是不行,可见应该不是晶振的问题。 4、去群里问,一个叫“碎片”的网友说,这是因为没有添加 FLASH 等待周期造成的。外部晶振大于16M 就得添加 FLASH 等待周期,虽然 20M 也能运行,但长时间运行会不稳定。 5、我按他的方法添加了 FLASH 等待周期,果然程序正常运行了,用示波器的 x10 档测量晶振,能看到很完美的正弦波。但开始用 x1 档,表笔一接触晶振引脚,程序就立即停止,考虑到是示波器的影响,就换成了 x10 档,果然能正
[单片机]
STM8S外部晶振使能
C语言: Codee#11718 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台: STM8S103F2P6 FM 接收实验核心板 + 硬件 : STM8S103F2P6 + 开发平台: IAR For STM8 1.10 + 仿真器 : ST-Link + 日期 : 2010-6-22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ #include stm8s.h /****
[单片机]
STM8S<font color='red'>外部</font><font color='red'>晶振</font>使能
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved