STM32学习笔记(3):系统时钟和SysTick定时器

合集下载

STM32学习笔记—SysTick定时器

STM32学习笔记—SysTick定时器

STM32 学习笔记—SysTick 定时器Q:什幺是SYSTick 定时器?
SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。

只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。

Q:为什幺要设置SysTick 定时器?
(1)产生操作系统的时钟节拍
SysTick 定时器被捆绑在NVIC 中,用于产生SYSTICK 异常(异常号:15)。

在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。

因此,需要一个定时器来产生周期性的中断,
而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统心跳的节律。

(2)便于不同处理器之间程序移植。

Cortex㎝3 处理器内部包含了一个简单的定时器。

因为所有的CM3 芯片都带有这个定时器,软件在不同CM3 器件间的移植工作得以化简。

该定时器的时钟源可以是内部时钟(FCLK,CM3 上的自由运行时钟),或者是外部时钟( CM3 处理器上的STCLK 信号)。

学习笔记:STM32的SysTick定时器

学习笔记:STM32的SysTick定时器

学习笔记:STM32的SysTick定时器SysTick定时器是一个系统定时器,该定时器是个24位的倒计数定时器,该定时器的最大用处在于可以提供一个操作系统任务切换所需要的“时钟滴答”。

该定时器是STM32中功能最简单的定时器,提供倒计数、中断两个功能,类似与8051的定时器。

SysTick是包含在Cortex-M3内核中的一个简单的定时器。

因为所有的CM3芯片都带有这个定时器,软件在不同芯片生产厂商的CM3器件间的移植工作就得以简化。

该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟(CM3处理器上的STCLK信号)。

不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能大不相同。

因此,需要阅读芯片的使用手册来确定选择什么作为时钟源。

在STM32中SysTick以外部时钟HCLK(AHB时钟)或HCLK/8作为运行时钟。

SysTick工作分析SysTick是一个24位的定时器,即一次最多可以计数2^24个时钟脉冲,这个脉冲的计数值被保存到当前计数值寄存器STK_VAL中,只能向下计数,每接收到一个时钟脉冲STK_VAL 的值就向下减1,直到为0。

当STK_VAL的值被减至0时,由硬件自动把重载寄存器STK_LOAD 中保存的数值加载到STK_VAL中,STK_VAL又重新向下计数……当使能中断时,STK_VAL的值减至0时,触发中断,就可以在中断服务函数中处理定时事件了。

当然,要使SysTick进行以上工作必须要进行SysTick配置。

它的控制配置很简单,只有三个控制位和一个标志位,都位于寄存器STK_CTRL中。

STK_CTRL是一个32位的寄存器,该寄存器与SysTick有关的位分别为Bit0(ENABLE)、Bit1(TICKINT)、Bit2(CLKSOURCE)、Bit16(COUNTFLAG)。

Bit0(ENABLE):SysTick的使能位,此位为1的时候使能SysTick定时器,为0的时候关闭SysTick定时器。

STM32知识:什么是SYSTICK 作用是什么

STM32知识:什么是SYSTICK 作用是什么

STM32知识:什么是SYSTICK 作用是什么什么是SYSTICK:这是一个24位的系统节拍定时器system TIck TImer,SysTIck,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。

作用:在单任务引用程序中,因为其架构就决定了它执行任务的串行性,这就引出一个问题:当某个任务出现问题时,就会牵连到后续的任务,进而导致整个系统崩溃。

要解决这个问题,可以使用实时操作系统(RTOS).因为RTOS以并行的架构处理任务,单一任务的崩溃并不会牵连到整个系统。

这样用户出于可靠性的考虑可能就会基于RTOS来设计自己的应用程序。

这样SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供一个有节奏的心跳。

微控制器的定时器资源一般比较丰富,比如STM32存在8个定时器,为啥还要再提供一个SYSTICK?原因就是所有基于ARM Cortex_M3内核的控制器都带有SysTick定时器,这样就方便了程序在不同的器件之间的移植。

而使用RTOS的第一项工作往往就是将其移植到开发人员的硬件平台上,由于SYSTICK的存在无疑降低了移植的难度。

SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。

要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

时钟的选择:用户可以在位于Cortex_M3处理器系统控制单元中的系统节拍定时器控制和状态寄存器(SysTick control and status register ,SCSR)选择systick 时钟源。

如将SCSR中的CLKSOURCE位置位,SysTick会在CPU频率下运行;而将CLKSOUCE位清除则SysTick 会以CPU主频的1/8频率运行。

