当前位置: 首页 > news >正文

【GD32】04 - Timer定时器

GD32中的定时器

GD32E230中有七个定时器,六种类型,其中通用的L4版本有两个,其他类型的各一个。

那我们就以通用L4这个类型来敲代码,其他流程是通用的。

通用L4

虽然每种类型的定时器都有自己的结构框图,但是其实大差不差,定时器来来回回不就那几个寄存器嘛,自动重装载寄存器,预分频器,要输出个PWM就再来个输出比较。

要注意的就是通用L4这边的时钟源只有一个。

因此用GD32的定时器的时候,要去手册翻翻对应的定时器里的介绍,因为GD32里定时器种类还不少,细节上还是有差异的。

那我们来看看给L4提供的时钟源是多少频率的,这关系到我们后面参数的设置。

从左边AHB过来是72MHz,给Timer0,14,15,16提供时钟之前经过一个分频器,这个分频器是如果APB2的分频是1分频,那么它也是1分频,如果不是,那么是2分频,而APB2就是1分频,因此它也是1分频,也就是说没有减少我们的时钟频率,因此给L4的时钟频率就是72MHz。

定时器溢出频率的公式跟STM32是一样的,就是时钟频率/((自动重装载寄存器的值+1)*(预分频器的值+1))

固件库函数

rcu_periph_clock_enable(RCU_TIMER15)

定时器相关函数很多,我们只挑这次用到的讲。

timer_init

初始化定时器,参数一选择是哪一个定时器。

参数二传入一个结构体变量的指针。

我们来看看这个结构体。

通过配置预分频值和周期来控制定时器溢出的频率,就用上面的公式,把这个周期看成是自动重装载计数器就行。

对齐方式一般选择边缘对齐TIMER_COUNTER_EDGE

计数方式选择向上计数TIMER_COUNTER_UP,L4里也只能向上计数。

时钟分频因子这个是输入捕获的时候才用的到的,我们可以不配。

重复计数器值是只溢出多少次之后再溢出才进一次中断的,不过只有高级定时器才有,我们也不配。

timer_enable

使能定时器,当我们配置完定时器包括中断之后就可以使能了。

timer_disable

失能定时器。

timer_prescaler_config

配置预分频器的模式,我们选择立即加载。

timer_interrupt_enable

使能中断,中断源我们就选第一个,更新中断,这是不管哪一种定时器都能用的,其他参数可以参考上面表格的说法。

timer_interrupt_flag_get

获取中断标志位,一样是在中断处理函数中判断是哪个中断源触发的中断。

timer_interrupt_flag_clear

清除中断标志位,除了在中断处理函数中使用,我们在一开始配置定时器的时候就需要用一下,否则会马上触发一次中断。

上面这些函数就足够我们进行最基础的一个计时了,但是还有个问题,就是中断,中断都需要配置NVIC。

NVIC使能的函数我们在上一篇外部中断里说过了,这边就直接把代码贴出来了。

nvic_irq_enable(TIMER15_IRQn,1);

最后一个就是中断处理函数了,我们一样是从启动文件的汇编文件里去找。

秒表示例代码

#include "gd32e23x.h"
#include "systick.h"
#include "OLED.h"uint16_t Z_Time_s = 0 ,Z_Time_10ms = 0;void TIMER15_IRQHandler(void){    if(timer_interrupt_flag_get(TIMER15,TIMER_INT_FLAG_UP) == SET){        timer_interrupt_flag_clear(TIMER15,TIMER_INT_FLAG_UP); //清除中断标志位   if(++Z_Time_10ms >= 100) {Z_Time_10ms = 0;++Z_Time_s;}}
} int main(void){systick_config();OLED_Init();rcu_periph_clock_enable(RCU_TIMER15);                   //开启定时器时钟  timer_parameter_struct timer_initpara;                  timer_initpara.prescaler = 200 -1;                      //预分频timer_initpara.alignedmode = TIMER_COUNTER_EDGE;        //边缘对齐timer_initpara.counterdirection = TIMER_COUNTER_UP;     //向上计数timer_initpara.period = 3600  - 1;                      //周期timer_init(TIMER15,&timer_initpara);                    //初始化定时器timer_prescaler_config(TIMER15, 1, TIMER_PSC_RELOAD_NOW);//设置预分频器为立即加载模式timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP); //清除中断标志位,否则一开始就会进一次中断nvic_irq_enable(TIMER15_IRQn, 1);                       //设置中断优先级timer_interrupt_enable(TIMER15, TIMER_INT_UP);          //使能更新中断 timer_enable(TIMER15);                                  //使能定时器OLED_ShowString(1,5,":");while(1){OLED_ShowNum(1,1,Z_Time_s,4);OLED_ShowNum(1,6,Z_Time_10ms,2);}
}

