STM32日记之时钟3
stm32时钟概念
STM32时钟概念1. 引言STM32是一款由意法半导体(STMicroelectronics)推出的32位单片机系列,广泛应用于各种嵌入式系统中。
在STM32的开发过程中,时钟是一个非常重要的概念,它影响着系统的性能、功耗和稳定性。
本文将详细介绍STM32时钟概念中的关键概念,包括时钟树、主时钟源、系统时钟等,并解释其定义、重要性和应用。
2. 时钟树2.1 定义时钟树是指将外部晶振或者其他主时钟源通过分频器、倍频器等电路分配给各个模块和外设的一系列信号链路。
在STM32中,时钟树起到了提供精确时间基准以及同步各个模块工作的作用。
2.2 重要性时钟树在STM32系统中扮演着至关重要的角色。
首先,它为整个系统提供了统一的时间基准,保证了各个模块之间工作的协调性和稳定性。
其次,通过合理设计时钟树可以提高系统的灵活性和可扩展性,使得不同模块可以根据需求选择不同的时钟源。
此外,时钟树还可以通过合理的分频和倍频设置来控制系统的功耗。
2.3 应用在STM32开发中,我们经常需要配置时钟树来满足不同系统需求。
下面是一些常见的应用场景:•配置系统时钟源:可以选择外部晶振、内部RC振荡器或者其他外设作为系统时钟源,根据实际需求进行配置。
•分频和倍频设置:可以通过分频器和倍频器来调整系统时钟频率,从而满足不同模块对时钟精度和速度的要求。
•使能外设时钟:每个外设都有自己的时钟使能位,需要根据实际使用情况使能或禁用相应的外设时钟。
3. 主时钟源3.1 定义主时钟源是指供给STM32系统整体工作的主要时钟信号源。
在STM32中,主要有以下几种主时钟源:•外部晶振(HSE):通过将外部晶振连接到MCU上提供稳定的高精度时钟信号。
•内部RC振荡器(HSI):MCU内部集成了一个低功耗高精度的RC振荡器。
•PLL锁相环:通过对主时钟源进行倍频和分频,可以得到更高频率的时钟信号。
3.2 重要性主时钟源是整个STM32系统的基础,它直接影响着系统的性能和稳定性。
stm32时钟概念
stm32时钟概念(实用版)目录1.STM32 时钟概念概述2.STM32 时钟的分类3.STM32 时钟的配置方法4.STM32 时钟的应用实例5.总结正文一、STM32 时钟概念概述STM32 时钟是指基于 STM32 单片机的时钟系统,STM32 单片机是一款高性能、低功耗的微控制器,内部集成了多种时钟源,可为系统提供多样化的时钟信号。
时钟系统是 STM32 单片机的重要组成部分,对系统的稳定性和准确性具有重要影响。
二、STM32 时钟的分类STM32 时钟可分为以下几类:1.高速时钟(HCLK):高速时钟是 STM32 单片机内最快的时钟,通常用于处理高速信号,如高速串行通信、音频信号处理等。
2.高速低功耗时钟(HCLK_LP):高速低功耗时钟是高速时钟的低功耗版本,可在降低功耗的同时保持较高的时钟频率。
3.中速时钟(MCLK):中速时钟是 STM32 单片机内部时钟信号的默认选择,适用于大多数应用场景。
4.低速时钟(LCLK):低速时钟是 STM32 单片机内部最慢的时钟信号,适用于对时钟频率要求不高的场景,如按键扫描等。
5.实时时钟(RTC):实时时钟是 STM32 单片机内部的实时时钟模块,可用于提供年月日时分秒等时间信息。
三、STM32 时钟的配置方法STM32 时钟的配置方法主要包括以下步骤:1.配置时钟源:根据应用需求选择合适的时钟源,如高速时钟源(HSE)或高速低功耗时钟源(HSI)等。
2.配置时钟预分频:根据实际需求,对时钟源进行预分频,以得到所需的时钟频率。
3.配置时钟倍频:对预分频后的时钟信号进行倍频,以进一步提高时钟频率。
4.配置时钟输出:将配置好的时钟信号输出到相应的时钟引脚。
5.配置时钟使能:使能所需的时钟信号。
四、STM32 时钟的应用实例以下是一个基于 STM32F103 系列的实时时钟(RTC)实验例程:1.首先,配置 RTC 时钟源为高速时钟源(HSE)。
stm32单片机时钟
stm32单⽚机时钟stm32 单⽚机时钟学习以及分析1 引⾔:单⽚机(Microcontrollers),采⽤超⼤规模集成电路技术把具有数据处理能⼒的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O⼝和中断系统、定时器/计数器等功能(可能还包括显⽰驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到⼀块硅⽚上构成的⼀个⼩⽽完善的微型计算机系统,在⼯业控制领域⼴泛应⽤。
单⽚机时钟可以说如同⼈的⼼脏那样重要,我们在⼼脏的搏动下进⾏⾃⼰的⽣命活动,同样的单⽚机在时钟下进⾏⾃⼰的控制活动。
2 时钟的分类:单⽚机的时钟分为内部时钟与外部时钟:⼀般⽽⾔,内部时钟集成在芯⽚内部(RC振荡电路),其精度⽐较低;外部时钟,顾名思义,存在于芯⽚外部(晶体或陶瓷谐振器),可以为系统提供精确的时钟。
晶振是给单⽚机提供⼯作信号脉冲的,如图所⽰的为外部晶振,频率为4MHz,我们常⽤的晶振频率为12MHz,单⽚机⼯作时,是⼀条⼀条地从RoM中取指令,然后⼀步⼀步地执⾏。
单⽚机访问⼀次存储器的时间,称之为⼀个机器周期,这是⼀个时间基准。
—个机器周期包括12个时钟周期。
如果⼀个单⽚机选择了12MHz晶振,它的时钟周期是1/12us,它的⼀个机器周期是12×(1/12)us,也就是1us。
有些晶振的频率并数是整数,如:11.0592MHz的晶振。
单⽚机在进⾏串⾏通信时,常⽤的波特率为1200,2400,4800,9600,115200等,为了适应单⽚机的串⼝通讯波特率的计算⽽来的。
⽤11.0592MHz晶振经过相应的分频或者倍频后刚好能够得出⼀个整数的波特率,这样在上位机和下位机的同步⽅⾯⽐较⽅便。
3 stm32的时钟来源这⾥以stm32f1系列的芯⽚为例。
由上⾯可知,系统的时钟来源有内部时钟与外部时钟,详细的来说stm32f1有五个时钟源:HSI(⾼速内部时钟)HSE(⾼速外部时钟)LSI(低速内部时钟)LSE(低速外部时钟)PLL(锁相环倍频输出)每⼀个时钟都可以独⽴的开启与关闭。
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的时钟系统时钟是什么?时钟通常是振荡器(如晶振)产生的特定频率的方波信号,时钟周期是时钟频率的倒数,时钟频率1MHz时钟周期为1/1000000=1us。
时钟周期是MCU处理指令的最小时间单元,每个程序指令都需要若干个时钟周期,MCU的时钟频率越快,完成一个指令的时间就越短,速度就越快。
时钟是MCU运行的基础,好比MCU的脉搏,是MCU性能的重要参数。
每个MCU 都是在某个特定的时钟频率下进行工作的,如C51单片机时钟频率为12MHz,而STM32F103 的系统时钟频率是72MHz。
STM32的时钟系统STM32时钟频率较高,时钟越快功耗越大,同时抗电磁干扰能力也会越弱。
而且STM32外设非常多,而通常外设是不需要像系统时钟那么高的频率的,比如看门狗和RTC 只需要几十K的时钟即可。
另外实际使用的时候通常只会用到有限的几个外设,STM32可以只给需要启动的外设分配时钟,以此来降低功耗。
由此可看出STM32 的时钟系统较为复杂,它采用了多个时钟源的方法来解决这些问题。
STM32 有4个独立时钟源:HSI、HSE、LSI、LSE。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
其中LSI是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源而独立使用,HSI高速内部时钟 HSE高速外部时钟 PLL锁相环时钟这三个经过分频或者倍频作为系统时钟来使用基本时钟源(图中绿色箭头指出):(1)HSI高速内部时钟,RC振荡器,8MHz。
(2)HSE高速外部时钟,石英/陶瓷谐振器,8MHz。
(3)LSI低速内部时钟,RC振荡器,40kHz。
STM32系统时钟配置
STM32系统时钟配置STM32 在使用不同时钟晶振时,需要对系统时钟进行配置。
下面以16MHz晶振产生72MHz时钟为例进行说明。
由于STM32可进行整数倍倍频,及可选是否2分频。
因而选用16MHz 晶振时,先2分频,再倍频9倍,即可倍频为72MHz。
①查找SystemInit() 函数,即系统时钟设置:图1②进入 SetSysClockTo72() 函数,如果要设置其他频率,进入对应的频率即可,如SetSysClockTo48()。
③参考 STM32中文参考手册的6.3.2时钟配置寄存器(RCC_CFGR)。
如“位17PLLXTPRE ” 所述:HSE分频器作为PLL输入(HSE divider for PLL entry)由软件置’1’或清’0’来分频HSE后作为PLL输入时钟。
只能在关闭PLL时才能写入此位。
0:HSE不分频1:HSE 2分频因而,RCC_CFGR 寄存器的位17 应置“1”。
④如图2红色框中所示,RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9|RCC_CFGR_PLLXTPRE);添加红色字部分即可完成2分频,则可将16MHz的时钟分频为8MHz。
其实,查找RCC_CFGR_PLLXTPRE宏定义可知:#define RCC_CFGR_PLLXTPRE ((uint32_t)0x00020000)实际上就是将位 17置1。
而RCC_CFGR_PLLMULL9中的9即是倍频倍数。
(8*9=72 MHz)图2⑤如图3所示,全局查找72000000(按住Ctrl+Shift+F,输入72000000),找到SYSCLK_FREQ_72MHz 的宏定义,将其注释取消。
STM32入门系列-STM32时钟系统,时钟使能配置函数
STM32⼊门系列-STM32时钟系统,时钟使能配置函数 之前的推⽂中说到,当使⽤⼀个外设时,必须先使能它的。
怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考《STM32F10x中⽂参考⼿册》“复位和时钟控制(RCC)”章节,其中有详细的寄存器介绍。
固件库已经把时钟相关寄存器的使能配置都封装好,放在stm32f10x_rcc.c和stm32f10x_rcc.h中。
只需要打开stm32f10x_rcc.h⽂件,会发现有很多的宏定义和时钟使能函数的声明。
这些时钟函数可⼤致分为三类。
⼀类是外设时钟使能函数,⼀类是时钟源和倍频因⼦配置函数,还有⼀类是外设复位函数。
当然还有⼏个获取时钟源配置的函数。
下⾯就来简单介绍下这些函数的使⽤。
⾸先看⼀下时钟使能函数,时钟使能函数包括外设时钟使能和时钟源使能。
外设时钟使能相关函数如下:void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);上⾯3个时钟使能函数也正是STM32的3条总线(这个在前⾯介绍存储器与寄存器章节讲过)。
由于STM32的外设都是挂接在AHB和APB 总线上的,所以要使能外设时钟,也就是使能对应外设所挂接的总线时钟。
⽐如GPIO外设它是挂接在APB2总线上的,如果使⽤GPIO外设,就需要先使能APB2总线时钟,使能时钟代码如下。
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph,FunctionalState NewState);要想哪个外设挂接在哪个总线上呢,可以通过STM32中⽂参考⼿册查找,还可以在固件库stm32f10x_rcc.h⽂件中查找。
STM32中的时钟
外部时钟晶体振荡器最好选择8MHz晶振,无论是库函数,还是Keil默
认配置启动文件时钟配置均是按照外部晶体振荡器8MHz来进行的配置,系
统时钟72MHz,如果采用其他型号的晶体震荡器振还需要自己配置时钟树,
对于新手来说可能存在一定的困难。
STM32中的时钟
下面就以STM32开发板中最常见的STM32F103系列芯片的时钟为例,
介绍一下STM32中的时钟。
时钟作用
说到时钟,你一定会问,这是用来计时的吗?没错,是用来计时的,但这
只是它在STM32中的一项功能而已,下面就为你列出了时钟的具体功能。
计时作用(供给某些计数器统计时间);
控制时序(串口数据的传输,只能一位一位的传输);
CSS时钟安全监测单元当外部时钟意外故障,CSS在短时间内切换到内
部高速时钟使单片机工作不中断
RTCCLK实时时钟时钟源选择选择锁相环倍频器时钟源128分频作为实
时时钟时钟源选择外部低速时钟作为实时时钟时钟源选择内部低俗时钟作为
实时时钟时钟源
MCO时钟输出控制锁相环时钟2分频输出内部低俗时钟输出内部高速时
控制信号(将时钟的上升下降沿作为独特的控制标志)。
STM32时钟模型
STM32内部时钟树
时钟源
时钟源就是产生时钟的电路啦,我们来一起看一下,什幺样的电路可以产
生时钟。
STM32中的时钟源分为以下五种:
低速内部时钟LSI:频率为40kHz;
高速内部时钟HSI:频率为8MHz;
低速外部时钟OSC_32:频率为32.7678kHz;
钟输出系统时钟输出
关于APB1、APB2时钟
STM32单片机外设挂接在APB1、APB2两个桥上,但两个桥允许的始终
stm32时钟概念
stm32时钟概念
在STM32微控制器中,时钟是控制系统时序和同步的重要元件。
时钟通过提供时钟信号来驱动计时器、外设和处理器核心等,实现数据传输和操作的同步。
STM32微控制器使用了多种类型的时钟,包括系统时钟、高
速外设时钟、低速外设时钟和RTC(实时时钟)时钟。
以下
是对每种时钟的概念的简要描述:
1. 系统时钟:
系统时钟(SYSCLK)是微控制器所有部分的主时钟源,它
控制处理器核心以及许多外设的运行。
系统时钟的频率可以通过配置寄存器来选择,通常是通过增加倍频器或分频器来实现。
2. 高速外设时钟(HCLK):
高速外设时钟是系统时钟分频得到的一个时钟,它驱动一些
对实时性要求较高的外设,例如DMA(直接内存访问控制器)和GPIO(通用输入/输出端口)等。
3. 低速外设时钟(PCLK):
低速外设时钟也是通过系统时钟分频得到的一个时钟,它驱
动一些低速外设,如USART(通用异步收发传输器)和I2C (串行通信接口)等。
4. RTC时钟:
RTC时钟是由外部低速晶体振荡器提供的时钟,用于实时时钟和日历功能。
它通常用于实现计时、日期和闹钟等功能。
时钟源的选择和设置可以通过微控制器的时钟控制寄存器来完成,这些寄存器提供了配置时钟的选项。
根据具体的应用需求,可以选择不同的时钟源和频率来优化系统性能和功耗。
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数字时钟课程设计一、课程目标知识目标:1. 学生能理解STM32的内部时钟结构和定时器工作原理;2. 学生能掌握利用STM32设计数字时钟的基本步骤和方法;3. 学生能了解数字时钟的显示原理,并掌握与STM32定时器相结合的编程技巧;4. 学生能解释数字时钟在实际应用中的重要性。
技能目标:1. 学生能运用C语言进行STM32定时器的编程;2. 学生能通过调试工具解决数字时钟编程中的问题;3. 学生能设计并实现一个具有基本功能的数字时钟,包括时、分、秒显示和闹钟功能;4. 学生能对所设计的数字时钟进行测试和优化。
情感态度价值观目标:1. 学生培养对电子制作的兴趣,增强实践操作的自信心;2. 学生培养团队协作意识,学会在项目中相互沟通、共同解决问题;3. 学生通过数字时钟设计,认识到技术与生活的紧密联系,激发创新意识;4. 学生培养严谨的科学态度,注重实验数据的准确性和程序的可维护性。
二、教学内容1. STM32内部时钟结构:介绍STM32的时钟树,讲解时钟源、时钟分频、时钟使能等概念,为学生设计数字时钟提供基础理论知识。
2. 定时器工作原理:详细讲解STM32定时器的工作原理,包括计数器、预分频器、自动重装载寄存器等组成部分,使学生了解定时器在数字时钟中的作用。
3. C语言编程:回顾与定时器编程相关的C语言知识,包括数据类型、运算符、控制语句等,为编写数字时钟程序打下基础。
4. 数字时钟设计步骤:按照以下步骤组织教学内容:a. 硬件设计:讲解如何使用STM32最小系统板,选择合适的显示屏和驱动芯片,连接电路;b. 软件设计:介绍定时器初始化、中断处理、时间计算等编程方法;c. 程序调试:指导学生使用调试工具,如Keil、ST-Link等,进行程序调试;d. 测试与优化:要求学生完成数字时钟设计后进行功能测试,并根据测试结果进行优化。
5. 教材章节关联:教学内容与教材第3章“STM32定时器”和第5章“STM32中断与事件”相关,结合实例进行讲解,使学生更好地掌握相关知识。
STM32学习手记④TIM3上溢出定时
STM32学习手记④-TIM3上溢出定时TIM3是属于通用定时器,程序中采用APB1的时钟(PCLK1),72MHz。
程序中TIM3采取上溢出,即0—ARR时溢出。
上述程序的TIM3的频率为(PCLK1*2)/(36000-1+1)=2KHz,其中PCLK1为36MHz,故计数2000次为1s使用定时器定时的步骤:1、在RCC里打开相应的定时器时钟2、在NVIC里打开相应的中断3、在TIMx_Configuration()进行相应的设置,大致步骤为a)TIM_TimeBaseStructure.TIM_Period = 2000-1; // 自动重装载寄存器周期的值(定时时间) 累计 2000个频率后产生个更新或者中断(也是说定时时间到),也就是ARR的值b)TIM_TimeBaseStructure.TIM_Prescaler=36000-1;//时钟预分频数例如:时钟频率=72M/(时钟预分频+1)c)TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; //定时器模式向上计数d)TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时间分割值e)TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//初始化定时器3f)TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //打开中断溢出中断g)TIM_Cmd(TIM3, ENABLE);//打开定时器/************************************************ *****************************例程名称:TIM3硬件连接:指示灯连接 PE0功能描述:用TIM3定时1s,指示灯闪烁一下**/#include "stm32f10x_lib.h"/************************************************ ******************************************* 函数名称:void RCC_Configuration()* 功能描述:复位和时钟控制配置* 参数:无* 返回值:无* 全局变量:无* 全局静态变量:无* 局部静态变量:无************************************************* *****************************************/void RCC_Configuration(){ErrorStatus HSEStartUpStatus; //定义外部高速晶振启动状态枚举变量RCC_DeInit(); //复位RCC外部寄存器到默认值 RCC_HSEConfig(RCC_HSE_ON); //打开外部高速晶振HSEStartUpStatus=RCC_WaitForHSEStartUp(); //等待外部高速时钟准备好if(HSEStartUpStatus==SUCCESS){ //外部高速时钟已经准备好FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enab le); //开启FLASH预读缓冲功能,加速FLASH的读取。
stm32时钟概念
stm32时钟概念摘要:1.STM32 时钟概念概述2.STM32 时钟的分类3.STM32 时钟的配置方法4.STM32 时钟的应用实例5.总结正文:一、STM32 时钟概念概述STM32 时钟是指基于STM32 单片机的实时时钟(Real-Time Clock,RTC)功能。
实时时钟功能是指单片机内部集成的一个用于提供时间信息的时钟,它可以提供年、月、日、星期、时、分、秒等时间信息。
STM32 时钟广泛应用于各种嵌入式系统中,如智能家居、自动控制、消费电子等领域。
二、STM32 时钟的分类STM32 时钟主要分为以下两类:1.RTC 时钟:RTC 时钟是STM32 单片机内部集成的实时时钟,它可以提供年、月、日、星期、时、分、秒等时间信息。
RTC 时钟可以通过实时时钟控制器(RTC)和实时时钟寄存器(RTC Register)进行配置和控制。
2.EXTI 时钟:EXTI 时钟是STM32 单片机外部中断时钟,它可以通过外部中断控制器(EXTI)进行配置和控制。
EXTI 时钟主要用于实现对外部事件的实时响应和处理,如按键、传感器等外部事件的检测。
三、STM32 时钟的配置方法STM32 时钟的配置方法主要包括以下几个步骤:1.配置RCC 时钟:RCC 时钟是STM32 单片机的核心时钟,它决定了单片机的工作频率。
在配置RCC 时钟时,需要根据实际应用需求选择合适的时钟源和倍频,以满足系统的性能要求。
2.配置RTC 时钟:配置RTC 时钟需要设置RTC 时钟控制器的控制和状态寄存器(RTCCSR),以启用RTC 时钟并设置其工作模式。
同时,还需要配置RTC 时钟寄存器(RTC Register),以设置年、月、日、星期、时、分、秒等时间信息。
3.配置EXTI 时钟:配置EXTI 时钟需要设置外部中断控制器的控制和状态寄存器(EXTICSR),以启用EXTI 时钟并设置其工作模式。
同时,还需要配置外部中断事件表(EXTIEVT),以定义外部中断事件的优先级和中断响应方式。
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 时钟概念概述二、STM32 时钟的分类三、STM32 时钟的配置方法四、STM32 时钟的应用实例五、总结正文:一、STM32 时钟概念概述STM32 时钟是指基于STM32 单片机的时钟系统,能够为系统提供精确的时间基准。
STM32 时钟系统包括内部高速时钟(HSI)、内部高速时钟(HSE)、外部高速时钟(HSE)、实时时钟(RTC)等。
这些时钟可以为系统提供不同精度和功能的时间基准,以满足各种应用场景的需求。
二、STM32 时钟的分类1.内部高速时钟(HSI):内部高速时钟是STM32 单片机内部产生的高速时钟,其频率固定为高速晶振的频率,一般为8MHz。
2.内部高速时钟(HSE):内部高速时钟是STM32 单片机内部产生的高速时钟,其频率由用户通过编程设定,最高可达25MHz。
3.外部高速时钟(HSE):外部高速时钟是外部晶振产生的高速时钟,其频率由用户通过编程设定,最高可达50MHz。
4.实时时钟(RTC):实时时钟是STM32 单片机内部集成的实时时钟模块,能够提供年月日时分秒等精确时间信息。
三、STM32 时钟的配置方法1.内部高速时钟(HSI)的配置:内部高速时钟的配置较为简单,只需要在时钟配置函数中开启相应功能即可。
2.内部高速时钟(HSE)的配置:内部高速时钟的配置需要用户根据实际需求,在时钟配置函数中设置相应的频率和模式。
3.外部高速时钟(HSE)的配置:外部高速时钟的配置需要用户根据实际需求,在时钟配置函数中设置相应的频率和模式,并连接外部晶振。
4.实时时钟(RTC)的配置:实时时钟的配置需要用户根据实际需求,在时钟配置函数中开启相应功能,并设置相应的时间格式和校准方式。
四、STM32 时钟的应用实例1.基于实时时钟(RTC)的闹钟功能:通过配置实时时钟,可以使STM32 单片机在指定时间发出闹钟信号。
2.基于内部高速时钟(HSI)的定时器功能:通过配置内部高速时钟,可以实现基于时间的定时器功能,例如秒表、计时器等。
STM32学习笔记(3):系统时钟和SysTick定时器
STM32学习笔记(3):系统时钟和SysTick定时器2011年3月21日系统时钟和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分频器。
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:系统时钟实验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。
STM32 实时时钟和闹钟程序
temp1=1970;
//从 1970 年开始
{
static u16 daycnt=0;
u32 timecount=0;
u32 temp=0;
u16 temp1=0;
timecount=RTC_GetCounter();
temp=timecount/86400;
//得到天数(秒钟数对应的)
if(daycnt!=temp)//超过一天了{来自daycnt=temp;
LCD_ShowNum(84,162,calendar.min,2,16);
} }
LCD_ShowNum(108,162,calendar.sec,2,16); LED0=!LED0; } delay_ms(10);
#include "sys.h" #include "delay.h" #include "usart.h" #include "rtc.h" _calendar_obj calendar;//时钟结构体
//RTC 初始化 //设置字体为红色
POINT_COLOR=BLUE; LCD_ShowString(60,130,200,16,16," - - "); LCD_ShowString(60,162,200,16,16," : : "); while(1) {
if(t!=calendar.sec) {
case 0: LCD_ShowString(60,148,200,16,16,"Sunday "); break;
case 1: LCD_ShowString(60,148,200,16,16,"Monday "); break;
STM32F051学习开发笔记——声控电子钟
STM32F051学习开发笔记——声控电子钟作者介绍:以前主要是从事STM8和51的开发,用过STM32S10和A T91SAM的32位机。
很喜欢玩单片机。
出来两年,以前在家电方案公司做家电,现在在一家车载电子公司写软件。
学习开发的原由:看到高性价比的新产品想学点以后备用;看了STM32F051资料后发现它以前的STM32S10功能上多个日历和触摸功能, 触摸要重新制板,有些麻烦,所以做了电子钟的项目;以前用ST的MCU做的项目比较多入手有优势;感谢ST发了块开发板,DIY就容易多了。
第一步上MUC跑起来1)找工程看例子拿到板后,我收集了大最关于STM32F051的资料。
我习惯的去找已建好的工程(我觉得把间时浪费在建功能和设置编程环境太浪费了),刚开始怎么也联不上,一直以为ST-LINK驱动问题,后来发现我用IAR版本太底,下了个V6402就好了。
STM32F051有两个开发板,一个是针对我手上MB1034B简单的,它对应的工程文件是"stm32f0discovery_fw",但里面的例子太少了,就几个灯闪一闪那种,后来直接就用"stm32f0_stdperiph_lib"文件搞了个例子来做测试,虽然例子多,但很多地方不兼容,按键、LED、就连系统电压都不一样!ST做得有点不到位。
不过这样也好,能在测试过程有点可学的,我就选了里面的"STM32F0xx_StdPeriph_Templates"来建的工程。
要用什么功能就去'STM32F0xx_StdPeriph_Examples'里面找,有时候找不到还可去STM32S10的例子中找,程序复制过来小改就可用。
2)点LED"STM32F0xx_StdPeriph_Templates"的工程里面只要改"stm320518_eval.h" LED的几个定义,删除LCD显示就可直接调用STM_EV AL函数,很顺利的把那两个灯点亮。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法
如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:
1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。
2)对于少于100脚的产品,有2种接法:
2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。
此方法可提高EMC性能。
2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。
此方法可以减小功耗并(相对上面2.1)节省2个外部电阻。
使用HSE时钟,程序设置时钟参数流程:
1、将RCC寄存器重新设置为默认值 RCC_DeInit;
2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);
3、等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp();
4、设置AHB时钟 RCC_HCLKConfig;
5、设置高速AHB时钟 RCC_PCLK2Config;
6、设置低速速AHB时钟 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_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()
下面是TM32软件固件库的程序中对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时钟
}。