stm32:系统时钟

合集下载

STM32时钟设置_SysTick_教程

STM32时钟设置_SysTick_教程
(二) 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 类型 , 延迟时间将不随系统时钟频 率改变。
/* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } }
/* Enable GPIOA and AFIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
TimingDelay--; if(TimingDelay % 2) {
TestSig = 1;
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
} else {
(五) 仿真调试
Generated by Foxit PDF Creator © Foxit Software For evaluation only.

STM32系列MCU硬件实时时钟(RTC)应用笔记说明书

STM32系列MCU硬件实时时钟(RTC)应用笔记说明书

2017年6月Doc ID 018624 Rev 1 [English Rev 5]1/45AN3371应用笔记在 STM32 F0、F2、F3、F4 和 L1 系列MCU 中使用硬件实时时钟(RTC )前言实时时钟 (RTC) 是记录当前时间的计算机时钟。

RTC 不仅应用于个人计算机、服务器和嵌入式系统,几乎所有需要准确计时的电子设备也都会使用。

支持 RTC 的微控制器可用于精密计时器、闹钟、手表、小型电子记事薄以及其它多种设备。

本应用笔记介绍超低功耗中等容量、超低功耗大容量、F0、F2和 F4 系列器件微控制器中嵌入式实时时钟 (RTC) 控制器的特性,以及将 RTC 用于日历、闹钟、定时唤醒单元、入侵检测、时间戳和校准应用时所需的配置步骤。

本应用笔记提供了含有配置信息的示例,有助于您快速准确地针对日历、闹钟、定时唤醒单元、入侵检测、时间戳和校准应用配置 RTC 。

注:所有示例和说明均基于 STM32L1xx 、STM32F0xx 、STM32F2xx 、STM32F4xx 和STM32F3xx 固件库,以及 STM32L1xx (RM0038)、STM32F0xx (RM0091)、STM32F2xx (RM0033)、STM32F4xx (RM0090)、STM32F37x (RM0313) 和 STM32F30x(RM0316) 的参考手册。

本文提到的STM32 指超低功耗中等容量、超低功耗大容量、F0、F2 和 F4 系列器件。

超低功耗中等 (ULPM) 容量器件包括 STM32L151xx 和 STM32L152xx 微控制器,Flash 容量在 64 KB 到 128 KB 之间。

超低功耗大 (ULPH) 容量器件包括 STM32L151xx 、STM32L152xx 和 STM32L162xx 微控制器,Flash 容量为 384 KB 。

F2 系列器件包括 STM32F205xx 、STM32F207xx 、STM32F215xx 和 STM32F217xx 微控制器。

stm32数字时钟课程设计

stm32数字时钟课程设计

stm32 数字时钟课程设计一、课程目标知识目标:1. 学生能理解STM32的基本结构和工作原理,掌握其编程方法。

2. 学生能掌握数字时钟的基本原理,包括时钟源、分频器、计数器等组成部分。

3. 学生能了解实时时钟(RTC)的功能及其在STM32中的应用。

技能目标:1. 学生能运用C语言编写程序,实现STM32控制数字时钟的功能。

2. 学生能通过调试工具,对程序进行调试和优化,确保数字时钟的准确性。

3. 学生能运用所学知识,设计具有实用价值的数字时钟产品。

情感态度价值观目标:1. 培养学生对电子技术和编程的兴趣,激发其探究精神。

2. 培养学生团队合作意识,使其在项目实施过程中学会相互沟通、协作。

3. 培养学生严谨、细致、负责的工作态度,提高其解决实际问题的能力。

课程性质:本课程为实践性较强的课程,结合STM32和数字时钟知识,培养学生的动手能力和实际操作技能。

学生特点:学生具备一定的电子技术基础和C语言编程能力,对实际操作感兴趣,但可能缺乏项目实践经验。

教学要求:注重理论与实践相结合,引导学生主动探索,提高其分析问题、解决问题的能力。

在教学过程中,关注学生的个体差异,因材施教,使每位学生都能在原有基础上得到提高。

将课程目标分解为具体的学习成果,便于后续教学设计和评估。

二、教学内容本课程教学内容主要包括以下几部分:1. STM32基本原理与编程基础:介绍STM32的内部结构、工作原理,C语言编程基础及其在STM32中的应用。

- 教材章节:第一章至第三章- 内容:微控制器基础、STM32硬件结构、C语言编程基础、STM32编程环境搭建。

2. 数字时钟原理与设计:讲解数字时钟的基本原理、组成部分以及设计方法。

- 教材章节:第四章至第五章- 内容:时钟源、分频器、计数器、实时时钟(RTC)、数字时钟设计方法。

3. STM32实现数字时钟功能:结合STM32和数字时钟知识,指导学生动手实践,实现数字时钟功能。

STM32系统时钟RCC(基于HAL库)

STM32系统时钟RCC(基于HAL库)

STM32系统时钟RCC(基于HAL库)基础认识为什么要有时钟:时钟就是单⽚机的⼼脏,其每跳动⼀次,整个单⽚机的电路就会同步动作⼀次。

时钟的速率决定了两次动作的间隔时间。

速率越快,单⽚机在单位时间内所执⾏的动作将越多。

时钟是单⽚机运⾏的基础,时钟信号推动单⽚机内各个部分执⾏相应的指令。

时钟系统就是CPU的脉搏,决定cpu速率。

为什么这么多个时钟源:STM32系统是复杂的,⾼精度、低精度、⾼速、低速等,且可以对每个时钟源进⾏开关操作,可以把不需要使⽤的关闭掉。

这可以让单⽚机适⽤更多的环境中,把选择权利交个了开发者,开发者可以从精度、功耗、资源等多⽅⾯考虑。

STM32时钟:从时钟源的⾓度可分为:l 外部时钟(E)l 内部时钟(I)从时钟速率的⾓度分为:l ⾼速时钟(HS)l 低速时钟(LS)STM32在芯⽚复位后默认选⽤的是内部的⾼速时钟(HSI)进⾏⼯作,如果需要使⽤外部⾼速时钟(HSE)的话需要经过软件操作相关的寄存器配置。

外部时钟模式外部的⾼速和低速时钟均有这三个可选项⽬,图中是CubeMX提供的外部时钟选择:可选类型为l Disable(关闭,不使⽤外部时钟)l BYPASS Clock Source(旁路时钟源)l Crystal/Ceramic Resonator(外部晶体/陶瓷谐振器)外部晶体/陶瓷谐振器模式该模式较为常见,这可以为系统时钟提供较为精确的时钟源。

该时钟源是由外部⽆源晶体与MCU内部时钟驱动电路共同配合形成,有⼀定的启动时间,精度较⾼。

为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容必须尽可能地靠近振荡器引脚。

负载电容值必须根据所选择的晶体来具体调整。

整体上讲,陶瓷晶体和⽯英晶体的主要区别就在于精度和温度稳定性上。

⽯英晶体⽐陶瓷晶体精度要⾼,温度稳定性要好。

旁路时钟源模式该模式下必须提供外部时钟。

外部时钟信号(50%占空⽐的⽅波、正弦波或三⾓波)必须连到SOC_IN引脚,此时OSC_OUT引脚对外呈⾼阻态。

stm32 rtc实时时钟

stm32 rtc实时时钟

stm32 rtc实时时钟STM32 RTC实时时钟一、介绍STM32是意法半导体公司(STMicroelectronics)推出的一系列32位ARM Cortex-M微控制器。

其中,RTC(Real-Time Clock)是STM32微控制器中的一个重要组件,用于实时时钟和日历功能。

本文将详细介绍STM32 RTC的实时时钟功能及其应用。

二、RTC概述RTC模块是一种独立的硬件模块,可以在微控制器断电时继续运行。

它提供了一个与时间和日期相关的计数器,通过时钟信号源来驱动计数器,从而实现实时时钟的功能。

RTC模块通常由一个独立的低功耗振荡器来提供时钟源。

STM32微控制器中的RTC模块支持多种工作模式,如年历模式、单位数字模式和二进制模式等。

三、RTC的主要功能1. 实时时钟:RTC模块可以提供精确的实时时钟,可以记录时间、日期和星期等信息。

2. 闹钟功能:RTC可以设置多个闹钟时间,并在闹钟时间到达时触发中断或其他操作。

3. 倒计时功能:RTC模块可以进行倒计时操作,并在倒计时结束时触发中断。

4. 调度功能:RTC可以设置预定的时间点,并在该时间点触发中断。

5. 报警功能:RTC可以设置报警功能,当发生特定事件时触发中断或其他操作。

四、配置RTC模块在使用STM32微控制器的RTC功能之前,需要进行一些配置。

首先,需要选择合适的时钟源。

通常,RTC模块使用低功耗振荡器作为时钟源。

其次,需要配置RTC的预分频器和计数器,以实现所需的时间精度。

还需配置中断和/或事件触发条件,以便在特定事件发生时触发中断或其他操作。

五、RTC的中断与事件RTC模块可以生成多个中断和事件,以满足应用的需求。

常见的中断和事件有:1. 秒中断:每当计数器的秒字段更新时触发中断。

2. 分钟中断:每当计数器的分钟字段更新时触发中断。

3. 小时中断:每当计数器的小时字段更新时触发中断。

4. 日期中断:每当计数器的日期字段更新时触发中断。

STM32单片机RTC时钟的使用方法及步骤

STM32单片机RTC时钟的使用方法及步骤

STM32单片机RTC时钟的使用方法及步骤以下是使用STM32单片机的RTC时钟的步骤:1.初始化RTC模块:首先,需要在RCC寄存器中使能RTC和LSE(Low-Speed External)晶振模块。

然后,配置RTC的时钟源和预分频器,选择合适的时钟频率。

2.配置RTC时间和日期:通过设置RTC的寄存器来配置当前时间和日期。

需要设置秒、分钟、小时、星期、日期、月份和年份,确保其具有正确的值。

3.启动RTC时钟:设置RTC的控制寄存器,使其开始工作。

可以选择启用或禁用闹钟功能,设置闹钟的时间和日期。

4.读取RTC数据:可以随时读取RTC的时间和日期数据。

读取数据后,可以进行各种计算和处理,如计算两个时间之间的差异、比较时间等。

5.处理RTC中断:可以设置RTC中断来触发一些操作,如闹钟触发时执行一些任务。

需要配置NVIC(Nested Vector Interrupt Controller)中断向量表,使能相应的中断。

6.备份和恢复RTC数据:RTC模块提供了备份寄存器,可以用来存储额外的信息。

可以使用一些特殊的寄存器,如BKP (Backup)寄存器或CPU的系统寄存器来备份和恢复数据。

7.断电维持能力:RTC模块的一个关键特性是其断电维持能力。

即使在断电情况下,RTC模块中的数据仍然能够保持。

可以通过电池供电电路来提供必要的电力。

8.节能模式:可以利用RTC模块的节能模式来降低功耗。

可以选择性地关闭RTC模块的不需要的功能,以减少功耗。

需要注意的是,具体的步骤可能会因芯片型号和开发工具的不同而有所差异。

因此,在使用STM32单片机的RTC时钟之前,需查阅相关的技术文档和参考手册,以了解具体操作步骤和寄存器配置。

以上是使用STM32单片机的RTC时钟的基本步骤。

在实际应用中,可以根据具体需求对RTC进行更多的配置和使用。

stm32芯片时钟(晶振)连接到芯片的 引脚

stm32芯片时钟(晶振)连接到芯片的 引脚

STM32芯片时钟(晶振)连接到芯片引脚一、引言STM32芯片是一款由STMicroelectronics公司生产的32位微控制器,具有高性能、低功耗、丰富的外设和可扩展性等特点。

在STM32芯片中,时钟(晶振)连接到芯片引脚是一个非常重要的部分,直接关系到芯片的工作频率和稳定性。

二、 STM32芯片时钟STM32芯片的时钟系统包括内部RC振荡器、内部RC振荡器、外部晶体振荡器等,其中晶振作为一种最常用的外部时钟源,具有稳定性高、精度好等优点,因此在实际应用中得到了广泛的应用。

三、连接方式STM32芯片中,晶振可以连接到芯片的多个引脚上,通常采用的是双向连接方式,即一个晶振同时连接到芯片的两个引脚上,以提高时钟信号的稳定性和可靠性。

四、连接引脚STM32芯片的不同系列和不同型号,在连接晶振时会有所不同,但基本的连接原理是相通的。

一般来说,连接引脚包括晶振输入引脚(XTAL1)和晶振输出引脚(XTAL2),分别用来输入晶振的信号和输出晶振的信号,并通过外部电路提供稳定的时钟信号给芯片内部的时钟系统。

五、连接建议在实际应用中,连接晶振时需要注意以下几点:1. 选择合适的晶振型号和频率,根据实际需求选择合适的晶振型号和频率,以保证芯片的工作稳定。

2. 连接线路布局合理,尽量减小晶振到芯片引脚的连接长度,减小外界干扰。

3. 使用合适的外围电路,包括对晶振输入引脚和晶振输出引脚的连接电路、滤波电路等。

六、结语正确连接STM32芯片时钟(晶振)到芯片引脚对于芯片的正常工作和稳定性有着重要的意义,希望本文能为您在实际应用中提供一些帮助。

感谢您的阅读。

七、晶振类型和频率选择在选择晶振类型和频率时,需要根据具体的应用需求进行选择。

一般来说,晶振的频率可以选择从几十kHz到几十MHz不等。

对于低功耗应用,可以选择较低频率的晶振,而对于需要高性能的应用,则需要选择较高频率的晶振。

还需要考虑晶振的负载电容和稳定性等因素,以保证晶振在工作时能够提供稳定可靠的时钟信号。

STM32时钟详细配置

STM32时钟详细配置

STM32时钟配置STM32时钟配置步骤// 开启HSI时钟寄存器操作1).开启高速时钟HSE // 设置时钟控制寄存器RCC_CR 位16 置1使能RCC->CR|= 0x00010000;位16 :HSEON:外部高速时钟使能当进入待机和停止模式时,该位由硬件清零,关闭4-16MHz外部振荡器。

当外部4-16MHz 振荡器被用作或被选择将要作为系统时钟时,该位不能被清零。

2).等待高速时钟就绪// 读取时钟控制寄存器RCC_CR位17为1就位while(!(RCC-> CR>>17));位17:HSERDY:外部高速时钟就绪标志由硬件置’1’来指示外部4-16MHz振荡器已经稳定。

在HSEON位清零后,该位需要6个外部4-25MHz振荡器周期清零。

3).设置APB1,APB2,AHB分频系数// 设置时钟配置寄存器RCC_CFGRRCC_CFGR=0x00000400;(AHB :位4-7, (低速)APB1 :位8-10, (高速)APB2 :位11-13)位7:4:HPRE[3:0]:AHB预分频(AHB Prescaler)0xxx:SYSCLK不分频位10:8:PPRE1[2:0]:低速APB预分频(APB1) 100:HCLK 2分频位13:11:PPRE2[2:0]:高速APB预分频(APB2) 0xx:HCLK不分频4).设置PLL倍频// 配置时钟配置寄存器RCC_CFGR 位18-21RCC_CFGR|=7<<18;位21:18:PLLMUL:PLL倍频系数0111:PLL 9倍频输出5).PLL输入时钟源选择// 配置时钟配置寄存器RCC_CFGR 位16RCC_CFGR|=1<<16;位16:PLLSRC:PLL输入时钟源(PLL entry clock source) 1:HSE时钟作为PLL输入时钟。

由软件置’1’或清’0’来选择PLL输入时钟源。

STM32时钟配置方法详解

STM32时钟配置方法详解

一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。

①HSI是高速内部时钟,RC振荡器,频率为8MHz。

②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。

③LSI是低速内部时钟,RC振荡器,频率为40kHz。

④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。

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

二、在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法:如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:①对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。

②对于少于100脚的产品,有2种接法:第1种:OSC_IN和OSC_OUT分别通过10K电阻接地。

此方法可提高EMC性能;第2种:分别重映射OSC_IN 和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。

此方法可以减小功耗并(相对上面)节省2个外部电阻。

三、用HSE时钟,程序设置时钟参数流程:01、将RCC寄存器重新设置为默认值RCC_DeInit;02、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);03、等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp();04、设置AHB时钟RCC_HCLKConfig;05、设置高速AHB时钟RCC_PCLK2Config;06、设置低速速AHB时钟RCC_PCLK1Config;07、设置PLL RCC_PLLConfig;08、打开PLL RCC_PLLCmd(ENABLE);09、等待PLL工作while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)10、设置系统时钟RCC_SYSCLKConfig;11、判断是否PLL是系统时钟while(RCC_GetSYSCLKSource() != 0x08)12、打开要使用的外设时钟RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()四、下面是STM32软件固件库的程序中对RCC的配置函数(使用外部8MHz晶振)/******************************************************************************** Function Name : RCC_Configuration* Description : RCC配置(使用外部8MHz晶振)* Input : 无* Output : 无* Return : 无*******************************************************************************/void RCC_Configuration(void){/*将外设RCC寄存器重设为缺省值*/RCC_DeInit();/*设置外部高速晶振(HSE)*/RCC_HSEConfig(RCC_HSE_ON); //RCC_HSE_ON——HSE晶振打开(ON)/*等待HSE起振*/HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪 {/*设置AHB时钟(HCLK)*/RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB 时钟= 系统时钟/* 设置高速AHB时钟(PCLK2)*/RCC_PCLK2Config(RCC_HCLK_Div1); //RCC_HCLK_Div1——APB2时钟= HCLK/*设置低速AHB时钟(PCLK1)*/RCC_PCLK1Config(RCC_HCLK_Div2); //RCC_HCLK_Div2——APB1时钟= HCLK / 2/*设置FLASH存储器延时时钟周期数*/FLASH_SetLatency(FLASH_Latency_2); //FLASH_Latency_2 2延时周期/*选择FLASH预取指缓存的模式*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 预取指缓存使能/*设置PLL时钟源及倍频系数*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);// PLL的输入时钟= HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x 9/*使能PLL */RCC_PLLCmd(ENABLE);/*检查指定的RCC标志位(PLL准备好标志)设置与否*/while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}/*设置系统时钟(SYSCLK)*/RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//RCC_SYSCLKSource_PLLCLK——选择PLL作为系统时钟/* PLL返回用作系统时钟的时钟源*/while(RCC_GetSYSCLKSource() != 0x08) //0x08:PLL作为系统时钟 {}}/*使能或者失能APB2外设时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph _GPIOB |RCC_APB2Periph_GPIOC , ENABLE);//RCC_APB2Periph_GPIOA GPIOA时钟//RCC_APB2Periph_GPIOB GPIOB时钟//RCC_APB2Periph_GPIOC GPIOC时钟//RCC_APB2Periph_GPIOD GPIOD时钟}五、时钟频率STM32F103内部8M的内部震荡,经过倍频后最高可以达到72M。

STM32单片机RTC时钟的使用方法及步骤

STM32单片机RTC时钟的使用方法及步骤

STM32单片机RTC时钟的使用方法及步骤一、配置RTC模块时钟源RTC模块的时钟源可以选择外部低速晶振(LSE)或者低速内部时钟(LSI)。

通过以下步骤配置RTC时钟源:1.使能外部低速晶振(LSE)或者低速内部时钟(LSI)。

例如,如果使用外部低速晶振,则需要使能相应的GPIO端口,并配置为晶振模式。

2.配置RCC时钟控制寄存器(RCC_CR)和时钟配置寄存器(RCC_CSR)。

二、使能RTC模块时钟1.使能PWR模块时钟和备份寄存器访问。

RCC_APB1ENR,=(1<<28);RCC_APB1ENR,=(1<<27);2.校验并关闭RTC模块。

RCC->BDCR,=RCC_BDCR_RTCEN;PWR->CR,=PWR_CR_DBP;if ((RCC->BDCR & RCC_BDCR_RTCEN) == 0)RCC->BDCR,=RCC_BDCR_RTCEN;3.配置RTC时钟预分频器和提供给RTC的时钟源。

RTC->PRER ,= rtc_prescaler_value << RTC_PRER_PREDIV_S_Pos;RTC->PRER ,= 127 << RTC_PRER_PREDIV_A_Pos;RTC->CR&=~RTC_CR_FMT;三、配置RTC模块时间和日期1.关闭RTC时钟写保护功能。

RTC->WPR=0xCA;RTC->WPR=0x53;RTC->ISR,=RTC_ISR_INIT;while((RTC->ISR & RTC_ISR_INITF) == 0);2.配置RTC的时间和日期寄存器。

RTC->TR ,= (uint32_t)((hours / 10) << RTC_TR_Hours10_Pos);RTC->TR ,= (uint32_t)((hours % 10) << RTC_TR_Hours1_Pos);RTC->TR ,= (uint32_t)((minutes / 10) <<RTC_TR_Minutes10_Pos);RTC->TR ,= (uint32_t)((minutes % 10) <<RTC_TR_Minutes1_Pos);RTC->TR ,= (uint32_t)((seconds / 10) <<RTC_TR_Seconds10_Pos);RTC->TR ,= (uint32_t)((seconds % 10) <<RTC_TR_Seconds1_Pos);RTC->DR ,= (uint32_t)((year / 10) << RTC_DR_YT_Pos);RTC->DR ,= (uint32_t)((year % 10) << RTC_DR_YU_Pos);RTC->DR ,= (uint32_t)((month / 10) << RTC_DR_MT_Pos);RTC->DR ,= (uint32_t)((month % 10) << RTC_DR_MU_Pos);RTC->DR ,= (uint32_t)((day / 10) << RTC_DR_DT_Pos);RTC->DR ,= (uint32_t)((day % 10) << RTC_DR_DU_Pos);3.开启RTC时钟写保护功能。

STM32学习笔记系统时钟和SysTick定时器

STM32学习笔记系统时钟和SysTick定时器

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分频器。

STM32F0系列寄存器操作02RCC时钟配置

STM32F0系列寄存器操作02RCC时钟配置

STM32F0系列寄存器操作02RCC时钟配置RCC(Reset and Clock Control)模块是STM32F0系列微控制器中的一个重要模块,用于配置系统时钟。

在这里,我们将详细介绍如何通过寄存器操作来配置RCC模块。

RCC模块的寄存器位于设备的的地址空间中,通过写入特定的值来配置和控制系统时钟。

以下是与RCC模块相关的一些重要寄存器:1. RCC_CR(RCC Control Register):用于配置内部和外部时钟、使能外部时钟和使能内部时钟等。

2. RCC_CFGR(RCC Configuration Register):用于配置系统时钟源、时钟分频等。

3. RCC_AHBENR(RCC AHB Peripheral Clock Enable Register):用于使能或禁用AHB总线上的外设时钟。

4. RCC_APBENR(RCC APB Peripheral Clock Enable Register):用于使能或禁用APB总线上的外设时钟。

根据需求,我们可以按照以下步骤配置RCC模块:1.确定系统时钟源:使用RCC_CFGR寄存器来选择主时钟源,可以从内部时钟(HSI或HSI48)、外部时钟(HSE或HSE32)或PLL时钟中选择。

2.配置时钟分频:使用RCC_CFGR寄存器来设置HCLK、PCLK1和PCLK2的分频系数,以确定这些时钟频率。

3.使能外设时钟:使用RCC_AHBENR和RCC_APBENR寄存器来使能或禁用需要使用的外设时钟。

下面是一个示例代码,用于配置STM32F0系列微控制器的RCC模块:```c#include "stm32f0xx.h"void RCC_Config(void)//使能外部时钟RCC->CR,=RCC_CR_HSEON;//等待外部时钟稳定while(!(RCC->CR & RCC_CR_HSERDY));//配置PLL时钟RCC->CFGR,=RCC_CFGR_PLLSRC_HSE_PREDIV;RCC->CFGR,=RCC_CFGR_PLLMUL6;//使能PLL时钟RCC->CR,=RCC_CR_PLLON;//等待PLL时钟稳定while(!(RCC->CR & RCC_CR_PLLRDY));//配置系统时钟源为PLL时钟RCC->CFGR,=RCC_CFGR_SW_PLL;//等待系统时钟源切换完成while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);//配置时钟分频RCC->CFGR,=RCC_CFGR_HPRE_DIV1;//AHB时钟不分频RCC->CFGR,=RCC_CFGR_PPRE_DIV2;//APB1时钟分频为2//使能外设时钟RCC->AHBENR,=RCC_AHBENR_GPIOAEN;RCC->APBENR,=RCC_APBENR_TIM2EN;```在这个示例中,首先使能外部时钟(HSE)并等待其稳定,然后配置PLL时钟和分频系数。

STM32全部时钟概述

STM32全部时钟概述

STM32时钟概述:
HSE:high speed external clock signal,高速外部时钟,最常用8M无源晶振,可以2分频或不分频,一般不分频,为8M。

HS I:high speed internal clock signal,高速内部时钟,8M,有温漂。

PLL时钟源:来源于HSE或者HSI/2,一般选HSE为时钟源。

PLLCLK时钟:通过设置PLL的倍频因子,对PLL时钟源进行倍频,倍频因子为:2-16。

一般设为9,则PLLCLK为72M。

(72M为官方推荐的稳定时钟源)。

SYSCLK:系统时钟,可来源于HSE、HSI、PLLCLK,一般设置SYSCLK=PLLCLK=72Mhz。

HCLK:AHB总线时钟(也有的说APB总线时钟),可分频,一般不分频,即HCLK=SYSCLK=72M。

PCLK2:APB2总线时钟,由HCLK经过APB2预分频器得到,一般1分频,PCLK2=HCLK=72M。

PCLK1:APB1总线时钟,由HCLK经过APB1预分频器得到,一般2分频,PCLK1=HCLK/2=36M。

RTC时钟:来源于HSE/128、LSE、LSI(一般40KHZ),独立的看门狗时钟由LSI提供。

MCO时钟输出:由PA8复用所得,可以对外提供时钟,可以检查所配置好的时钟(结合示波器使用),可来源于PLLCLK/2 SYSCLK HSE HSI。

STM32时钟配置方法详解

STM32时钟配置方法详解

STM32时钟配置方法详解STM32是意法半导体(STMicroelectronics)公司推出的一系列32位Flash微控制器,被广泛应用于各种嵌入式系统中。

时钟是STM32微控制器的核心部分,正确配置时钟可以确保系统正常工作并达到预期的性能。

本文将详细介绍STM32时钟配置的方法。

1.时钟源:STM32微控制器提供了多个时钟源,包括内部时钟(HSI、LSI)和外部时钟(HSE、LSE)。

其中,HSI(高速内部时钟)是一个高频率(通常为8MHz)的内部RC振荡器,适用于低功耗应用;LSI(低速内部时钟)是一个低频率(通常为40kHz)的内部RC振荡器,用于RTC(实时时钟)模块;HSE(高速外部时钟)是一个外接的高频晶振,用于提供更精确的时钟信号;LSE(低速外部时钟)是一个外接的低频晶振,适用于RTC模块。

2.主频和系统时钟:主频是指CPU的时钟频率,系统时钟是指STM32微控制器的总线时钟,包括AHB(高性能总线)、APB1(低速外设总线)和APB2(高速外设总线)。

在进行STM32时钟配置之前,需要按照以下几个步骤来完成。

1.启用对应的时钟源:根据具体需求,选择合适的时钟源并启用相应的时钟。

可以通过设置RCC_CR寄存器和RCC_APB1ENR/RCC_APB2ENR寄存器来实现。

例如,要使用HSE作为时钟源,需要首先启用HSE时钟。

2.配置时钟分频器:为了使系统时钟不超过芯片规格要求的最大频率,需要对时钟进行分频。

分频器有两个,即AHB分频器和APB分频器。

可以通过设置RCC_CFGR寄存器来实现。

例如,将AHB分频器设置为8,将APB1和APB2分频器分别设置为4,可以将主频分别分频为8MHz、32MHz和64MHz。

3.等待时钟稳定:当启用外部时钟源时,需要等待时钟稳定。

可以通过读取RCC_CR寄存器的特定标志位来判断时钟是否稳定。

4. 配置Flash存储器的延时:根据主频的不同,需要设置Flash存储器的访问延时,以确保正常读写数据。

stm32几种时钟控制介绍,含原理图

stm32几种时钟控制介绍,含原理图

stm32几种时钟控制介绍,含原理图本文提到的有以下内容:• 时钟系统与总线矩阵• SysTick系统定时器• RTC实时时钟• 看门狗定时器• 通用定时器一、时钟系统与总线矩阵stm32F4的时钟树如下图所示:在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。

HSI是高速内部时钟,RC振荡器,频率为8MHz。

HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。

LSI是低速内部时钟,RC振荡器,频率为40kHz。

LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。

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

我们在学习51单片机的时候,其内部是没有晶振的,而stm32是有的。

stm32可以通过RCC(时钟控制寄存器)对时钟进行参数配置以及使能。

我们还可以通过修改system_stm32f4xx.c文件,来配置上述时钟树上的一些分频、倍频参数,得到理想的频率。

在单片机系统中,CPU和总线以及外设的时钟设置是非常重要的,因为没有时钟就没有时序,组合电路需要好好理解清楚。

我们先来看一下总线矩阵。

片上总线标准种类繁多,而由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。

AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。

二者分别适用于高速与相对低速设备的连接。

一般性的时钟设置需要先考虑系统时钟的来源,是内部RC还是外部晶振还是外部的振荡器,是否需要PLL。

然后考虑内部总线和外部总线,最后考虑外设的时钟信号。

遵从先倍频作为CPU时钟,然后在由内向外分频,下级迁就上级的原则。

stm32 时钟频率函数

stm32 时钟频率函数

STM32 的时钟频率可以通过不同的函数进行配置和控制。

以下是一些常用的函数和宏定义,用于配置和获取STM32 的时钟频率:1. `void SystemClock_Config(void);`这个函数用于配置系统时钟频率。

它可以根据不同的参数设置HSI、HSE、PLL 等,以获得所需的系统时钟频率。

2. `void SystemCoreClockUpdate(void);`这个函数用于更新系统核心时钟频率。

它通过调用`SystemClock_Config()` 函数重新配置系统时钟,以确保系统核心时钟频率的正确性。

3. `uint32_t SystemCoreClock;`这个全局变量存储当前的系统核心时钟频率。

通过调用`SystemCoreClockUpdate()` 函数可以更新该变量的值。

4. `#define HSI_V ALUE (8000000UL)`这个宏定义用于设置HSI(High Speed Internal)的频率值。

可以根据需要进行调整。

5. `#define HSE_V ALUE (8000000UL)`这个宏定义用于设置HSE(High Speed External)的频率值。

可以根据需要进行调整。

6. `#define PLL_M (8)`这个宏定义用于设置PLL(Phase-Locked Loop)的分频因子。

可以根据需要进行调整。

7. `#define PLL_N (336)`这个宏定义用于设置PLL 的倍频因子。

可以根据需要进行调整。

8. `#define PLL_P (2)`这个宏定义用于设置PLL 的分频因子。

可以根据需要进行调整。

9. `#define PLL_Q (7)`这个宏定义用于设置PLL 的分频因子。

可以根据需要进行调整。

使用这些函数和宏定义,您可以方便地配置和控制STM32 的时钟频率,以满足您的应用需求。

STM32时钟配置方法详解

STM32时钟配置方法详解

STM32时钟配置方法详解时钟树是STM32微控制器中一系列时钟源和时钟分频器的组成部分。

时钟树包括系统时钟、外设时钟和内核时钟。

系统时钟用于驱动整个微控制器系统的核心,外设时钟用于驱动各种外设,内核时钟用于驱动CPU的运算。

在进行时钟配置之前,首先需要了解系统所需的时钟频率。

在STM32中,系统时钟可以通过多种方式进行配置,例如使用外部晶体、外部时钟、内部RC振荡器或者PLL(锁相环)等方式。

外部晶体是一种常用的时钟源,可以提供高精度的时钟频率。

在使用外部晶体时,首先需要设置PLL的时钟源为外部晶体,并设置PLL输入除频器的分频系数。

然后,再根据系统所需的时钟频率,设置PLL的倍频系数,以得到最终的系统时钟频率。

外部时钟是从外部提供的时钟信号,一般用于测试和调试。

使用外部时钟时,需要设置PLL的时钟源为外部时钟,并设置PLL的倍频系数,以得到所需的系统时钟频率。

内部RC振荡器是一种低成本的时钟源,但是其频率不如外部晶体稳定和精确。

在使用内部RC振荡器时,需要设置PLL的时钟源为内部RC振荡器,并设置PLL的倍频系数,以得到所需的系统时钟频率。

PLL是一种用于产生稳定高频时钟的电路,可以从一个低频时钟源产生一个高频时钟源。

使用PLL时,需要设置其输入时钟源和倍频系数。

系统时钟的分频系数可以通过RCC_CFGR寄存器进行设置。

RCC_CFGR寄存器的各个位域用于配置系统时钟的分频系数,包括分频因子、APB1的分频系数、APB2的分频系数等。

外设时钟是用于驱动外设的时钟,可以由系统时钟分频得到。

外设时钟的分频系数可以通过RCC_CFGR寄存器及各个外设的控制寄存器进行设置。

内核时钟是用于驱动CPU的运算的时钟。

在STM32微控制器中,CPU 时钟可以由系统时钟分频得到,分频系数可以通过RCC_CFGR寄存器和FLASH_ACR寄存器进行设置。

除了上述方法之外,STM32还可以使用时钟配置工具进行时钟配置。

stm32的时钟电路的工作原理

stm32的时钟电路的工作原理

STM32的时钟电路工作原理
一、时钟源
STM32的时钟源主要来自于内部振荡器(HSI)和外部晶振(HSE)。

HSI是高速内部振荡器,可以提供一个高精度的时钟信号,但是它的频率受到MCU内部结构的影响,通常不太稳定。

而HSE是高速外部振荡器,由一个外部晶振提供时钟信号,其频率稳定且精度高。

二、时钟分频
STM32的时钟分频器可以将时钟源的频率降低到MCU可以接受的频率。

分频器可以配置为不同的分频值,从而得到不同的时钟频率。

例如,如果HSE的频率为8MHz,经过8分频后,可以得到1MHz 的时钟频率。

三、时钟监控系统
STM32的时钟监控系统可以监控MCU的时钟系统状态。

如果系统检测到内部振荡器或外部晶振停止工作,监控系统会立即重启或切换到其他可用源。

这可以保证MCU在时钟源出现故障时仍然能够正
常工作。

四、RTC(实时时钟)
RTC是STM32中一个重要的功能模块,它使用一个独立的低速内部振荡器(LSI)作为时钟源,以确保时间的准确性和稳定性。

RTC 可以提供秒、分、时、日、周、月、年的时间信息,并且具有闰年补偿功能。

此外,RTC还可以提供一个可编程的闹钟功能,用于定时唤醒MCU。

总结起来,STM32的时钟电路由多个部分组成,包括时钟源、时钟分频、时钟监控系统和RTC。

这些部分协同工作,确保MCU具有准确和稳定的时钟信号,并能够正常工作。

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

实验4 系统时钟实验
上一章,我们介绍了STM32 内部系统滴答定时器,该滴答定时器产生的延时非常精确。

在本章中,我们将自定义RCC系统时钟,通过改变其倍频与分频实现延时时间变化,实现LED灯闪烁效果。

通过本章的学习,你将了解 RCC系统时钟的使用。

本章分为以下学习目标:
1、了解 STM32 的系统构架。

2、了解 STM32 的时钟构架。

3、了解 RCC 时钟的操作步骤。

1.1 STM32 的系统构架
STM32 的时钟比较复杂,它可以选择多种时钟源,也可以选择不一样的时钟频率,而且在系统总线上面,每条系统的时钟选择都是有差异的。

所以想要清楚的了解 STM32 的时钟分配,我们先来了解一下 STM32 的系统构架是什么样的。

从上图我们知道,RCC 时钟输出时钟出来,然后经过 AHB 系统总线,分别
分配给其他外设时钟,而不一样的外设,是先挂在不一样的桥上的。

比如: ADC1、ADC2、 SPI1、GPIO 等都是挂在 APB2 上面,而有些是挂在 APB1上面,所以,虽然它们都是从 RCC 获取的时钟,但是它们的频率有时候是不一样的。

1.2 STM32 的时钟树
STM32 单片机上电之后,系统默认是用的时钟是单片机内部的高速晶振时钟,而这个晶振容易受到温度的影响,所以晶振跳动的时候不是有一定的影响,所以一般开发使用的时候都是使用外部晶振,而且单片机刚启动的时候,它的时钟频率是 8MHZ,而 STM32 时钟的最高频率是 72MHZ,所以单片机一般开机之后运行的程序是切换时钟来源,并设置时钟频率。

大家可能有点疑惑,在第一章到第三章之中,我们并没有看到单片机开机之后设置时钟来源和时钟频率的。

其实在使用库函数的时候,其实在库函数启动文件里面,是帮助我们把时钟频率设置到 72MHZ 了。

大家可以打开一个库函数工程,在 system_stm32f10x.c 的第 106行,它定义了一个 SYSCLK_FREQ_72MHz:
#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE HSE_VALUE */
#define SYSCLK_FREQ_24MHz 24000000
#else
#define SYSCLK_FREQ_72MHz 72000000
然后在下面的程序中,根据这个 SYSCLK_FREQ_72MHz 定义,它默认设置成
72MHZ。

接下来我们来看一下具体的 RCC 时钟树:
从上图我们可以知道,STM32 的时钟一共有可以有 4 个晶振源:
1) 内部自带的高速时钟:HIS。

