历史上的今天
返回首页

历史上的今天

今天是:2025年08月19日(星期二)

正在发生

2018年08月19日 | STM32L151系列标准库时钟晶振修改

2018-08-19 来源:eefocus

此文档主要介绍如何修改STM32L151系列的标准库的时钟晶振


1.背景介绍 

因为STM32的标准库函数中默认使用的外部8M的高速晶振,但是在实际的开发阶段,可以使用的不是8M的外部晶振。所以此时需要对标准库函数做出相应的修改,外部晶振才可以起振。本文档将使用12M的外部高速晶振为例,来大致的了解如何修改标准库函数,使其调用外部的12M高速晶振。


2.主要步骤 

第一步:需要了解时钟函数是在什么地方调用的,打开startup_stm32l1xx_md.s


Reset handler routine

Reset_Handler    PROC

                 EXPORT  Reset_Handler             [WEAK]

        IMPORT  __main

        IMPORT  SystemInit  

                 LDR     R0, =SystemInit   //***在stm32的其实代码中SystemInit为系统调用的时钟函数***

                 BLX     R0              

                 LDR     R0, =__main

                 BX      R0

                 ENDP


第二步:了解初始化函数具体在哪里调用外部高速晶振的,打开system_stm32l1xx.c的SystemInit函数


void SystemInit (void)

{

  /*!< Set MSION bit */

  RCC->CR |= (uint32_t)0x00000100;


  /*!< Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], MCOSEL[2:0] and MCOPRE[2:0] bits */

  RCC->CFGR &= (uint32_t)0x88FFC00C;


  /*!< Reset HSION, HSEON, CSSON and PLLON bits */

  RCC->CR &= (uint32_t)0xEEFEFFFE;


  /*!< Reset HSEBYP bit */

  RCC->CR &= (uint32_t)0xFFFBFFFF;


  /*!< Reset PLLSRC, PLLMUL[3:0] and PLLDIV[1:0] bits */

  RCC->CFGR &= (uint32_t)0xFF02FFFF;


  /*!< Disable all interrupts */

  RCC->CIR = 0x00000000;


#ifdef DATA_IN_ExtSRAM

  SystemInit_ExtMemCtl(); 

#endif /* DATA_IN_ExtSRAM */


  /* Configure the System clock frequency, AHB/APBx prescalers and Flash settings */

    SetSysClock(); //***此函数的作用初始化外部高速晶振,如果注释此函数,此系统会默认使用STM32内部8M的高速晶振***


#ifdef VECT_TAB_SRAM

  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */

#else

  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */

#endif

}


第三步 修改外部8M的高速晶振——->12M,打开 stm32l1xx.h


/**

 * @brief In the following line adjust the value of External High Speed oscillator (HSE)

   used in your application 


   Tip: To avoid modifying this file each time you need to use different HSE, you

        can define the HSE value in your toolchain compiler preprocessor.

  */

#if !defined  (HSE_VALUE)

//***此行代码是8M的外部高速晶振,所以注释掉此行代码***

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

//***将原来的8M外部高速晶振换为12M的外部高速晶振***

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

#endif


第四步 修改时钟的倍频与分频系数,打开system_stm32l1xx.c的SetSysClock函数


    /*  PLL configuration */       //***为PLL的配置***

#if 0

    /*default HSE 8M*/

    //因为STM32l151的最大时钟频率为32M,外部的采用的8M的高速晶振,所以经过2分频,8倍频。

    //8M / 2 * 8 == 32M

    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL |

                                        RCC_CFGR_PLLDIV));

    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMUL8 | RCC_CFGR_PLLDIV2);

#else   

    /*HSE 12M*/

    //因为实际情况使用的12M的外部高速晶振,所以采用3分频,8倍频。故为12M / 3 * 8 == 32M

    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL |

                                        RCC_CFGR_PLLDIV));

    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMUL8 | RCC_CFGR_PLLDIV3);

#endif


经过这四步之后,标准库函数已经改为了默认使用外部12M高速晶振工作。具体情况可以使用示波器进行验证,在此不多余介绍。


推荐阅读

史海拾趣

Allied Wire & Cable Inc公司的发展小趣事

为了保持市场竞争力,Allied公司始终注重技术升级和品质提升。公司投入大量资金引进先进的生产设备和技术,不断提高产品的技术含量和附加值。同时,公司还建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控,确保产品的品质和性能达到最高标准。

EUDYNA公司的发展小趣事

在光通信领域,EUDYNA凭借其10Gb/s速率的光调制集成DFB激光器模块,取得了重要突破。这款模块采用了先进的封装技术和内置光学隔离器,确保了信号的稳定性和可靠性。EUDYNA的这一创新,不仅提高了光通信的传输速度和效率,也为整个行业树立了新的标杆。

