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

1-12 GD32基于定时器输入捕获

前言:


基于本人对相关知识回顾与思考,仅供学习参考


目录

前言:

1.0 输入捕获

 2.0 信号周期

3.0 定时器配置

4.0 定时器配置

5.0 定时器中断

后记:


1.0 输入捕获



 2.0 信号周期


获取信号周期的方法,在第一次捕获与第二次不会之间做差值运算,最后乘以计数周期得到信号周期。

还有月中方式是,在第一次获取计数寄存器数值时,将计数寄存器里面的数组设置为0,这样等到下一次计数时就能从0重新开始计数,通过这个方法就不用做差值运算了。


3.0 定时器配置


4.0 定时器配置


初始化GPIO 

static void GpioInit(void)
{rcu_periph_clock_enable(RCU_GPIOA);gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_10MHZ, GPIO_PIN_0);
}

开启GPIOA时钟,初始化GPIOA管脚,使用浮空输入,输入频率为10MHz,输入引脚为第0号引脚


使能定时器时钟

	// 使能定时器1时钟rcu_periph_clock_enable(RCU_TIMER1);// 复位定时器timer_deinit(TIMER1);

定时器初始化

	timer_parameter_struct timerInitPara;// 初始化定时器值timer_struct_para_init(&timerInitPara);// 设置预分频器的值timerInitPara.prescaler = 120 - 1;// 设置CRA重装计数器的值timerInitPara.period 	= 65536 - 1;// 定时器初始化timer_init(TIMER1, &timerInitPara);

定时器通道配置

	// 定时器输入捕获timer_ic_parameter_struct icInitPara;// 输入捕获通道赋初始值timer_channel_input_struct_para_init(&icInitPara);// 设置上升沿捕获/下降沿捕获icInitPara.icpolarity  = TIMER_IC_POLARITY_RISING;// 设置输入通道icInitPara.icselection = TIMER_IC_SELECTION_DIRECTTI;timer_input_capture_config(TIMER1, TIMER_CH_0, &icInitPara);

使能定时器

	// 清除定时器中断标志位timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_CH0);// 使能定时器中断timer_interrupt_enable(TIMER1, TIMER_INT_CH0);// 使能定时器中断优先级nvic_irq_enable(TIMER1_IRQn, 0, 0);// 使能定时器timer_enable(TIMER1);

5.0 定时器中断

static uint32_t g_icValue;void TIMER1_IRQHandler(void)
{if (timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_CH0) == SET){timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_CH0);// 读取输入捕获寄存器里面的数值g_icValue = timer_channel_capture_value_register_read(TIMER1, TIMER_CH_0) + 1;// 将计数寄存器的数值清除为 0 timer_counter_value_config(TIMER1, 0);}
}void CaptureDrvInit(void)
{GpioInit();TimerInit();
}void CaptureDrvTest(void)
{printf("period is %d us.\n", g_icValue);DelayNms(500);
}

6.0 全部程序

|---------------------capture_drv.h---------------------|-------------------------
#ifndef _CAPTURE_DRV_H_
#define _CAPTURE_DRV_H_void CaptureDrvInit(void);
void CaptureDrvTest(void);
#endif|---------------------capture_drv.c---------------------|-------------------------
#include <stdint.h>
#include <stdio.h>
#include "gd32f30x.h"
#include "delay.h"static void GpioInit(void)
{rcu_periph_clock_enable(RCU_GPIOA);gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_10MHZ, GPIO_PIN_0);
}static void TimerInit(void)
{// 使能定时器1时钟rcu_periph_clock_enable(RCU_TIMER1);// 复位定时器timer_deinit(TIMER1);timer_parameter_struct timerInitPara;// 初始化定时器值timer_struct_para_init(&timerInitPara);// 设置预分频器的值timerInitPara.prescaler = 120 - 1;// 设置CRA重装计数器的值timerInitPara.period 	= 65536 - 1;// 定时器初始化timer_init(TIMER1, &timerInitPara);// 定时器输入捕获timer_ic_parameter_struct icInitPara;// 输入捕获通道赋初始值timer_channel_input_struct_para_init(&icInitPara);// 设置上升沿捕获/下降沿捕获icInitPara.icpolarity  = TIMER_IC_POLARITY_RISING;// 设置输入通道icInitPara.icselection = TIMER_IC_SELECTION_DIRECTTI;timer_input_capture_config(TIMER1, TIMER_CH_0, &icInitPara);// 清除定时器中断标志位timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_CH0);// 使能定时器中断timer_interrupt_enable(TIMER1, TIMER_INT_CH0);// 使能定时器中断优先级nvic_irq_enable(TIMER1_IRQn, 0, 0);// 使能定时器timer_enable(TIMER1);
}static uint32_t g_icValue;void TIMER1_IRQHandler(void)
{if (timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_CH0) == SET){timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_CH0);// 读取输入捕获寄存器里面的数值g_icValue = timer_channel_capture_value_register_read(TIMER1, TIMER_CH_0) + 1;// 将计数寄存器的数值清除为 0 timer_counter_value_config(TIMER1, 0);}
}void CaptureDrvInit(void)
{GpioInit();TimerInit();
}void CaptureDrvTest(void)
{printf("period is %d us.\n", g_icValue);DelayNms(500);
}