我这边做个秒表的效果,以精度在10ms,因此我们需要每秒定时器溢出中断100次。

因为时钟源是72MHz,因此需要让72MHz去除以(周期+1)再除以(预分频+1)最终等于100即可。

最后一点要注意的就是这俩寄存器是16位的,因此设置周期和预分频的值的时候要注意不要超过65535了。

大家可以配合上个文章的外部中断,在这个秒表的基础上加几个按钮,实现暂停继续,清零等功能。就当是课后作业了(bushi)

相关文章:

【GD32】04 - Timer定时器

GD32中的定时器 GD32E230中有七个定时器,六种类型,其中通用的L4版本有两个,其他类型的各一个。 那我们就以通用L4这个类型来敲代码,其他流程是通用的。 通用L4 虽然每种类型的定时器都有自己的结构框图,但是其实大差…...

Golang | Leetcode Golang题解之第123题买卖股票的最佳时机III

题目&#xff1a; 题解&#xff1a; func maxProfit(prices []int) int {buy1, sell1 : -prices[0], 0buy2, sell2 : -prices[0], 0for i : 1; i < len(prices); i {buy1 max(buy1, -prices[i])sell1 max(sell1, buy1prices[i])buy2 max(buy2, sell1-prices[i])sell2 m…...

Leetcode2028. 找出缺失的观测数据

Every day a Leetcode 题目来源&#xff1a;2028. 找出缺失的观测数据 解法1&#xff1a;模拟 统计当前 m 个元素的总和 curSum sum(rolls)&#xff0c;总共 mn 个元素和为 total (m n) * mean。 排除 2 种情况&#xff1a; total - curSum > 6 * n&#xff1a;n 个…...

如何在CentOS中合理划分磁盘空间以优化系统性能

目录 前言 理想的分区方案 为什么需要单独分区 安全性 性能 管理和维护 稳定性和可靠性 升级和兼容性 结论 前言 在进行CentOS系统的安装和配置时&#xff0c;合理划分磁盘空间是确保系统性能、安全性和易于管理的关键步骤。本文将探讨如何根据系统的硬件配置和预期用途…...

算法(十一)贪婪算法

文章目录 算法简介算法概念算法举例 经典问题 -背包问题 算法简介 算法概念 贪婪算法&#xff08;Greedy&#xff09;是一种在每一步都采取当前状态下最好的或者最优的选择&#xff0c;从而希望导致结果也是全局最好或者最优的算法。贪婪算法是当下局部的最优判断&#xff0c…...

Rust之函数式语言特性:迭代器和闭包(一):概述

开发环境 Windows 11Rust 1.78.0 VS Code 1.89.1 项目工程 这次创建了新的工程minigrep. 函数式语言特性:迭代器和闭包 Rust的设计从许多现有语言和技术中获得了灵感&#xff0c;其中一个重要影响是函数式编程。函数式编程通常包括通过在参数中传递函数、从其他函数返回函数、…...

配置资源管理

一 Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源&#xff0c;这类数据虽然也可以存放在 Pod 或者镜像中&#xff0c;但是放在 Secret 中是为了更方便的控制如何使用数据&#xff0c;并减少暴露的风险。 1 有三种类型&#xff1a; kubernetes.io/service…...

unity2020打包webGL时卡进程问题

我使用的2020.3.0f1c1&#xff0c;打包发布WEB版的时候会一直卡到asm2wasm.exe这个进程里&#xff0c;而且CPU占用率90%以上。 即使是打包一个新建项目的空场景也是同样的问题&#xff0c;我尝试过一直卡在这里会如何&#xff0c;结果还真打包成功了。只是打包一个空场景需要20…...

云原生架构相关技术_3.无服务器技术

1.技术特点 1.1面向特定领域的后端云服务&#xff08;BaaS&#xff09; 随着以Kubernetes为代表的云原生技术成为云计算的容器界面&#xff0c;Kubernetes成为云计算的新一代操作系统。面向特定领域的后端云服务&#xff08;BaaS&#xff09;则是这个操作系统上的服务API&…...