DEVCON公司的发展小趣事

随着电子行业的快速发展,对材料性能的要求也越来越高。DEVCON公司不断投入研发力量,通过技术创新,成功开发出了一系列具有高性能、高可靠性的新材料。其中,甲基丙烯甲酸甲酯、环氧类、改性硅烷密封胶等产品,因其优异的性能和广泛的应用前景,成为了电子行业的明星产品。这些技术突破不仅提升了DEVCON公司的竞争力,也为整个电子行业的发展做出了重要贡献。

Galaxy Semi-Conductor Co Ltd公司的发展小趣事

山西飞虹光电科技集团有限公司原以煤炭、洗煤和焦化等生产为主,但在响应山西省委、省政府转型跨越发展的号召下,公司于2010年向高科技产业基地转型。在临汾·甘亭新型工业园区投资16.5亿元建设了“山西陆合飞虹光电科技园”,专注于研发和生产化合物半导体外延片、芯片以及大功率半导体激光器等高科技产品。飞虹光电科技集团通过技术创新,在大功率激光外延片、芯片及LED红、蓝、紫光材料等方面填补了山西省的多项空白,并荣获多项国内外专利及科技奖项。

Amphenol Thermometrics公司的发展小趣事

飞虹半导体自2002年建厂之初,便意识到大功率半导体产品市场几乎被国外进口产品垄断。为了改变国内电子厂家在价格与交货期上的被动局面,飞虹半导体毅然踏上了大功率半导体国产化生产研发的道路。尽管面临重重困难,但飞虹半导体坚持不懈,逐步在LED驱动、工业开关电源、新能源电动车等多个领域取得突破。其功率器件产品因性能优越,逐渐获得市场认可,为国产半导体替代进口产品贡献了重要力量。

CHERRY公司的发展小趣事

90年代初,薄膜键盘凭借其低廉的价格和轻便的特性迅速占据了市场主导地位,机械键盘一度被边缘化。然而,Cherry并未放弃机械键盘业务,而是不断进行技术创新和产品升级。随着电竞行业的兴起和消费者对高品质输入设备的需求不断增加,机械键盘市场逐渐复苏。Cherry凭借其深厚的技术积累和品牌优势,成功抓住了这一市场机遇,实现了机械键盘业务的复兴。

问答坊 | AI 解惑

对PC更深的理解

感觉不错,有空看看吧…

查看全部问答>

vxworks屏幕输出

小弟新手 一般来说用printf都是串口输出,或者shell输出, 现在想在屏幕输出请问需要调用什么函数? 这个是不是要调用屏幕的输出函数?? 大家有自己屏幕输出函数吗?请给一个我参考下,谢谢 …

查看全部问答>

急! 做出奖励500RMB

急求 基于UCOS A/D转换显示 S3C44BO 4路LCD显示曲线 屏幕显示三分钟 超过三分钟将右半屏移到左半屏 每秒采样60次,外接5V电压 …

查看全部问答>

tinyos移植到gains 3的问题

tinyos可以移植到gains 3里面么。。。主要是想应用tinyos里面所带的java工具的功能。。 如果可以要怎么去做啊,给各大概的思路,比如说要修改哪个里面的东西之类的,有没有相关的资料…

查看全部问答>

求教:如何缩短VXWORKS启动时间?

请各位帮帮忙: PENTIUM的CPU,从系统加电,到VXWORKS初始化完成,也就是进入usrAppInit入口的时间需两分钟左右,实在太长了。如何缩短这部分时间呢? 万分感谢!…

查看全部问答>

《STM32博客大赛》即将开锣,请各位做好准备,万元大奖等你

还有配套的团购活动!心动不如行动,要快啊!http://group.ednchina.com/619/10721.aspx…

查看全部问答>

版主主,原装的电机套装在哪买?

                                 版主主,原装的电机套装在哪买?谢谢…

查看全部问答>

求教FIR滤波器IP问题

用altera的IP core配置FIR滤波器非常方便,但有一个问题我想不明白:   输入的是无符号16位数据,ip配置告之输出是31位的。那么这31位数据是怎么构成的呢,哪些是整数,哪些是小数?? …

查看全部问答>

MSP430F47197硬件仿真过完中断后动不了了!!

各位前辈,我最近才开始在学习MSP430的编程。下面是我的代码,其实是从官网给的例程改的:volatile uint i = 0;void main(void){  WDTCTL = WDTPW + WDTHOLD;              ...…

查看全部问答>

ccs安装时总是出错,求助啊

求助ccs不论什么版本安装时总是出这个错误,怎么解决?…

查看全部问答>