打印
[研电赛技术支持]

GD32F103 sysTick学习

[复制链接]
448|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-10-29 12:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、简介
本实验默认主频设置的是72Mhz,具体请参考“GD32F103时钟树配置分析”

GD32F103时钟配置分析_gd32f130 定时器-CSDN博客

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的时钟选择位修改成了分频系数选择,具体查看如下寄存器:




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

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

参考:GD 32 系統Systick定时器_gd32 systick-CSDN博客
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_44501991/article/details/143285081

4096367205eb05a1d8.png (55.69 KB )

4096367205eb05a1d8.png

8604767205ebbe4dee.png (27.26 KB )

8604767205ebbe4dee.png

6817467205ec2c5578.png (23.43 KB )

6817467205ec2c5578.png

1858867205ed9a5bc9.png (373.98 KB )

1858867205ed9a5bc9.png

3676867205ed2497da.png (373.98 KB )

3676867205ed2497da.png

6737067205ef34b97f.png (39.74 KB )

6737067205ef34b97f.png

423867205efb179fb.png (35.78 KB )

423867205efb179fb.png

265167205f01cb1ed.png (36.94 KB )

265167205f01cb1ed.png

5889067205f09525de.png (18.44 KB )

5889067205f09525de.png

3320667205f0ea048a.png (30.74 KB )

3320667205f0ea048a.png

3328967205f175d6fb.png (26.7 KB )

3328967205f175d6fb.png

2648867205f1b4e422.png (74.13 KB )

2648867205f1b4e422.png

5606967205f206e942.png (25.77 KB )

5606967205f206e942.png

8497367205f291ff9b.png (387.17 KB )

8497367205f291ff9b.png

使用特权

评论回复
沙发
yangjiaxu| | 2024-10-29 15:25 | 只看该作者
话说,GD的系统滴答定时器和ST的滴答定时器逻辑和配置原理都是一样的吧

使用特权

评论回复
板凳
星辰大海不退缩| | 2024-10-31 11:22 | 只看该作者
系统滴答定时器使用很方便

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15611

帖子

11

粉丝