3.5版本的库函数与以往的有所区别不存在stm32f10x_systick.c文件,故原来的一些函数也不存在,比如SysTick_SetReload(u32。

stm32中滴答定时器的工作原理

stm32中滴答定时器的工作原理

stm32中滴答定时器的工作原理滴答定时器(SysTick)是STM32微控制器中的一种基本定时器,用于实现系统级的定时和延时功能。

它通常用于硬件抽象层的操作系统内核的实现以及其他需要高精度定时的应用场景。

滴答定时器的工作原理如下:1.时钟源选择:滴答定时器使用CPU时钟作为输入时钟,因此在使用之前需要首先设置CPU的主频。

CPU时钟可以是外部晶振,也可以是内部RC振荡器,由系统初始化代码进行设置。

2.模式选择和初始化:滴答定时器有两种工作模式,分别是中断模式和定时器模式。

中断模式下,定时器溢出时会产生中断请求,用于实时操作系统的任务调度;在定时器模式下,定时器溢出后会自动清零,用于延时等功能。

通过设置控制寄存器(STK_CTRL)可以选择工作模式和初始化定时器的值。

3.计数器递减:滴答定时器的计数值从初始化值开始递减,直到计数值为零时溢出。

每个CPU时钟周期,计数值会减去一个单位。

CPU的主频越高,滴答定时器的计数速度就越快。

4.滴答定时器中断:当计数值减少到零时,滴答定时器会产生一个溢出中断。

在中断处理函数中,可以执行一些任务,如系统时钟更新、任务调度和延时等。

5. 重载和连续计数:滴答定时器的计数值可以自动加载初始化值,并在溢出后继续计数。

通过设置控制寄存器的使能位(enable)可以实现此功能。

当使能位为1时,计数器溢出后会自动重新加载初始化值并继续计数。

7.滴答定时器的应用:滴答定时器可用于实现微秒级的延时函数,用于生成固定时间间隔的任务调度,或者用于计算程序执行的时间等。

总之,滴答定时器是STM32微控制器中的一种基本定时器,可以用于实现系统级的定时和延时功能。

它通过使用CPU时钟作为输入时钟源,不断递减计数器的值,当计数器溢出时产生中断并执行相应的任务。

通过设置工作模式、初始化值和使能位等参数,可以配置滴答定时器的功能和精度。

它在实时操作系统的任务调度、时钟更新和延时等方面起着重要的作用。

STM32的SYSTICK定时器(系统滴答定时器)

STM32的SYSTICK定时器(系统滴答定时器)

STM32的SYSTICK定时器(系统滴答定时器)什么是SysTick?这是⼀个24位的系统节拍定时器system tick timer,SysTick,具有⾃动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得⼀定的时间间隔。

SysTick作⽤在单任务引⽤程序中,因为其架构就决定了它执⾏任务的串⾏性,这就引出⼀个问题:当某个任务出现问题时,就会牵连到后续的任务,进⽽导致整个系统崩溃。

要解决这个问题,可以使⽤实时操作系统(RTOS).因为RTOS以并⾏的架构处理任务,单⼀任务的崩溃并不会牵连到整个系统。

这样⽤户出于可靠性的考虑可能就会基于RTOS来设计⾃⼰的应⽤程序。

SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供⼀个有节奏的“⼼跳”。

微控制器的定时器资源⼀般⽐较丰富,⽐如STM32存在8个定时器,为啥还要再提供⼀个SYSTICK?原因就是所有基于ARM Cortex_M3内核的控制器都带有SysTick定时器,这样就⽅便了程序在不同的器件之间的移植。

⽽使⽤RTOS的第⼀项⼯作往往就是将其移植到开发⼈员的硬件平台上,由于SYSTICK的存在⽆疑降低了移植的难度。

SysTick定时器除了能服务于操作系统之外,还能⽤于其它⽬的:如作为⼀个闹铃,⽤于测量时间等。

要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

SysTick时钟的选择SysTick寄存器说明在《Cortex-M3权威指南》(chap8.SysTick定时器章节)有说明⽤户可以在位于Cortex_M3处理器系统控制单元中的系统节拍定时器控制和状态寄存器(SysTick control and status register ,SCSR)选择systick 时钟源。

如将SCSR中的CLKSOURCE位置位,SysTick会在CPU频率下运⾏;⽽将CLKSOUCE位清除则SysTick会以CPU主频的1/8频率运⾏。

STM32系统systick定时器与延迟时间计算

STM32系统systick定时器与延迟时间计算

STM32系统systick定时器与延迟时间计算STM32系统systick定时器与延迟时间计算系统嘀嗒(SysTick)校准值寄存器1.(SysTick) 系统嘀嗒时钟是由HCLK 分频出来的。

HCLK=SYSCLK=72MHz/* Select HCLK/8 as SysTick clock source */SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);当系统嘀嗒时钟设定为9 兆赫或是:SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);当系统嘀嗒时钟设定为72 兆赫2.系统嘀嗒校准值固定到9000,当系统嘀嗒时钟设定为9 兆赫,产生1ms 时基。

