GD32的时钟和systick学习记录

简介

如果把每个外设都看成独立的个体的话,包括GD32本身。那么时钟就相当于心跳。所以说只要想外设工作,必须先使能其时钟源。 下面主要介绍下系统主频,RTC,看门狗的时钟源,举三反一,其它的问题就对比看下就行了。

时钟树

主频

主频就是咱们常说的sysclock,如图中间的SYSCLK,他提供整个系统所需的时钟源,当然如果应用到具体的外设,可能已经经过了很多次的分频,图中可以看到AHB,APB1,APB2等分频器。 代码配置逻辑:在GD32的启动文件中我们可以看到如上图所示的部分,先LDR SystemInit之后再跑main函数的。SystemInit函数就是对系统时钟进行初始化的。之后会走到system_clock_config,system_clock_config可以看到选择内部还是外部时钟,并且频率是多少。这里具体寄存器配置不多说,可以看手册,基本不需要修改,顶多改下宏。

RTC

"RTC"是Real Time Clock 的简称,意为实时时钟。实际上就是一个定时器,此处有人肯定有疑问,那RTC掉电是怎么维持数据不变的。这里就涉及到备份区 BKP(RTC模块和时钟配置系统的寄存器是在后备区域的(即BKP),通过BKP后备区域来存储RTC配置的数据可以让其在系统复位或待机模式下唤醒后,RTC里面配置的数据维持不变。),扯远了,这里主要介绍下RTC时钟源。

/*
分频计算公式:RTC period = RTCCLK/RTC_PR = (clock)/(psc+1)
例:如果我想要1秒中断一次,选用的时钟为32.768khz,分频就应该设置为32767:
*/
void rtc_prescaler_set(uint32_t psc);
    中断函数
因为RTC只是个定时器,时间的处理需要我们实时更新,RTC的中断函数是:RTC_IRQHandler (根据上面设置的周期产生中断)
经验分享 程序员 微信小程序 职场和发展