GD32F103RCT6/GD32F303RCT6(5)系统滴答定时器

 本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发

向上代码兼容GD32F450ZGT6中使用

后续项目主要在下面该专栏中发布:

https://blog.csdn.net/qq_62316532/category_12608431.html?spm=1001.2014.3001.5482

感兴趣的点个关注收藏一下吧!

电机驱动开发可以跳转:

GD32F103RCT6/GD32F303RCT6-实战项目-无刷电机驱动(1)_gd32f103rct6例程-CSDN博客

BMS电源系统开发可以跳转:

暂未放链接

DCDC-双向BUCK-BOOST实战链接:

GD32实战篇-双向数控BUCK-BOOST-BUCK降压理论基础-CSDN博客

GD32实战篇-双向数控BUCK-BOOST-BOOST升压理论基础-CSDN博客

 向上代码兼容GD32F303RCT6中使用

本项目配套开发板:

基于GD32F103RCT6国产GD32平台,以下教程编写基于该开发板

31509ca63f134ed5b264ab9f6de45620.png

前面我们已经完成了GPIO输入输出的实验,但是在其中我们所使用的延时函数是采用自己编写的阻塞延时,定时的时长其实决定于程序运行的情况,不是十分准确,那么今天我们就会学习一种最常用的方法:SysTick定时。

学习SysTick定时首先我们需要了解它本身。

SysTick —系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 108M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。

因为 SysTick 是属于 CM3 内核的外设,所以所有基于 CM3 内核的单片机都具有这个系统定时器,使得软件在 CM3 单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。

如图是官方手册中给出的时钟树配置:

0062f5ee32454f3a9b40f4d4f0879c8c.png

SysTick定时遵守以下路径:

aabc3628879f44d28d107609a44646d5.png

SysTick库函数

GPIO的库函数声明都在"gd32f10x_misc.hh"文件中。

官方资料路径:GD32F10x_Firmware_Library_V2.2.2\Firmware\GD32F10x_standard_peripheral\Include\gd32f10x_misc.h

设置SysTick时钟源

函数声明如下:

void systick_clksource_set(uint32_t systick_clksource)

参数:

systick_clksource

参数1

需要选择的系统时钟源

返回

参数1:

名称

功能

SYSTICK_CLKSOURCE_HCLK

SysTick时钟源为AHB时钟

SYSTICK_CLKSOURCE_HCLK_DIV8

SysTick时钟源为AHB时钟的8分频

关于其他的一些函数:

这里我们暂时用不上,所以只贴出来不进行讲解。

/*设置优先级组*/

void nvic_priority_group_set(uint32_t nvic_prigroup);

/*启用NVIC中断请求*/

void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, uint8_t nvic_irq_sub_priority);

/*禁用NVIC中断请求*/

void nvic_irq_disable(uint8_t nvic_irq);

/*设置NVIC向量表的基址*/

void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset);

/*设置低功耗模式*/

void system_lowpower_set(uint8_t lowpower_mode);

/*复位低功耗模式*/

void system_lowpower_reset(uint8_t lowpower_mode);

SysTick 时间的计算

036cd337bef04cf48f106ea78c419cb8.png

d58d4824eec64b828ebcc73dbc639728.png

SysTick代码编写

我们在编写SysTick计时器的时候,我们并不需要从0去配置,在官方提供的示例中,有写好的代码

GD32F10x_Firmware_Library_V2.2.4\Template

58e54e7796274fcc8785ea92a0b3ff30.png

我们在第一章新建工程的时候,已经将该文件放置在我们建立的USER文件夹中,所以这里我们就不需要再次移植,直接复制第一次工程的文件就行

21f236671f4941038f5a4348ab57d737.png

记得在编译器的文件管理器中加入该文件,不然会有报错。

1fe4337c0bd34b64a9b46cc7b947862b.png

接下来在主函数中引用该头文件

7a0aeb9fe0754820a871ba22de5e40a7.png

然后在gd32f10x_it.c文件中引用该头文件,然后在SysTick的中断服务函数中加入delay_decrement函数

3e17ad8ca8744ddbbe9ddd8dbd3b70c9.png

例程如下:

6a9f69101db640cba1d61c800073715b.png

实验成功!

群号:621154399

有问题欢迎大家加入我们一起交流,这个群是开源性技术交流群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不及你的温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值