/* SysTick interrupt each 9ms with counter clock equal to 1MHz */SysTick_SetReload(9000);该参数取值必须在1和0x00FFFFFF之间3.使能一下:/* Enable the SysTick Counter */SysTick_CounterCmd(SysTick_Counter_Enable);/* Enable the SysTick Interrupt */SysTick_ITConfig(ENABLE);这还有另外一种设置方法:经试验验证可行://NVIC_InitTypeDef NVIC_InitStructure;/* Configure HCLK clock as SysTick clock source */SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);/* Configure the SysTick handler priority */NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick,2, 0);/* Configure one bit for preemption priority */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/* SysTick interrupt each 100 Hz with HCLK equal to 72MHz 每1ms发生一次SysTick中断*/SysTick_SetReload(72000);/* Enable the SysTick Interrupt */SysTick_ITConfig(ENABLE);/* Enable the SysTick Counter */SysTick_CounterCmd(SysTick_Counter_Enable);关键是:SysTick_CLKSourceConfig,和SysTick_SetReload。

STM32入门教程系统时钟SysTick

STM32入门教程系统时钟SysTick

STM32入门教程系统时钟SysTickSTM32 入门教程系统时钟 SysTick(一) 背景介绍在传统的嵌入式系统软件按中通常实现 Delay(N) 函数的方法为:for(i = 0; i <= x; i ++);x --- 对应于对应于 N 毫秒的循环值对于STM32系列微处理器来说,执行一条指令只有几十个ns,进行 for 循环时,要实现 N 毫秒的 x 值非常大,而且由于系统频率的宽广,很难计算出延时 N 毫秒的精确值。

针对 STM32 微处理器,需要重新设计一个新的方法去实现该功能,以实现在程序中使用Delay(N)。

(二) STM32 SysTick 介绍Cortex-M3 的内核中包含一个 SysTick 时钟。

SysTick 为一个 24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。

计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的COUNTFLAG 标志会置位,触发中断(如果中断使能情况下)。

在 STM32 的应用中,使用 Cortex-M3 内核的 SysTick 作为定时时钟,设定每一毫秒产生一次中断,在中断处理函数里对N 减一,在Delay(N) 函数中循环检测 N 是否为 0,不为 0 则进行循环等待;若为0 则关闭 SysTick 时钟,退出函数。

注:全局变量 TimingDelay , 必须定义为 volatile 类型 , 延迟时间将不随系统时钟频率改变。

(三) ST SysTick 库文件使用ST的函数库使用systick的方法1、调用SysTick_CounterCmd() -- 失能SysTick计数器2、调用SysTick_ITConfig () -- 失能SysTick中断3、调用SysTick_CLKSourceConfig() -- 设置SysTick时钟源。

4、调用SysTick_SetReload() -- 设置SysTick重装载值。

stm32时钟概念

stm32时钟概念

stm32时钟概念STMicroelectronics的STM32系列是一系列基于ARM Cortex-M 内核的微控制器(MCU)。

时钟系统在STM32芯片中是一个关键的概念,因为它驱动了芯片内部的各种功能模块,包括CPU、外设、总线等。

以下是与STM32时钟相关的一些基本概念:1. 系统时钟(SYSCLK): SYSCLK是STM32中的主时钟,它驱动CPU和内存等核心模块。

其频率由时钟源和分频器的组合决定。

2. 时钟源: STM32芯片通常支持多个时钟源,包括内部RC振荡器、外部晶体振荡器、PLL(相位锁定环)等。

选择适当的时钟源取决于应用的要求,例如需要更高的稳定性或更低的功耗。

3. PLL(Phase-Locked Loop):PLL是一种用于产生高稳定性时钟信号的电路。

通过将一个参考时钟信号与一个可调节的倍频器相锁定,PLL可以生成一个高频率的时钟信号。

4. AHB、APB总线:在STM32中,系统总线被分为高性能总线(AHB)和低速外设总线(APB)。