编译结果:

后记:

......

相关文章:

1-12 GD32基于定时器输入捕获

前言&#xff1a; 基于本人对相关知识回顾与思考&#xff0c;仅供学习参考 目录 前言&#xff1a; 1.0 输入捕获 2.0 信号周期 3.0 定时器配置 4.0 定时器配置 5.0 定时器中断 后记&#xff1a; 1.0 输入捕获 2.0 信号周期 获取信号周期的方法&#xff0c;在第一次捕获与…...

前端基础的讲解-JS(22)

什么是JSON&#xff1f; 1.json 是一种轻量级的数据交换格式 简单来说&#xff1a;json 就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互。 类似于&#xff1a; 国际通用语言 - 英语 中国 56 个民族不同地区的通用语言 - 普通话 …...

Minecraft-Datapack数据包开发3-进度与成就

目录 简介成就与进度根进度叶子进度更多的检测方式 简介 代码已经上传&#xff1a; gitee github 成就与进度 工欲善其事必先利其器&#xff0c;别死记硬背&#xff0c;多使用自动生成网站 进度数据包生成器&#xff1a;https://misode.github.io/advancement/指令生成器&…...

泷羽sec-shell编程(3)

shell&#xff08;3&#xff09; 声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他…...

如何解决压测过程中JMeter堆内存溢出问题

如何解决压测过程中JMeter堆内存溢出问题 背景一、为什么会堆内存溢出&#xff1f;二、解决堆内存溢出措施三、堆内存参数应该怎么调整&#xff1f;四、堆内存大小配置建议 背景 Windows环境下使用JMeter压测运行一段时间后&#xff0c;JMeter日志窗口报错“java.lang.OutOfMe…...

爬虫项目基础知识详解

文章目录 Python爬虫项目基础知识一、爬虫与数据分析1.1 Python中的requests库Requests 库的安装Requests 库的 get() 方法爬取网页的通用代码框架HTTP 协议及 Requests 库方法Requests 库主要方法解析 1.2 python中的json库1.3 xpath学习之python中lxml库html了解html结构html…...

uniapp 微信小程序webview 和 h5数据通信

项目是uniapp编写&#xff0c;因为是先开发了h5和app&#xff0c;小程序是突然要用的&#xff0c;做兼容开发已经来不及&#xff0c;由于微信小程序webview载入h5 因为通信必须要特殊限制&#xff08;网页向小程序 postMessage 时&#xff0c;会在以下特定时机触发并收到消息&a…...

SSM01-MyBatis框架(一文学会MyBatis)

Mybatis框架 一、Mybatis框架简介 1.1 传统JDBC的缺陷 &#xff08;1&#xff09;数据库连接创建、释放频繁会造成系统资源浪费 【MyBatis通过在核心配置文件中配置数据路连接池解决此问题】 &#xff08;2&#xff09; SQL语句在代码中硬编码(PreparedStatement向占位符传…...

【PlantUML系列】状态图(六)

