GD32的时钟和systick学习记录

8 篇文章 2 订阅

简介

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

时钟树

在这里插入图片描述

该图是STM32的时钟树,GD32也差不多,只不过经过锁相环倍频器PLL之后得到108M的SYSCLK,而STM32是72M的频率。
该图是从左往右看,从图中可以看出主要时钟来源有图标的1,2,3,4,分别是:
1:HSI 内部RC振荡器,提供8M时钟频率
2:HSE 外部经过OSC管脚接入的外部时钟,频率范围为4-16M,通过选用8M。1,2都是提供作为系统的时钟源,二选一。
3:LSE 外部时钟源,频率为32.768KHZ,用于RTC时钟源。
4:LSI 内部低速时钟源,用于看门狗时钟源。

主频

主频就是咱们常说的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的时钟来源主要有外部LSE(多为32768),HSE/128(8M/128),LSI(40K)。
  • 设置分频
/*
分频计算公式:RTC period = RTCCLK/RTC_PR = (clock)/(psc+1)
例:如果我想要1秒中断一次,选用的时钟为32.768khz,分频就应该设置为32767:
*/
void rtc_prescaler_set(uint32_t psc);
  • 中断函数

因为RTC只是个定时器,时间的处理需要我们实时更新,RTC的中断函数是:RTC_IRQHandler (根据上面设置的周期产生中断)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值