单片机启动之后默认使用的时钟来源。

2) 外部高速时钟:HSE。

大多数时钟时钟的是 8MHZ 的晶振。

3) 外部低速时钟:LSE。

主要用来给单片机内部的 RTC 提供时钟。

4) 内部的低速时钟:LSI。

主要用来给单片机内部的 RTC 和看门狗提供时钟。

而 STM32 的系统时钟源,有 3 个时钟来源:
1) 直接来自内部的高速时钟 HIS。

2) 直接来自外部的高速时钟 HSE。

3) 将 HIS 或者 HSE 进行处理,倍频之后的 PLL 时钟。

注意:从图上,大家可以看到很多外设时钟都有一个外设时钟使能,以当我们使用相应的外设的时候,注意要将时钟使能打开。

因为在单片机启动之后,为了降低单片机的功耗,这些外设时钟使能是默认关闭的。

1.3 STM32 设置 RCC 时钟的步骤
以设置外部高速时钟作为 PLL 输入,然后用 PLL 作为时钟源为例子,具体操作步骤如下:
1) 复位 RCC 时钟。

2) 打开 HSE 外部高速时钟。

3) 检测 HSE 外部高速时钟是否开启成功。

4) 设置 FLASH 的读写。

(这个是用来支持程序对 FLASH 的读写的,必须设置。


5) 设置 AHB 总线的分频,还有 APB1 和 APB2 的分频。