一、状态图的组成部分 状态&#xff1a;对象在其生命周期内可能处于的条件或情形&#xff0c;使用 state "State Name" as Statename 表示。初始状态&#xff1a;表示对象生命周期的开始&#xff0c;使用 [*] 表示。最终状态&#xff1a;表示对象生命周期的结束&…...

JS中重排和重绘的区别是什么?

在JavaScript中&#xff0c;当DOM&#xff08;文档对象模型&#xff09;发生变化时&#xff0c;浏览器需要重新计算和更新渲染树&#xff0c;这个过程通常涉及到重排&#xff08;reflow&#xff09;和重绘&#xff08;repaint&#xff09;。了解这两者之间的区别对于优化页面性…...

工业—使用Flink处理Kafka中的数据_ProduceRecord2

使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入HBase 中的 gyflinkresult:Produce5minAgg 表, rowkey“...

C 库中的断言与 FreeRTOS 中的 trace 宏

在 C 编程领域&#xff0c;断言和 FreeRTOS 中的 trace 宏都有着独特而重要的作用。 一、断言&#xff08;assert&#xff09; 断言在一般的 C 库中是一个非常有用的工具&#xff0c;它以函数的形式存在。其核心作用在于对程序中的逻辑条件进行检查&#xff0c;确保特定的表达…...

JAVAWeb中的Servlet学习

一 Servlet简介 1.1动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源.例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Servle…...

docker安装ddns-go(外网连接局域网)

docker先下载镜像&#xff0c;目前最新版是v6.7.6 也可以csdn资源下载 再导入dockers https://download.csdn.net/download/u014756339/90096748 docker load -i ddns-go.tar 启动 docker run -d --name ddns-go --restartalways --nethost -v /opt/ddns-go:/root jeessy/…...

时间复杂度度详解

时间复杂度是衡量算法性能的重要指标,用来描述算法随着输入规模 n 增大,运行时间的增长趋势。以下是时间复杂度的核心概念与常见分类的详细讲解。 1. 时间复杂度的定义 时间复杂度反映了算法执行的 基本操作数量 与输入规模 n 的关系。它通常使用大 O表示法来表示,即: 其中…...

如何处理和优化大文件上传和下载

如何处理和优化大文件上传和下载 简单来说 文件过大会导致内存溢出&#xff0c;上传和下载过慢会影响用户体验&#xff0c;不合理的设计可能引发安全问题&#xff0c;还有网络问题&#xff0c;数据完整性&#xff0c;服务器压力等 文件过大&#xff0c;内存溢出&#xff0c;…...

QT 线程锁

在 Qt 中&#xff0c;线程锁是用来同步多线程访问共享资源的机制&#xff0c;防止数据竞争和线程安全问题。Qt 提供了几种线程锁和同步工具&#xff0c;主要包括以下几种&#xff1a; 1. QMutex 功能&#xff1a;QMutex 是 Qt 中最常用的互斥锁&#xff08;mutex&#xff09;…...

光猫开DMZ教程

本教程以移动光猫未例&#xff0c;具体操作以实际光猫为准 1、登录移动光猫管理后台 打开浏览器&#xff0c;在浏览器地址栏输入移动光猫登录管理地址192.168.1.1或者tplogin.cn 按“回车键”打开登录页面&#xff0c;然后输入路由器管理密码登录。 移动光猫登录页面 超级密…...

分区之间的一种度量方法-覆盖度量(Covering Metric)

分区之间的一种度量方法——覆盖度量&#xff08;Covering Metric&#xff09;&#xff0c;用于量化一个分区如何被另一个分区覆盖或近似。以下是逐步详细解释&#xff1a; 1. 背景与符号说明 分区的概念&#xff1a; 分区是将一个集合&#xff08;这里是 { 1 , … , n } \{…...

cocos creator接入字节跳动抖音小游戏JSAPI敏感词检测(进行文字输入,但输入敏感词后没有替换为*号)

今天更新了某个抖音小游戏的版本&#xff0c;增加了部分剧情&#xff0c;半天过后一条短信审核未通过&#xff0c;emmm…抖音总是能给开发者惊喜…打开电脑看看这次又整什么幺蛾子… 首先是一脸懵逼&#xff0c;后端早已接入了官方的内容安全检测能力了&#xff08;https://de…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...