GD32F103 sysTick学习

一、简介

本实验默认主频设置的是72Mhz,具体请参考“GD32F103时钟树配置分析”

GD32F103时钟配置分析_gd32f130 定时器-优快云博客

SystemCoreClock,这个变量默认是72000000

SysTick:也叫系统滴答定时器(也就是周期性溢出的时基定时器)

SysTick是一个24为的倒计数定时器,当计到0时,将从RELOAD寄存器中自动重装载定时初值。只要把它在SysTick控制及状态寄存器中的使能位清除,就永不停息

二、寄存器介绍如下

2.1、基础寄存器描述

2.2、中断寄存器描述

这里“悬起”可以理解为暂停或阻止SysTick定时器的计数。当SysTick定时器被悬起时,它会停止当前的计数操作,不再产生新的定时器中断(直到它被重新启动)。

2.3、介绍

CM3允许为SysTick提供两个时钟源以供选择。第一个是内核的“自由运行时钟”FCLK。“自由”表现在它不来自系统时钟HCLK,因此在系统时钟停止时FCLK也继续运行。第二个是一个外部的参考时钟。但是使用外部时钟时,因为它在内部是通过FCLK来采样的,因此其周期必须至少是FCLK的两倍(采样定理)。很多情况下芯片厂商都会忽略此外部参考时钟,因此通常不可用。通过检查校准寄存器的位[31](NOREF),可以判定是否有可用的外部时钟源,而芯片厂商则必须把该引线连接至正确的电平。

当SysTick定时器从1计到0时,它将把COUNTFLAG位;而下述方法可以清零:

读取SysTick控制及状态寄存器(STCSR)

往SysTick当前值寄存器(STCVR)中写任何数据

其他请参考“Cortex M3权威指南(中文).pdf

三、初始化SysTick定时器

3.1、用最简单的方式让SysTick工作起来

更具上面寄存器描述我们其实只需要打开“控制及状态寄存器的使能位(ENABLE)就可以了”,但是这里有一个问题,由于我们重载数值寄存器的复位值为0,所以只打开使能位,SysTick定时器无意义,所以我们最少需要打开“控制及状态寄存器位[0](ENABLE)”和给"重装载数值寄存器写一个1-0xffffff的值"

下面我们来试一下用最少的操作让SysTick工作起来

结构体介绍

这里我们可以看到我们使用SysTick_Config函数进行配置,配置完成后,一直在systick_config的while循环中倒计时,每次计数到0时,就会把SysTick->LOAD中的值再次给SysTick->VAL,这里可以看出“SysTick控制及状态寄存器”和“SysTick重装载数值寄存器”和我们设置的一样。

这里为什么SysTick->CTRL是控制及状态寄存器,因为SysTick的地址是0xE000 E010,所以SysTick->CTRL=0xE000 E010,由于SysTick_Type结构体的每个变量都是4字节,所以SysTick->LOAD=0xE000 E010+0x04=0xE000 E014也就是“从装载数值寄存器”

问题1:这里有个问题,为什么上述说外部时钟我们可以思考一下,我们设置的是外部时钟源(STCLK),外部时钟源是多少呢,又是从什么地方来的呢?这个问题我会在最后面说清楚。

3.2、常见的SysTick初始化

我们根据程序计算我们主频是72Mhz 也就是1秒钟有72MHz个脉冲,如果我们要延时1ms应该给“SysTick重装载数值寄存器”写入多少呢

由于主频是72Mhz,所以1S/72Mhz≈0.0138889微妙,我们延时1ms,1000/0.0138889=71999.94个脉冲,所以SystemCoreClock/1000就等于1ms一次中断。

问题2:但是根据时钟树那里明明有一个8分频,但是为什么没有起作用呢。

 

四、问题解答和补充

因为ST公司把“SysTick控制及状态寄存器”的CLKSOURCE的时钟选择位修改成了分频系数选择,具体查看如下寄存器:

位段

名称

类型

复位值

描述

16

COUNTFLAG

R

0

如果在上次读取本寄存器后,SysTick已经数到了0,则该位为1.如果读取该位,该位将自动清零

2

CLKSOURCE

R/W

0

0:8分频

1:1分频(也就是不分频)

1

TICKINT

R/W

0

1:SysTick倒数到0产生SysTick异常请求

0:数到0时无动作

0

ENABLE

R/W

0

SysTick定时器的使能位

 

问题1:因为CLKSOURCE被ST公司修改了,所以选择外部时钟源,其实就是使能了SysTick的分频 72MHz/8=9MHz

问题2:如果需要启用8分频只需要把CLKSOURCE设置为0就行了

参考:GD 32 系統Systick定时器_gd32 systick-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值