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输入时钟源。

  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 倍的频率数值。

相关文档
最新文档