立创·天空星开发板-GD32F407VE-Timer
本文以 立创·天空星开发板-GD32F407VET6-青春版 作为学习的板子,记录学习笔记。
立创·天空星开发板-GD32F407VE-Timer
- 定时器
- 基本定时器示例
定时器
定时器是嵌入式系统中常用的一种外设,它可以产生一定的时间间隔、延时、定时等功能,广泛应用于定时、计数、脉冲宽度调制(PWM)等领域。
具体而言,定时器可以实现以下功能:
- 计时:定时器可以用来实现延时操作,例如等待外部设备的稳定、等待数据的接收等,也可以用来定时执行一些任务,例如周期性任务、定时采集数据等。
- 计数:定时器可以用来实现计数功能,例如计数外部事件的次数、计算脉冲信号的频率等。
- PWM输出:定时器可以用来产生PWM信号,通过调节占空比可以实现各种功能,例如LED调光、舵机控制等。
- 中断控制:定时器通常具有中断功能,可以在计数器计数到一定值时触发中断,以实现各种复杂的功能。
根据 GD32F407VE 的用户手册,定时器(TIMERx)分为五种类型,如下表所示:

可以看出所有的定时器都有预分频器,且都是 16位的,另外,除了定时器 1/4 支持 32位计数器外,其他的都是16位的计数器。
16位能表示的最大值为:2^16 - 1 = 65536 - 1 = 65535.
所以,在定时器配置的过程中,预分频器和计数器的配置都不建议超过 65535。
基本定时器示例
#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"#include "ExtendedUSART.h"#define PRESCALER 16800
#define PERIOD SystemCoreClock / PRESCALERstatic void TIMER5_config() {// 定时器 - 时钟配置rcu_periph_clock_enable(RCU_TIMER5);timer_deinit(TIMER5);// 定时器 - 倍频配置rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);// 定时器 - 参数配置timer_parameter_struct tps;timer_struct_para_init(&tps);tps.prescaler = PRESCALER - 1; // 分频系数tps.period = PERIOD - 1; // 周期计数timer_init(TIMER5, &tps);// 定时器 - 中断配置nvic_irq_enable(TIMER5_DAC_IRQn, 2, 2);timer_interrupt_enable(TIMER5, TIMER_INT_UP);timer_enable(TIMER5);
}void TIMER5_DAC_IRQHandler(void) {if(SET == timer_interrupt_flag_get(TIMER5, TIMER_INT_UP)) {//清除中断标志位timer_interrupt_flag_clear(TIMER5,TIMER_INT_FLAG_UP);printf("timer interrupt triggered!");}
}int main(void) {systick_config();USART0_config();TIMER5_config();printf("USART0 in GD32 is running!\r\n");while(1);
}
该段代码的执行效果是每隔 1s 向串口输出文本 timer interrupt triggered!,可以通过串口助手看到输出,导入的 ExtendedUSART.h 可参考之前写的 立创·天空星开发板-GD32F407VE-USART。
我这里用的是基本定时器5,采用向上的计数模式,也就是自增计数,当计数值达到计数器最大值 65535 时,触发中断,自动自行中断处理函数 TIMER5_DAC_IRQHandler。
最为重要的两个参数是 PRESCALER 和 PERIOD。这两个参数的目的是为了降频。因为 GD32F407VE 的主频是 168MHz,从计数的角度来说就是 MCU 能在 1s 内计数到 168M,从某种角度来说,可以理解为 168M ≈ 1s。那分频的意义在于,我希望能让 MCU 慢下来,同样是 1s,分频系数越大,数的数字就越少。
举例来说,如果按如下配置:
tps.prescaler = 16800; // 分频系数
tps.period = 10000; // 周期计数
不难发现,将 168MHz 按 16800 分频后,就使得原本能 1s 数数到 168M 现在 1s 只能数到 10000。
那我们就可以将数 10000 个数等价于 1s。数完就触发一次中断。如果希望半秒来一次中断,那就可以将计数周期设置为 5000。因为计数周期缩短一倍,触发时间自然缩短一半。
另外,还有一个比较重要的配置,那就是倍频。我在代码中采用的是四倍频,其函数的简介如下:
/*!\brief configure the TIMER clock prescaler selection\param[in] timer_clock_prescaler: TIMER clock selectiononly one parameter can be selected which is shown as below:\arg RCU_TIMER_PSC_MUL2: if APB1PSC/APB2PSC in RCU_CFG0 register is 0b0xx(CK_APBx = CK_AHB)or 0b100(CK_APBx = CK_AHB/2), the TIMER clock is equal to CK_AHB(CK_TIMERx = CK_AHB).or else, the TIMER clock is twice the corresponding APB clock (TIMER in APB1 domain: CK_TIMERx = 2 x CK_APB1;TIMER in APB2 domain: CK_TIMERx = 2 x CK_APB2)\arg RCU_TIMER_PSC_MUL4: if APB1PSC/APB2PSC in RCU_CFG0 register is 0b0xx(CK_APBx = CK_AHB),0b100(CK_APBx = CK_AHB/2), or 0b101(CK_APBx = CK_AHB/4), the TIMER clock is equal to CK_AHB(CK_TIMERx = CK_AHB).or else, the TIMER clock is four timers the corresponding APB clock (TIMER in APB1 domain: CK_TIMERx = 4 x CK_APB1;TIMER in APB2 domain: CK_TIMERx = 4 x CK_APB2)\param[out] none\retval none
*/
void rcu_timer_clock_prescaler_config(uint32_t timer_clock_prescaler)
可见,GD32F407VE 提供了两种倍频的配置。置于选择哪种倍频,得取决于数据手册中的功能框图。如下所示:

由图所示,Timer5 在 APB1 总线上,其最高频率是42MHz,是 AHB 总线的四分之一。这就是需要进行四倍频的原因之一。另外,还可以通过数据手册中的时钟树来判断,如下所示:

相关文章:
立创·天空星开发板-GD32F407VE-Timer
本文以 立创天空星开发板-GD32F407VET6-青春版 作为学习的板子,记录学习笔记。 立创天空星开发板-GD32F407VE-Timer 定时器基本定时器示例 定时器 定时器是嵌入式系统中常用的一种外设,它可以产生一定的时间间隔、延时、定时等功能,广泛应用于…...
赚流量卷,晚点删
自己封装ajax方法 import ajax from /libs/ajax; import qs from "qs"; import Config from /config; import { getProtocolAndHostname } from /libs/util;const AjaxPlugin {}; // const baseUrl process.env.NODE_ENV development ? Config.baseUrl.dev : Co…...
36、matlab矩阵特征值、特征向量和奇异值
1、名词说明 1)特征值 特征值(Eigenvalues)是矩阵的一个重要概念,在线性代数中起着非常重要的作用。给定一个nn的方阵A,如果存在一个非零向量v,使得矩阵A作用于向量v后,得到的结果与向量v成比例ÿ…...
【网络编程】基于TCP的服务器端/客户端
TCP是Transmission Control Protocol(传输控制协议)简写。因为TCP套接字是面向连接的,因此又称为基于流的套接字。 把协议分为多个层次,设计更容易,通过标准化操作设计开放式系统 网络层介绍 链路层 链路层是物理连接领域标准化的结果&…...
企业中的绩效管理
背景 企业中为何需要绩效管理,企业绩效管理为何比较难,这在企业管理中是非常难,同样也是非常有价值的命题,那么首先应该对这个命题有清晰的认知,特别是要想明白为何企业需要绩效管理,应该先明白企业。 企…...
C++面试八股文:static和const的关键字有哪些用法?
100编程书屋_孔夫子旧书网 某日二师兄参加XXX科技公司的C工程师开发岗位第7面: 面试官:C中,static和const的关键字有哪些用法? 二师兄:satic关键字主要用在以下三个方面:1.用在全局作用域,修饰的变量或者…...
Qt飞机大战小游戏
Gitee地址 :plane-game: 基于Qt的飞机大战小游戏 GitHub地址: https://github.com/a-mo-xi-wei/plane-game...
Flarum 安装和使用教程
随着开源社区的日益繁荣,人们对社区品质的要求也越来越高。传统的 BBS 论坛模式已经难以满足现代用户对美观、便捷、互动性的需求。搭建一个现代化的高品质社区,成为许多网站管理者的迫切需求和共同挑战。 今天就给大家安利一款现代化的、优雅的开源论坛…...
Java老人护理上门服务类型系统小程序APP源码
🌸 老人上门护理服务系统:温暖与专业并存 🌸 一、🏠 走进老人上门护理服务系统 随着社会的快速发展,我们越来越关注老年人的生活质量。老人上门护理服务系统应运而生,它结合了现代科技与人性化服务&#…...
Spring Boot整合Knife4j-3.0.3
文章目录 Spring Boot整合Knife4j-3.0.31. 引言2. 快捷的解决方案2.1 修改knife4j的依赖2.2 application.yml增加配置3.3 SwaggerConfig配置如下 Spring Boot整合Knife4j-3.0.3 1. 引言 前面我写过一篇关于整合knife4j的文档 Spring Boot整合Knife4j-2.0.7 最近我引入redissi…...
使用R语言生成CDISC SDTM.AE domain
写在前面 - 使用的是Rstudio - 其实R已经有生成sdtm相关的package,以下代码仅作为练习R语言的语法,不是高效生成sdtm的方法 - 代码中没有解决的问题包括:EPOCH相关的逻辑没有考虑partial date的情况;在使用arrange() function做…...
怎么防止源代码泄露?9种方法教会你!
怎么防止源代码泄露?首先要了解员工可以通过哪些方式将源代码传输出去! 物理方法: — 网线直连,即把网线从墙上插头拔下来,然后和一个非受控电脑直连; — winPE启动,通过光盘或U盘的winPE启动,甚…...
原生JS如何实现可配置DM码
原生JS如何实现可配置DM码 一、 DM码简介 1、 Data Matrix码 Data Matrix码是一种二维条形码,简称DM码,由美国公司International Data Matrix, Inc.(I.D. Matrix)在1994年发明,Data Matrix码中的行数和列数随二维码中存储的信息量而增加,信息限值是2335个字母数字字符…...
【Python】Python开发面试题库:综合考察面试者能力
文章目录 Python开发面试题库:综合考察面试者能力1. 基础语法与数据类型问题1:变量与数据类型问题2:列表与字典操作问题3:字符串操作问题4:元组解包问题5:集合操作问题6:基本运算问题7ÿ…...
大语言模型的sft
https://zhuanlan.zhihu.com/p/692892489https://zhuanlan.zhihu.com/p/692892489https://zhuanlan.zhihu.com/p/679450872https://zhuanlan.zhihu.com/p/6794508721.常...
Astar路径规划算法复现-python实现
# -*- coding: utf-8 -*- """ Created on Fri May 24 09:04:23 2024"""import os import sys import math import heapq import matplotlib.pyplot as plt import time 传统A*算法 class Astar:AStar set the cost heuristics as the priorityA…...
低-零功率技术在军事中的应用
“低-零功率”概念最先由美国国防部提出,主要是针对诸如俄罗斯等大国的远程传感器,帮助美军破除“灰色地带挑衅”的威胁。由于“灰色地带”冲突仅依托小规模军事力量,其强度维持在不足以引发美国及其盟国进行直接干预的程度,因此&…...
【培训】企业档案管理专题(私货)
导读:通过该专题培训,可以系统了解企业档案管理是什么、为什么、怎么做。尤其是对档案的价值认知,如何构建与新质生产力发展相适应的企业档案工作体系将有力支撑企业新质生产力的发展,为企业高质量发展贡献档案力量,提…...
某国资集团数据治理落地,点燃高质量发展“数字引擎”
某国有资产经营控股集团为快速提升集团的内控管理能力和业务经营能力,以数字化促进企业转型的信息化建设势在必行。集团携手亿信华辰开启数据治理项目,在数据方面成功解决“哪里来、怎么盘、怎么管、怎么用”的问题,不断推动企业数字化转型…...
2024.06.12【读书笔记】丨生物信息学与功能基因组学(第十四章 细菌和古细菌基因组 第二部分)【AI测试版】
读书笔记:《生物信息学与功能基因组学》第十四章 - 第二部分 摘要 第二部分深入讨论了基于不同标准的细菌和古细菌的分类方法,包括形态学、基因组大小和排列、生活方式以及与人类疾病的关系。此外,还探讨了基于核糖体RNA序列的分类方法&…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
