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 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. 日期中断:每当计数器的日期字段更新时触发中断。

STM32F4 第6讲 STM32时钟系统+SystemInit函数解读-M4

STM32F4 第6讲 STM32时钟系统+SystemInit函数解读-M4
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时 钟源,频率范围为4MHz~26MHz。
③、LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。主要供独立看 门狗和自动唤醒单元使用。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC ⑤、PLL为锁相环倍频输出。STM32F4有两个PLL:
目录
1
时钟系统框图讲解
2 时钟配置相关函数讲解
时钟系统讲解
参考资料:
Keil MDK中自带的英文资料
✓ 时钟系统框图
✓ 时钟系统知识总结
1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统 时钟或者用作PLL时钟输入。
2. 时钟源和时钟相关配置:
RCC_HSEConfig, RCC_LSEConfig, RCC_PLLConfig, RCC_PLLI2SConfig, RCC_PLLSAIConfig, RCC_MCO1Config, RCC_MCO2Config, RCC_SYSCLKConfig, RCC_HCLKConfig,RCC_PCLK1Config, RCC_PCLK2Config,RCC_RTCCLKConfig,RCC_I2SCLKConfig
主PLL(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。 ✓ 第一个输出PLLP用于生成高速的系统时钟(最高168MHz) ✓ 第二个输出PLLQ用于生成USB OTG FS的时钟(48MHz),随机数发生器 的时钟和SDIO时钟。
专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。

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进行更多的配置和使用。

STM32F时钟配置1

STM32F时钟配置1
//前面要想得到的 SYSCLK 在这里就知道了。因为 PLL 输出作为系统时钟,即 //SYSCLK=PLLCLK=36M
//程序中需要用的其他时钟也可以确定了。 //因为 APB1 Prescaler=1(没有分频),所以 TIMxCLK=PLCK1=36M //因为 APB2 Prescaler=1(没有分频),所以 TIM1CLK=PLCK2=36M //在 SystemInit 中 ADCPRE:ADC 预分频 00:PCLK2 2 分频后作为 ADC 时钟,即 ADCCLK=PCLK2/2,所以 ADCCLK=18M
FLASH->ACR |= FLASH_ACR_PRFTBE;
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;
CanolaFlower
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
RCC->CIR = 0x009F0000;
SetSysClock(); }
static void SetSysClockTo36(void) { __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
//注释为:SYSLCK,HCLK,PCLK2 和 PCLK1 的配置
RCC->CR |= RCC_CR_PLLON;
while((RCC->CR & RCC_CR_PLLRDY) == 0) { }
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

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单片机RTC时钟的使用方法及步骤

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

STM32单片机RTC时钟的使用方法及步骤
STM32RTC使用步骤:
打开PWR时钟和Backup区数据访问
若使用外部低速时钟(LSE),打开LSE并等待起振
选择和打开RTC时钟,等待时钟同步
配置时间格式,分频系数等
根据需要配置时钟,日期,闹钟,唤醒,输出,时间戳,备份寄存器等模块
根据需要配置和打开中断,其中
RTC Alarm ——EXTI line 17
RTC tamper and TImestamps——EXTI line 19
RTC wakeup——EXTI line 20
下面的代码配置日期,时间,当前时间设置为15年05月31日,星期日(7),15:50:40,打开闹钟A和唤醒中断,每一秒钟来一次中断,15:50:45秒产生闹钟中断,用串口打印相应的信息。

代码:
void RTC_Config(void)
{
RTC_TImeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RTC_InitTypeDef RTC_InitStructure;
RTC_AlarmTypeDef RTC_AlarmStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_BackupResetCmd(ENABLE);
RCC_BackupResetCmd(DISABLE);
RCC_LSEConfig(RCC_LSE_ON);。

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。

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

STM32的时钟配置
飞嵌电子
本教程主要针对STM32的初学者。

假设读者有以下基础:
1. 学习过一款8位或16位单片机(51、430、AVR)
2. 熟悉微处理器的常用概念
3. 有一定的C语言基础
笔者不推荐直接学习STM32单片机。

学习能力超
强者除外。

•本教程的特色�注重使用
�循序渐进
�软件视角
STM32的架构
时钟的来源•外部时钟(External Clock)HSE
HSI
•内部时钟(Interal Clock)LSE
LSI
•PLL(锁相环时钟)
三个锁相环PLL1,PLL2,PLL3
系统时钟
•几乎所有外设有系统时钟驱动。

•系统时钟的来源
HSE
HSI
PLL
时钟的初始化
•SysInit函数将系统时钟初始化到72M
•可以用stm32f10x_rcc.h中声明的相应函数初始化和使能对应外设的时钟。

•使能相应的时钟
例子(ADC1-DMA ) / /** ADCCLK = PCLK2/4 ADCCLK = PCLK2/4 *
*/ RCC_ADCCLKConfig(RCC_PCLK2_Div4); / /** Enable peripheral clocks ------------------------------------------------ Enable peripheral clocks ------------------------------------------------**/ / /** Enable DMA1 clock Enable DMA1 clock *
*/ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); / /** Enable ADC1 and GPIOC clock Enable ADC1 and GPIOC clock *
*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 |
R CC_APB2Periph_GPIOC RCC_APB2Periph_GPIOC RCC_APB2Periph_GPIOC, ENABLE);, ENABLE);, ENABLE);
注意:千万不要用错函数!。

相关文档
最新文档