这两个总线有各自的时钟域,因此可以独立配置时钟。

这种分级的结构有助于提高系统的性能和灵活性。

5. 时钟树:时钟树描述了时钟系统的层次结构,显示了时钟源如何通过PLL和分频器传递到各个模块。

了解时钟树结构对于调整系统时钟和解决时钟相关问题非常有用。

6. 时钟配置寄存器: STM32芯片具有一系列寄存器,允许程序员配置时钟系统。

这些寄存器包括RCC寄存器(RCC,Reset and Clock Control)等,通过编程这些寄存器,可以设置各种时钟参数。

7. 低功耗模式时钟: STM32芯片支持不同的低功耗模式,如停机模式、待机模式等。

在这些模式下,可以降低系统的功耗,因此时钟系统在这些模式下的配置也需要考虑。

时钟配置通常是在启动代码或初始化过程中完成的,程序员可以通过修改相应的寄存器来调整时钟设置以满足应用的需求。

对于具体的时钟配置和使用,建议查阅STMicroelectronics提供的芯片手册和相关文档。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32学习笔记(3):系统时钟和SysTick定时器1.STM32的时钟系统在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL(1)HSI是高速内部时钟,RC振荡器,频率为8MHz;(2)HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz – 16MHz;(3)LSI是低速内部时钟,RC振荡器,频率为40KHz;(4)LSE是低速外部时钟,接频率为32.768KHz的石英晶体;(5)PLL为锁相环倍频输出,严格的来说并不算一个独立的时钟源,PLL 的输入可以接HSI/2、HSE或者HSE/2。

倍频可选择为2 – 16倍,但是其输出频率最大不得超过72MHz。

其中,40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。

另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。

STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。

该时钟源只能从PLL端获取,可以选择为1.5分频或者1分频,也就是,当需使用到USB模块时,PLL必须使能,并且时钟配置为48MHz 或72MHz。

另外STM32还可以选择一个时钟信号输出到MCO脚(PA.8)上,可以选择为PLL输出的2分频、HSI、HSE或者系统时钟。

系统时钟SYSCLK,它是提供STM32中绝大部分部件工作的时钟源。

系统时钟可以选择为PLL输出、HSI、HSE。

系系统时钟最大频率为72MHz,它通过AHB分频器分频后送给各个模块使用,AHB分频器可以选择1、2、4、8、16、64、128、256、512分频,其分频器输出的时钟送给5大模块使用:(1)送给AHB总线、内核、内存和DMA使用的HCLK时钟;(2)通过8分频后送给Cortex的系统定时器时钟;(3)直接送给Cortex的空闲运行时钟FCLK;(4)送给APB1分频器。

APB1分频器可以选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。

该倍频器可以选择1或者2倍频,时钟输出供定时器2、3、4使用。

(5)送给APB2分频器。

APB2分频器可以选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另外一路送给定时器(Timer)1倍频使用。

该倍频器可以选择1或2倍频,时钟输出供定时器1使用。

另外APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。

ADC分频器可选择为2、4、6、8分频。

需要注意的是定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。

连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。

注意USB模块虽然需要一个单独的48MHz的时钟信号,但是它应该不是供USB 模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟。

USB模块的工作时钟应该是由APB1提供的。

连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、GPIOx(PA~PE)、第二功能IO口。

2.STM32时钟的初始化由于我现在所用的开发板已经外接了一个8MHz的晶振,因此将采用HSE 时钟,在MDK编译平台中,程序的时钟设置参数流程如下:(1)将RCC寄存器重新设置为默认值:RCC_DeInit;(2)打开外部高速时钟晶振HSE:RCC_HSEConfig(RCC_HSE_ON);(3)等待外部高速时钟晶振工作:HSEStartUpStatus =RCC_WaitForHSEStartUp();(4)设置AHB时钟(HCLK):RCC_HCLKConfig;(5)设置高速AHB时钟(APB2):RCC_PCLK2Config;(6)设置低速AHB时钟(APB1):RCC_PCLK1Config;(7)设置PLL:RCC_PLLConfig;(8)打开PLL:RCC_PLLCmd(ENABLE);(9)等待PLL工作:while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET);(10)设置系统时钟:RCC_SYSCLKConfig;(11)判断PLL是否是系统时钟:while(RCC_GetSYSCLKSource() != 0x08);(12)打开要使用的外设时钟:RCC_APB2PerphClockCmd()….某些函数的详细的使用方法,可以参考ST公司出版的《STM32F10xxx_Library_Manual》3.SysTick定时器NVIC中,捆绑着一个SysTick定时器,它是一个24位的倒数计数定时器,当计到0时,将从RELOAD寄存器中自动重装载定时初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(如果中断使能情况下)。