注意,AHB 和 APB2 最大频率是 72MHZ,APB1 的最大频率是才 36MHZ。

6) 设置 HSE 外部高速时钟作为 PLL 时钟的时钟输入(注意 HSE 外部高速时钟作为 PLL 时钟输入时,可以直接输入,也可以作二分频之后再输入,要选择输入的方式。


7) 设置 PLL 时钟的倍频的倍数。

8) 打开 PLL 时钟的使能。

9) 等待 PLL 时钟开启成功。

10) 将系统时钟源设置为 PLL 时钟。

11) 等待时钟源切换成功。

1.4 V3.5 库函数介绍
1、RCC_DeInit()函数
复位函数是将RCC 时钟复位为内部高速时钟作为输入,让我们能够进行时钟设置操作。

2、RCC_HSEConfig()函数
这个函数是设置HSE 外部高速时钟的函数,可以开启、关闭、和旁路。

3、RCC_WaitForHSEStartUp()函数
4、RCC_HCLKConfig()函数
5、RCC_PCLK2Config()函数
6、RCC_PCLK1Config()函数
7、RCC_PLLConfig()函数
8、RCC_PLLCmd()函数
9、RCC_GetFlagStatus()函数
这个函数可以用来获取各种状态标志,以检测设置是否成功。

10、RCC_SYSCLKConfig()函数
11、RCC_GetSYSCLKSource()函数
1.5 RCC 时钟例程程序
1)主函数
/**************************************************************************** * Function Name : main
* Description : Main program.
* Input : None
* Output : None
* Return : None
****************************************************************************/ int main()
{
LED_Init(); //LED端口初始化
RCC_HSE_Configuration();// 自定义系统时间,通过修改里面的倍频及分频即可
while(1)
{
GPIO_SetBits(GPIOC,LED);
delay_ms(500);//精确延时为0.5s
GPIO_ResetBits(GPIOC,LED);
delay_ms(500);//精确延时为0.5s
}
}
程序下载到板子上面之后的程序效果是: LED闪烁时间本来延时是500ms,由于RCC系统时钟频率改变,使得LED闪烁时间变为1秒。

2)RCC 时钟设置函数
/****************************************************************************** *
* 函数名: RCC_HSE_Configuration
* 函数功能: 自定义系统时钟,可以通过修改PLL时钟源和倍频系数实现时钟调整
* 输入: 无
* 输出: 无
******************************************************************************* /
void RCC_HSE_Configuration() //自定义系统时间(可以修改时钟)
{
RCC_DeInit(); //将外设RCC寄存器重设为缺省值
RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE)
if(RCC_WaitForHSEStartUp()==SUCCESS) //等待HSE起振
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)
RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)
RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2)
RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);//设置PLL时钟源及倍频系数
RCC_PLLCmd(ENABLE); //使能或者失能PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCC标志位设置与否,PLL就绪
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟(SYSCLK)
while(RCC_GetSYSCLKSource()!=0x08);//返回用作系统时钟的时钟源,0x08:PLL作为系统时钟
}
这个函数的作用是:设置单片机的时钟来源为 HSE 外部高速时钟,并根据输入频率参数设置相应的频率。

要注意的是设置的输入频率参数一定要是 8 的倍数,并且是从 4 倍到 9 倍的频率数值。

相关文档
最新文档