历史上的今天
今天是:2025年08月21日(星期四)
2018年08月21日 | STM32使用非8M晶振时如何修改代码
2018-08-21 来源:eefocus
目前能找到的大部分代码都是默认8M外部晶振的,若使用的晶振不是8M则需要作一些修改。例如这次我使用的外部晶振是12M的,作如下修改。
1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)处的值(改为12MHz)。此处修改影响Debug时观察到的时钟数值。

2.在system_stm32f10x.c开头的注释里有:
* 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on
* the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file.
* When HSE is used as system clock source, directly or through PLL, and you
* are using different crystal you have to adapt the HSE value to your own
* configuration.
根据描述,将stm32f10x.h中大约在0121行找到,修改掉。
#if !defined HSE_VALUE
#ifdef STM32F10X_CL
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else
#define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */
不过很奇怪的是,即使修改了此处的值,PLL的时钟还是不正确(程序依旧讲PLL按9倍频配置)。此处有待进一步探究(目前暂时只知道编译的代码没有用到HSE_VALUE)。
3.顺着代码寻找原因,最后发现真正起作用的部分在system_stm32f10x.c里的SetSysClockTo72(void)函数(0993行,这里假设我们希望MCU工作在72MHZ)。
在1058行有这样一段代码:
#else
/* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
注释部分是函数自带的,真正起作用的部分在这里,因此把RCC_CFGR_PLLMULL9改为RCC_CFGR_PLLMULL6。
史海拾趣
|
2.4G无线智能灯控方案 一, 方案概述 本方案解决家庭、小区智能灯光控制。针对日渐繁多的室内灯光种类,以及开关连线复杂的状况,采用无线控制灯光,实现灯光情景模式设定以及开关位置灵活摆放。ZG1100采用串口与上位 ...… 查看全部问答> |
|
我现在在LPC2478开发板下外部FLASH跑LCD程序,仿真放在中断处,发现一个奇怪的问题。 如果进了中断,LCD_INISTAT的bit[1]一直是1; 如果我在内部flash跑,LCD_INTSTAT的bit[1]就不为1,为0。 内部fl ...… 查看全部问答> |
|
想做个基于蓝牙应用的嵌入式项目,想法是 开发板+单独蓝牙模块,操作系统用linux,因为对硬件不熟悉,不知道选择那个平台的什么型号的开发板,恳请赐教,谢谢~~~… 查看全部问答> |
|
LM3s8962体验之二----------- Keil µVision 4 目标工具选项详解 一、目标工具选项(Target Options …) µVision可以设置目标硬件的选项。通过下图1中的工具栏2区域按钮或1区域菜单项Project -> Options for Target打开Options for Target对话框。 & ...… 查看全部问答> |
|
iPod + AM/FM + 闹钟 +显示(LCD && LED) 方案 iPod + AM/FM + 闹钟 +显示(LCD && LED) 方案 a: MCU特性 单芯片,内置4X24 LCD驱动, RTC(实时时钟),LED驱动,,低功耗,电池供电维持时间和LCD时间显示. 采用 dice 工艺, 成本更低. 无需外加 RTC 如1381等, LCD驱 ...… 查看全部问答> |
|
小弟新手,在画PCB的时候碰到一些问题,我们设定板子边框的时候本来应该用机械层的, 但是很多时候我们用禁止布线层也可以,原因是因为PCB厂家知道我们的意思。 假设我们想在板子中间开一 ...… 查看全部问答> |




