您的位置 首页 嵌入式

STM32F051使用笔记-体系时刻挑选及PLL倍频设

对于广大初次接触STM32的读者朋友(甚至是初次接触ARM器件的读者朋友)来说,在熟悉了开发环境的使用之后,往往栽倒在同一个问题上。这问

关于广阔初度触摸STM32的读者朋友(乃至是初度触摸ARM器材的读者朋友)来说,在了解了开发环境的运用之后,往往“栽倒”在同一个问题上。这问题有个要害字叫:时钟树。

众所周知,微操控器(处理器)的运转必需要依靠周期性的时钟脉冲来驱动——往往由一个外部晶体振荡器供给时钟输入为始,终究转换为多个外部设备的周期性运作为末,这种时钟“能量”分散活动的途径,犹如大树的营养经过骨干流向各个分支,因而常称之为“时钟树”。在一些传统的低端8位单片机比方51,AVR,PIC等单片机,其也具有本身的一个时钟树体系,但其间的绝大部分是不受用户操控的,亦即在单片机上电后,时钟树就固定在某种不行更改的状况(假定单片机处于正常作业的状况)。比方51单片机运用典型的12MHz晶振奋为时钟源,则外设如IO口、定时器、串口等设备的驱动时钟速率便已经是固定的,用户无法将此时钟速率更改,除非替换晶振。
而STM32微操控器的时钟树则是可装备的,其时钟输入源与终究到达外设处的时钟速率不再有固定的联系,而不同的外设也对应有不同的时钟,运用任何一个外设都必须翻开相应的时钟。这样的优点便是,假如不运用一个外设的时分,就把它的时钟关掉,然后能够下降体系的功耗,到达节能,完结低功耗的作用。
1、发动代码剖析—SystemInit (void)体系时钟初始化
SystemInit (void)是体系初始化函数,许多新手不知其在何处调用,小肖立刻为你解惑。
startup_stm32f0xx.s文件中汇编代码为STM32发动代码。
发动代码过程一般为:
1)堆和栈的初始化;
2)向量表界说;
3)地址重映射及中断向量表的搬运;
4)设置体系时钟频率;
5)中断寄存器的初始化;
6)进入主程序。
废话太多,估量也看烦了。现在挑要点讲,要点在第4个过程。(第5、6一般编程时在用户代码中履行)。
Reset_Handler
PROC;符号一个函数的开端,也便是复位进口。
IMPORT
__main ; 告诉编译器要运用的标号在其他文件
IMPORT
SystemInit; 同上
要害在这儿了,
LDR
R0, =SystemInit;
这儿的“=”表明LDR现在是伪指令不是规范指令。这儿是把SystemInit的地址给RO。也便是说SystemInit (void)在这儿被调用编译。所以用户编在写程序时无需编写PLL装备程序。
BX
R0;BX是ARM指令集和THUMB指令集之间程序的跳转。
其他省掉。概况如下图所示:
SystemInit初始化RCC之后调用SetSysClock(void)体系时钟设置函数
代码如下:
void SystemInit (void)
{
RCC->CR |= (uint32_t)0x00000001;
RCC->CFGR &= (uint32_t)0xF8FFB80C;
RCC->CR &= (uint32_t)0xFEF6FFFF;
RCC->CR &= (uint32_t)0xFFFBFFFF;
RCC->CFGR &= (uint32_t)0xFFC0FFFF;
RCC->CFGR2 &= (uint32_t)0xFFFFFFF0;
RCC->CFGR3 &= (uint32_t)0xFFFFFEAC;
RCC->CR2 &= (uint32_t)0xFFFFFFFE;
RCC->CIR = 0x00000000;
SetSysClock();
}
2、SetSysClock()设置体系时钟
因为之前挑选界说了PLL_SOURCE_HSE,履行条件编译。
RCC->CR |= ((uint32_t)RCC_CR_HSEON);//使能HSE,如下图所示:
等候HSE设置结束,代码如下。
do
{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC->CR & RCC_CR_HSERDY) != RESET)
{
HSEStatus = (uint32_t)0x01;
}
else
{
HSEStatus = (uint32_t)0x00;
}
设置完结,HSEStatus赋值1,代码如下:
if ((RCC->CR & RCC_CR_HSERDY) != RESET)
{
HSEStatus = (uint32_t)0x01;
}
else
{
HSEStatus = (uint32_t)0x00;
}
HSEStatus HSE==1表明HSE状况正常,启用缓冲区和设置FLASH推迟、HCLK\PCLK。PLL倍频如下图红线所示,修正RCC_CFGR_PLLMULL完结倍频(默许6倍频)。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/262930.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部