Leetcode:Z 字形变换

题目链接&#xff1a;6. Z 字形变换 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;二维矩阵的直接读写&#xff09; 解决办法&#xff1a;直接依据题目要求新建并填写一个二维数组&#xff0c;最后再将该二维数组中的有效字符按从左到右、从上到下的顺序读取并…...

Python 3 判断文件是否存在

1 使用os.path模块 import osfile_path hello.txtif os.path.exists(file_path):print(f"文件 {file_path} 存在。") else:print(f"文件 {file_path} 不存在。") 2 使用pathlib模块 from pathlib import Pathfile_path Path(word.txt)if file_path.ex…...

(深度学习记录)第TR3周:Transformer 算法详解

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文本的输入处理中&#xff0c;transformer会将输入文本序列的每个词转化为一个词向量&#xff0c;我们通常会选择一个合适的长度作为输入…...

谷神前端组件增强:自定义列

初始化 $gp.customColumn {}initColumnPool /*** initColumnPool* 初始化列池* * param prefix 前缀* param length 长度* * return Array 列ID数组* */ function initColumnPool (prefix, length) {return Array.from({length}, (value, index) > prefix index) } self…...

31-ESP32-S3-WIFI篇-02 Event Group (事件标记组)

ESP32-S3-WIFI 事件标记组 介绍 在ESP32-S3的WiFi驱动程序中&#xff0c;事件标记组&#xff08;Event Group&#xff09;是一个非常重要的概念。它是FreeRTOS中的一种同步机制&#xff0c;用于在任务之间传递和同步事件。在WiFi驱动程序中&#xff0c;我们使用事件标记组来通…...

构建企业级AI私有知识库

一、引言 在当今竞争激烈的市场环境中&#xff0c;企业为了保持竞争优势&#xff0c;需要高效地管理和利用内部知识资源。构建一个企业级AI私有知识库&#xff0c;不仅可以集中存储和管理企业知识&#xff0c;还能通过人工智能技术实现知识的智能化处理和利用。本文将详细介绍…...

C语言王国——杨氏矩阵

目录 1. 引言 2. 了解杨氏矩阵 3. 思路分析 4. 代码 5. 总结 1. 引言 最近在做二维数组的训练的时候发现了一个很有意思的题&#xff1a; 一看这不是杨氏矩阵嘛&#xff0c;接下来就由姜糖我带大家了解一下这个著名的矩阵。 2. 了解杨氏矩阵 通过查阅百度得知&#xff1a; …...

陪玩小程序都需要怎么做?

开发陪玩小程序需要进行全面的需求分析、功能规划、技术选型、界面设计等一系列步骤。陪玩小程序作为一种新兴的网络服务平台&#xff0c;为用户提供了寻找游戏伙伴、预约陪玩服务等功能&#xff0c;满足了用户在游戏领域的社交互动和技能提升需求。具体分析如下&#xff1a; 需…...

postgressql——子事务可见性判断 性能问题(8)

子事务可见性判断 & 性能 测试SQL BEGIN; PREPARE sel(integer) ASSELECT count(*)FROM contendWHERE id BETWEEN $1 AND $1 + 100; PREPARE upd(integer) ASUPDATE contend SET val = val + 1WHERE id IN ($1, $1 + 10, $1 + 20, $1 + 30);SAVEPOINT a; \set rnd random…...

20240531在飞凌的OK3588-C开发板上跑原厂的Buildroot测试USB摄像头

20240531在飞凌的OK3588-C开发板上跑原厂的Buildroot测试USB摄像头 2024/5/31 20:04 USB摄像头分辨率&#xff1a;1080p&#xff08;1920x1080&#xff09; 默认编译Buildroot的SDK即可点亮USB摄像头。v4l2-ctl --list-devices v4l2-ctl --list-formats-ext -d /dev/video74 …...

从0开始学统计-什么是回归?

1.什么是回归&#xff1f; 回归&#xff08;Regression&#xff09;是统计学中一种用于探索变量之间关系的分析方法。它主要用于预测一个或多个自变量&#xff08;输入变量&#xff09;与因变量&#xff08;输出变量&#xff09;之间的关系。在回归分析中&#xff0c;我们尝试根…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...