STM32L151 标准库时钟晶振修改

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

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

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

Reset handler routine
Reset_Handler    PROCEXPORT  Reset_Handler             [WEAK]IMPORT  __mainIMPORT  SystemInit  LDR     R0, =SystemInit   //***在stm32的其实代码中SystemInit为系统调用的时钟函数***BLX     R0              LDR     R0, =__mainBX      R0ENDP

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

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_ExtSRAMSystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM *//* Configure the System clock frequency, AHB/APBx prescalers and Flash settings */SetSysClock(); //***此函数的作用初始化外部高速晶振,如果注释此函数,此系统会默认使用STM32内部8M的高速晶振***#ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#elseSCB->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, youcan 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.cSetSysClock函数

    /*  PLL configuration */       //***为PLL的配置***
#if 0/*default HSE 8M*///因为STM32l151的最大时钟频率为32M,外部的采用的8M的高速晶振,所以经过2分频,8倍频。//8M / 2 * 8 == 32MRCC->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 == 32MRCC->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高速晶振工作。具体情况可以使用示波器进行验证,在此不多余介绍。

STM32L151系列标准库时钟晶振修改相关推荐

  1. STM32 F103C8T6 标准库换晶振 硬件8MHZ 换12MHZ实测方法

    手头有一块12MHZ外部硬件开发板,型号是STM32F103c8t6.准备实验一个项目. 可网上大部分源码程序都是8MHZ晶振的源码.由于是初学查了好久很困惑. 虽然使用CUBEMX的HAL库很容易改 ...

  2. 开博尔Q50要采用XMOS解码芯片与双时钟晶振的意义何在?

    开博尔Q50音质方面大升级,它不仅是一台蓝光播放器,也是一台HiFi播放器.此次音频解码采用XMOS无损音频解码芯片,很多人对于此次音频解码升级有些不理解,我这里给大家解释一下. 首先来科普一下什么是 ...

  3. 时钟晶振在电子日历上的作用!

    电子日历在生活中日益普遍,该设计主要利用时钟芯片.表晶32.768KHZ,石英晶体谐振器.温度传感器DS18B20 和液晶屏LCD1602 构建了一个可测温式万年历装置,电路结构简单,具有语音报时功能 ...

  4. 计算机主板上实时时钟晶振频率为,电脑主板晶振的识别及测量方法介绍

    一. 单位:赫兹"Hz" 1MHz=1000kHz=1000000Hz 符号: "X.Y" 二. 晶振的分类: 主板上晶振主要分为: 1.时钟晶振: 与时钟芯相 ...

  5. 计算机主板上实时时钟晶振频率为,你知道你的笔记本电脑主板中的晶振好不好吗?...

    晶振是石英晶体振荡器的简称.晶振是一种用于稳定频率和选择频率的电子元器件.晶振是高精度和高稳定的振荡器,广泛应用于各种电路中,为数据处理设备产生时钟信号和为特定系统提供基准信号. 晶振的识别 笔记本电 ...

  6. 计算机主板上实时时钟晶振频率为,电脑主板上的四大类晶振

    电脑主板上的四大类晶振 晶振和时钟芯片共同组成主板的时钟发生器,主板上的多数部件额时钟信号,由时钟发生器提供,时钟发生器是主板时钟电路的核心,如同主板的心脏.那么,你可知道电脑主板上都有哪些晶振呢?这 ...

  7. STM32F407修改程序将外部25M晶振修改为8M(标准库、HAL库)

    前言:由于自己设计的STM32F407的板子外部晶振使用的是8M,如果想用例如野火F407等外部晶振为25M的例程还需要修改外部晶振才能使用. 程序中修改只需要修改两处地方即可,根据自身所用的是标准库 ...

  8. HC32F460之时钟(晶振)设置

    简介 以配置16M晶振为例,具体操作配置如下: 代码如下(修改点1) void clock_init(void) {stc_clk_xtal_cfg_t stcXtalCfg; //高速外部震荡器st ...

  9. 计算机主板上实时时钟晶振频率为,电脑主板里的晶振才是网络时代发展的根源...

    原标题:电脑主板里的晶振才是网络时代发展的根源 文章来源于,转载请注明! 匆匆一年又一年,转眼间我已经度过了20个严寒酷暑,长大是件很有意思的事儿,不经意间就发生了,本来是这样一个人,然后突然间变成另 ...

最新文章

  1. 全新 DOCKER PALS 计划上线,带给您不一样的参会体验!...
  2. hive -f 传递参数
  3. 4 款 MySQL Binlog 日志处理工具对比,谁才是王者?
  4. mysql 释放空间_07_MySQL delete后释放存储空间
  5. pc端vnc连接android 端
  6. android volley 上传图片 和参数,android Volley 上传文件上传图片
  7. 疯狂java学习笔记1023---线程的同步
  8. c语言猜四位数游戏猜10次,C语言猜数字游戏--随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字和数字对应的位置,界面回馈A,如果数字正确位置不正确,则回馈B...
  9. 让你瞬间提高工作效率的常用js函数汇总
  10. linux怎么在ETC文件夹内新建,教你如何手动新建Linux用户
  11. WIN7获取管理员权限
  12. 项目是如何完成的(一)
  13. 一个可以在Linux环境下找到,杀死,并重启Tomcat的脚本
  14. mysql 隐秘后门_Phpstudy被暴存在隐藏后门-检查方法
  15. python基于情感词典的情感分析
  16. cad四级计算机考试,国家CAD等级考试介绍
  17. Hilbert变换C语言实现学习
  18. 遥感图像空间分辨率获取
  19. PS学习-曝光与色彩处理(二)--纯净自然的高调照片
  20. 系统提供人民币(CNY)美元(USD)英镑(GBP)价值转换

热门文章

  1. easelJS 初始入门
  2. 《白夜行》—— 读后总结
  3. 中国丙烯酸羟乙酯市场深度调研与投资方向预测报告2022-2028年
  4. 基于51单片机和L298N的小车制作(一)
  5. RobotFramework(RF)万能关键字-Evaluate
  6. MWC 2019新品汇总:5G+折叠屏开启的新时代?
  7. 计算机英语授课计划,计算机专业英语授课计划.pdf
  8. 硬核 | 50 家企业 C++ 面经分享
  9. 云效携手SAE助力「石家庄掌讯 」持续交付、降本提效
  10. 理解浮动以及解决浮动带来的问题