STM32L051xx的时钟配置
1、背景
最近,做移植,因此对目标平台做一些了解。
STM32L051C6T6资源为32K Flash; 2K EEPROM;8K RAM;37 GPIOs;1ADC(10 Channels)
2、系统刚起来时的时钟配置
时钟配置是嵌入式程序中比较重要且基础的部分。
有四种不同的时钟源,可用于驱动系统时钟(SYSCLK)。
时钟源:HSI16、HSE、PLL、MSI
AHB、APB1和APB2域的最大时钟为32MHz。
2.1 调用开始
从startup_stm32l051xx.s文件中,调用SystemInit函数
IMPORT __mainIMPORT SystemInit LDR R0, =SystemInitBLX R0
2.2 查看SystemInit(void)源码内容
/*** @brief Setup the microcontroller system.* @param None* @retval None*/
void SystemInit (void)
{
/*!< Set MSION bit 使能MS时钟晶振*/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) 0x88FF400C;/*!< Reset HSION, HSIDIVEN, HSEON, CSSON and PLLON bits 清零*/RCC->CR &= (uint32_t)0xFEF6FFF6;/*!< Reset HSI48ON bit 清零*/RCC->CRRCR &= (uint32_t)0xFFFFFFFE;/*!< 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终端*/RCC->CIER = 0x00000000;/* Configure the Vector Table location add offset address ------------------*/
#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
}
主要是使能MS晶振,对于其他时钟源进行除能、RCC中断除能、向量表重置。
2.3 起来的系统时钟频率是多少
MSI(内部多速率)振荡器时钟
微处理器以上电复位/System or RTC 域复位和从待机模式复位启动之后,用处于2.1MHz的MSI作为系统时钟。
HSI16(16MHz) 或HSI16的4分频(4MHz)或处于任何频率的MSI作为从停止模式醒来的时钟。
因此
在Main函数中,常看见一下代码来配置TICK中断的间隔
SysTick_Config(2000); /* 1ms config */
3、常见时钟配置
3.1 内部HSI配置为系统时钟
3.2 外部HSE配置为系统时钟
3.3 外部HSE,PLL配置为系统时钟
RCC->APB1ENR |= (RCC_APB1ENR_PWREN); /* (1) */
PWR->CR = (PWR->CR & ~(PWR_CR_VOS)) | PWR_CR_VOS_0; /* (2) */
RCC->CR |= RCC_CR_HSEON;
while(RCC->CR & (RCC_CR_HSERDY) != RCC_CR_HSERDY)
{}
RCC->CFGR |= RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMUL8 | RCC_CFGR_PLLDIV2; /* (5) */
RCC->CR |= RCC_CR_PLLON; /* (6) */
while((RCC->CR & RCC_CR_PLLRDY) == 0) /* (7) */
{}
STM32L051xx的时钟配置相关推荐
- STM32的时钟配置随笔
以前使用STM32都是使用库函数开发,最近心血来潮想要使用寄存器来试试手感,于是乎便在工作之余研究了一下STM32F4的时钟配置,在此将经历过程写下来作为锻炼,同时也供和我一样的新手参考,如有错误或者 ...
- 华大单片机HC32L136J8TA读取DS18B20温度(源码+时钟配置)
免费的C语言和linuxPDF文档:传送门 有一点C语言基础和华大单片机开发经验,应该就能看得懂就不多介绍了,有疑问可以留言,看到就回了; 关于协议具体解析:传送门@不脱发的程序猿 注(2021-05 ...
- STM32的时钟配置——时钟树解析
此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...
- NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析
目录 DDR3 内存时间参数 传输速率 tRCD 参数 CL 参数 AL 参数 tRC 参数 tRAS 参数 I.MX6U MMDC内存控制器简介 MMDC内存控制器简介 MMDC内存控制器信号引脚 ...
- STM32 RCC时钟配置
STM32 RCC时钟配置 时钟源 外部高速晶振HSE,通常是8MHz. 内部高速晶振HSI,8MHz. 外部低速晶振LSE,32.768KHz. 内部低速晶振LSI,40KHz. 时钟源选择 通常使 ...
- stm32时钟配置总结
stm32时钟配置时钟源: 1,HSE(高速外部时钟)即常见的外接8M晶振方案: 2,HSI(高速内部时钟) 即8M内部振荡时钟方案: 3,LSE(低速外部时钟)即常见的32.768Khz晶振方案: ...
- 火牛单片机rtc时钟配置_怎么用STM32F103RTC进行时钟的配置
#include "sys.h" #include "delay.h" #include "usart.h" #include " ...
- DSP28377s系统时钟配置注意事项
DSP28377s系统时钟配置注意事项 问题一脸嫣然的向我们走来... 近日,一个兄弟在配置基于28377s芯片的主控系统时钟时,遇到点困难. 具体是这样的,原来的主控板使用的是20MHz外部晶振,为 ...
- 如何修改IMX6UL开发板时钟配置?
启扬i.MX6UL开发板时钟由24Mhz与32.768Khz晶振提供,这里不具体介绍NXP公司整体的时钟规划,只从软件API接口方面去分析如何去修改一个外设的时钟. 接下来的讲解将以CAN总线的时钟为 ...
最新文章
- 自己制作 SPx N合1 自动安装盘(x86)
- LINUX 上的 Shebang 符号(#!)
- 简简单单日赚200元,当日结算
- 【实验】华为静态路由基础配置
- 【转】老邹说Magento的前世今生
- JavaScript 面向对象编程(三) —— 函数进阶 / 严格模式 / 高阶函数 / 闭包 / 浅拷贝和深拷贝
- jQuery各种选择器总结
- 【Python】32 个常用入门 Python 实现
- 3801.最佳连续子数组-AcWing题库
- Matlab多种群遗传算法
- 测试图片真假软件,如何找出照片的PS痕迹__如何检测一张图片是否被PS过_飞翔教程...
- 2014版C 语言程序设计基础,清华大学出版社-图书详情-《C/C++程序设计基础与实践教程》...
- PS动作怎么做爆炸火焰效果特效
- CppCheck的使用
- U盘格式化后容量变小问题修复方案
- 2112731-59-4,N-(Azido-PEG2)-N-Biotin-PEG3-acid末端羧酸可在活化剂(例如EDC或HATU)存在下与伯氨基反应
- 用ADC0809实现八通道采集
- 备份android分区,安卓手机手动【备份+还原】分区
- Collaborative Spatiotemporal Feature Learning for Video Action Recognition 论文笔记
- Excel批量删除空行的几种方法
热门文章
- Java学习路线·入门
- OracleTechnologyNetwork
- web3.js的provider
- EasyUI DataGrid DetailView(数据表格详细展示带子表格)
- uint与int区别
- CentOS7 好日子到头了,如何优雅的抛弃 CentOS7?
- centos7配置ip地址(centos7配置ip地址)
- 【Python学习】transpose函数
- EXCEL的查找:如何按 行号+列号 进行查询, 可用indirect() + match() 或 index() + match()
- 树莓派开箱+上手python小游戏