只要不把它在SysTick控制及状态寄存器中的使能位清除,就用不停息。

Cortex-M3允许为SysTick提供2个时钟源以供选择,第一个是内核的“自由运行时钟”FCLK,“自由”表现在它不是来自系统时钟HCLK,因此在系统时钟停止时,FCLK也能继续运行。

第2个是一个外部的参考时钟,但是使用外部时钟时,因为它在内部是通过FCLK来采样的,因此其周期必须至少是FCLK的两倍(采样定理)。

下面介绍一下STM32中的SysTick,它属于NVIC控制部分,一共有4个寄存器:STK_CSR,0xE000E010:控制寄存器STK_LOAD,0xE000E014:重载寄存器STK_VAL,0xE000E018:当前值寄存器STK_CALRB,0xE000E01C:校准值寄存器首先看STK_CSR控制寄存器,有4个bit具有意义:第0位:ENABLE,SysTick使能位(0:关闭SysTick功能,1:开启SysTick 功能);第1位:TICKINT,SysTick中断使能位(0:关闭SysTick中断,1:开启SysTick中断);第2位:CLKSOURCE,SysTick时钟选择(0:使用HCLK/8作为时钟源,1:使用HCLK);第3为:COUNTFLAG,SysTick计数比较标志,如果在上次读取本寄存器后,SysTick已经数到0了,则该位为1,如果读取该位,该位自动清零。

STK_LOAD重载寄存器:Systick是一个递减的定时器,当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。

STK_LOAD 重载寄存器是个24位的寄存器最大计数0xFFFFFF。

STK_VAL当前值寄存器:也是个24位的寄存器,读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick控制及状态寄存器中的COUNTFLAG标志。

STK_CALRB校准值寄存器:其中包含着一个TENMS位段,具体信息不详。

暂时用不到。

在MDK开发环境中,我们不必要非得去操作每一个寄存器,可以通过调用ST函数库中的函数来进行相关的操作,其步骤如下:(1)调用SysTick_CounterCmd() 失能SysTick计数器(2)调用SysTick_ITConfig() 失能SysTick中断(3)调用SysTick_CLKSourceConfig() 设置SysTick时钟源(4)调用SysTick_SetReload() 设置SysTick重装载值(5)调用NVIC_SystemHandlerPriorityConfig() 设置SysTick定时器中断优先级(6)调用SysTick_ITConfig() 使能SysTick中断(7)在stm32f10x_it.c中SysTickHandler()下写中断服务函数。

(8)在需要的时候调用SysTick_CounterCmd() 开启SysTick计数器4.工程实现根据以上描述,准备利用开发板上的LED灯做一个小实验,将第一个跑马灯的实验稍微改进一下,以1s精确延时的状态来顺序点亮LED灯,采用的定时器就是SysTick。

设计思路是先配置好系统的各个参数,然后设置SysTick定时器每1ms就进入一次中断,再定义一个全局变量作为定时长短的参数,然后将从延时函数中得到的参数赋值给这个全局变量,每进入一次中断,这个全局变量就减一次,直到减为0,才跳出延时函数。

1.配置系统时钟void RCC_cfg(){//定义错误状态变量ErrorStatus HSEStartUpStatus;//将RCC寄存器重新设置为默认值RCC_DeInit();//打开外部高速时钟晶振RCC_HSEConfig(RCC_HSE_ON);//等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS){//设置AHB时钟(HCLK)为系统时钟RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置高速AHB时钟(APB2)为HCLK时钟RCC_PCLK2Config(RCC_HCLK_Div1);//设置低速AHB时钟(APB1)为HCLK的2分频RCC_PCLK1Config(RCC_HCLK_Div2);//设置FLASH代码延时FLASH_SetLatency(FLASH_Latency_2);//使能预取指缓存FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//设置PLL时钟,为HSE的9倍频8MHz * 9 = 72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//使能PLLRCC_PLLCmd(ENABLE);//等待PLL准备就绪while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//设置PLL为系统时钟源RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//判断PLL是否是系统时钟while(RCC_GetSYSCLKSource() != 0x08);}//打开PB和PD用于点亮LED灯RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOD, ENABLE);}其中使用到了NVIC的函数,需要将stm32f10xR.lib加入到工程中。

相关文档
最新文档