STMCU小助手
发布时间:2022-1-22 17:54
|
stm32时钟系统的意义: 1、电源的开关作用,达到低功耗效果; 2、调节时钟的速度; 对于每个外设,都要设置设置,stm32的时钟系统为了更低功耗; STM32时钟系统框图分析:
时钟源: 时钟是STM32的脉搏,是驱动源。使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不是用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果; stm32的时钟可以有以下4个时钟源提供: 1、HSI:高速内部时钟信号stm32单片机内带的时钟(8M频率),缺点是精度较差; 2、HSE:高速外部时钟信号,精度高 来源:(1)、外部晶振 (2)、HSE用户外部时钟; 3、LSE:低速外部晶振 32.768khz主要提供一个精准的时钟源,一般作为RTC时钟使用; 4、LSI:内部低速时钟,提供独立看门狗,也可以给RTC; STM32将时钟信号(例如HSE)经过分频或倍频(PLL)后,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟; RCC设置流程: 1、将RCC寄存器重新设置为默认值 RCC_DeInit 2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON) 3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp(); 4、设置AHB时钟 RCC_HCLKConfig 5、设置高速APB时钟 RCC_PCLK2Config 6、设置低速APB时钟 RCC_PCLK1Config 7、设置PLL RCC_PLLConfig 8、打开PLL RCC_PLLCmd(ENABLE) 9、等待PLL工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET) 10、设置系统时钟 RCC_SYSCLOCKConfig 11、判断是否PLL是系统时钟 while(RCC_GetSYSCLKSource()!=0x08) 12、打开要使用的外设时钟 RCC_APB2PerphClockCmd()/RCC_APB1PeriphClockCmd() 实例:
RTC模块: RTC(Real_Time Clock)实时时钟; 实时时钟是一个独立的定时器,RTC模块拥有一组连续计数的计数器,在相应软件的配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期; RTC由两个主要部分组成。第一部分(APB1接口)用来和APB1总线相连。此单元包含一组16位寄存器,可通过APB1总线对其进行读写操作。APB1接口以APB1总线时钟为时钟; 另一部分(RTC核)由一系列可编程计数器组成,分成两个主要模块; 第一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基准TR_CLK,RTC的预分频模块包含了一个20位的可编程分频器(RTC预分频器)。在每个TR_CLK周期中,如果在RTC_CR寄存器中设置了相应允许位,则RTC产生一个中断(秒中断) 第二个模块是一个32位的可编程的计数器,它可以被初始化为当前的系统时钟时间。系统时间以TR_CLK速度增长并与存储在RTC_ALR寄存器中的可编程的时间相比较,如果RTC_CR控制寄存器设置了相应允许为则比较匹配时将产生一个闹钟中断; RTC主要特性: 可编程的预分频系数:分频系数最高为220。 32 位的可编程计数器,可用于较长时间段的测量。 2个单独的时钟:用于APB1 接口的PCLK1 和RTC 时钟(此时的RTC 时钟必须小于 PCLK1 时钟的四分之一以上) 2种独立的复位类型: ─ APB1 接口由系统复位 ─ RTC 只能由后备域复位。 3个专门的可屏蔽中断: ─ 闹钟中断,用来产生一个软件可编程的闹钟中断。 ─ 秒中断,用来产生一个可编程的周期性中断信号(最长可达1 秒)。 ─ 溢出中断,检测内部可编程计数器溢出并回转为0 的状态。
RTC的一些设置是保存在后备区域中的:RTC_PRL, RTC_ALR, RTC_CNT 和RTC_DIV寄存器; 这些寄存器仅能通过备份复位信号复位,不受系统复位或电源复位的影响; 备份区域复位: 当以下时间中之一发生时,产生备份区域复位: 1、软件复位,备份区域复位可有设置备份区域控制器RCC_BDCR中的BDRST位产生; 2、后备电池和系统电源都没电的情况下;引发备份区域复位; 配置RTC: RTC有两种模式(工作模式和配置模式),要对RTC进行配置,首先设置RTC处于设置模式下;通过对RTC_CRL寄存器中的CNF位置位使RTC进入配置模式;另外,对RTC的任何寄存器的写操作都必须在前一次写操作结束之后再进行,要使用软件来查询当前的状态,同可通过查询RTC_CR寄存器中的RT0FF状态位来判断RTC寄存器是否处于更新中,仅当RTOFF状态位是“1”时,RTC寄存器可写入新的值;(这些是对RTC的保护措施) 配置过程: 1、查询RTOFF位,直到RTOFF的值变为“1” 2、置CNF值为1,进入配置模式; 3、对一个或多个RTC寄存器进行写操作; 4、清楚CNF标志位,退出配置模式; 5、查询RTOFF,直到RTOFF位变为“1”,以确认写操作已经完成; 仅当CNF标志位被清零时,写操作才能进行;这个过程至少需要3个RTCCLK周期; 配置实例:
|
【福利三:逢7发帖赢大礼】4、基于STM32G070板子SPI flash 移植SFUD库
【福利三:逢7发帖赢大礼】基于STM32G070板子的uart shell移植设计
【福利三:逢7发帖赢大礼】3、基于STM32G070板子的YModem串口协议通信
【福利三:逢7发帖赢大礼】2、基于STM32G070板子的OLED移植U8G2库
实战经验 | ClassB功能安全认证代码与应用代码分区的实现要点
STM32G0 系列 I2C 通信异常典型案例分析与解决方案总结
经验分享 | LAT1490 两个STM32G0 I2C 通信异常的案例分析
经验分享 | STM32G0 I2C bootloader Go 命令后调试连接失败:DBG_SWEN 位复位修复
经验分享 | STM32G0B1 待机模式意外唤醒深度解析:RTC 结构体未初始化的隐形坑
经验分享 | STM32G0B1 待机模式意外唤醒深度解析:RTC 结构体未初始化的隐形坑
微信公众号
手机版