STM32使用非8M晶振时如何修改代码

发布者:不懂之人最新更新时间:2018-08-21 来源: eefocus关键字:STM32  非8M晶振  修改代码 手机看文章 扫描二维码
随时随地手机看文章

目前能找到的大部分代码都是默认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。


关键字:STM32  非8M晶振  修改代码 引用地址:STM32使用非8M晶振时如何修改代码

上一篇:STM32将12M晶振换8M晶振后Keil及程序的相关设置
下一篇:STM32不同外部晶振时工程的配置问题

推荐阅读最新更新时间:2024-03-16 16:11

STM32的NVIC和中断的总结
前言: 1.要想学习STM32中断,要先掌握STM32对优先级的定义; 2.有51单片机开发经验会比较容易理解中断优先级; 3.本篇博文基于STM32F103ZET6芯片和3.5.0标准库编写; 4.本篇博文从寄存器入手,最终实现编程的步骤;如有不足之处,还请前辈多多指教; 一 基础知识 1. cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断。(本博文只介绍60个外部可屏蔽中断) 2. stm32只有84个中断,包括16个内核中断和68个可屏蔽中断 3. stm32f103上只有60个可屏蔽中断,f107上才有68个中断 4. 先占优先级也就是抢占优先级,概念等同于51单片机中的中断。假设有两中断
[单片机]
<font color='red'>STM32</font>的NVIC和中断的总结
stm32--命名规则
STM32 F 103 V C T 6 xxx       1 2 3 4 5 6 7 8   第1部分:产品系列名,固定为STM32   第2部分:产品类型;F表示这是Flash产品,目前没有其它选项   第3部分:产品子系列;103表示增强型产品,101表示基本型产品 105表示集成一个全速USB 2.0 Host/Device/OTG接口和两个具有先进过滤功能的CAN2.0B控制器, 107表示在STM32F105系列基础增加一个10/100以太 网媒体访问控制器(MAC),互联型产品,   第4部分:管脚数目;   T=36脚; C=48脚; R=64脚;V=100脚; Z=144
[单片机]
如何利用STM32代码进行读保护功能
这个加载代码读保护功能的步骤可能对有些人来说还是比较麻烦的,毕竟产品多的时候,写入之后还要按一下写保护命令,对于产线操作员来说,可能一时疏忽忘记其中一个,就会造成代码的外泄,是不是应该还有更简单的办法一键写入呢,答案是肯定的! 具体做法,就是要在生成HEX文件之前,要多几个步骤 1.首先,加载: C:\Keil\ARM\Boards\Keil\MCBSTM32\Blinky文件夹中的一个STM32F10xOPT.s文件 2.修改下面两个值为1 3.生成HEX文件之前务必进行一下此配置 这样的话,就简单的一个HEX文件就会使你的产品流入市场之后,即便是被抄板成功,也不会是代码流出了 当然,必须保证自己公司的员工不
[单片机]
如何利用<font color='red'>STM32</font><font color='red'>代码</font>进行读保护功能
STM32微控制器的可靠串口通信技术研究
引言 STM32F107微控制器是意法半导体推出的高性能32位以CortexM3为内核的面向工业控制的处理器。该处理器内部通过一个多层的AHB总线构架相连,其内部集成了丰富的外设,如USART、SPI、ADC等等。另外,STM32F107处理器还提供多达80个通用I/O接口,如此丰富的资源使STM32系列微控制器能够很理想地用于工业控制。本文设计出一种基于STM32F107的可靠串口通信设计方案,可以完成STM32F107处理器和PC机以及其他串口之间的可靠通信 。 1 串口通信的实现 1.1 硬件设计 STM32F107处理器的通用同步异步通信单元(USART)提供 5个独立的异步串行接口,并且都能工作在中断和DMA模式
[单片机]
<font color='red'>STM32</font>微控制器的可靠串口通信技术研究
基于STM32使用超声波HC-SR04模块
写在前面注意的几点: 1、HC-SR04模块必须使用5V供电,不能是3.3V 2、若单是测距,无需使用中断 3、Echo和Trig两个引脚可以任意接可用的GPIO,和定时器无关 说一下超声波的工作原理 单片机给Trig引脚一个最少10us的高电平,然后拉低引脚,便启动了模块, 然后超声波就被发了出去,超声波遇到障碍物后返回被模块接收,Echo引脚会输出一段高电平,高电平的时间与距离成比例; 那么我们所需要做的就是出发Trig引脚,然后测出Echo持续高电平的时间 以下是GPIO的设置: void Ultrasonic_Config(void) { GPIO_InitTypeDef GPIO_InitS
[单片机]
基于<font color='red'>STM32</font>使用超声波HC-SR04模块
STM32裸机编程的基础知识(2)
在前一篇文章中我们已经学习到可以通过直接访问存储地址来读写外设寄存器,下面复习下将 GPIO A3 设为输出模式的代码: * (volatile uint32_t *) (0x40020000 + 0) &= ~(3 6); // CLear bit range 6-7 * (volatile uint32_t *) (0x40020000 + 0) |= 1 6; // Set bit range 6-7 to 1 这段代码有些诡秘,如果不加以注释,很难理解。我们可以把这段代码重写成更易读的形式,方法就是用一个包含 32 位域的结构体来表示整个外设。我们来看一下数据手册 8.4 节中描述的 GPIO 外设的寄存器
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved