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基于定时器输入捕获
前言: 基于本人对相关知识回顾与思考,仅供学习参考 目录 前言: 1.0 输入捕获 2.0 信号周期 3.0 定时器配置 4.0 定时器配置 5.0 定时器中断 后记: 1.0 输入捕获 2.0 信号周期 获取信号周期的方法,在第一次捕获与…...
前端基础的讲解-JS(22)
什么是JSON? 1.json 是一种轻量级的数据交换格式 简单来说:json 就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。 类似于: 国际通用语言 - 英语 中国 56 个民族不同地区的通用语言 - 普通话 …...
Minecraft-Datapack数据包开发3-进度与成就
目录 简介成就与进度根进度叶子进度更多的检测方式 简介 代码已经上传: gitee github 成就与进度 工欲善其事必先利其器,别死记硬背,多使用自动生成网站 进度数据包生成器:https://misode.github.io/advancement/指令生成器&…...
泷羽sec-shell编程(3)
shell(3) 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他…...
如何解决压测过程中JMeter堆内存溢出问题
如何解决压测过程中JMeter堆内存溢出问题 背景一、为什么会堆内存溢出?二、解决堆内存溢出措施三、堆内存参数应该怎么调整?四、堆内存大小配置建议 背景 Windows环境下使用JMeter压测运行一段时间后,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编写,因为是先开发了h5和app,小程序是突然要用的,做兼容开发已经来不及,由于微信小程序webview载入h5 因为通信必须要特殊限制(网页向小程序 postMessage 时,会在以下特定时机触发并收到消息&a…...
SSM01-MyBatis框架(一文学会MyBatis)
Mybatis框架 一、Mybatis框架简介 1.1 传统JDBC的缺陷 (1)数据库连接创建、释放频繁会造成系统资源浪费 【MyBatis通过在核心配置文件中配置数据路连接池解决此问题】 (2) SQL语句在代码中硬编码(PreparedStatement向占位符传…...
【PlantUML系列】状态图(六)
一、状态图的组成部分 状态:对象在其生命周期内可能处于的条件或情形,使用 state "State Name" as Statename 表示。初始状态:表示对象生命周期的开始,使用 [*] 表示。最终状态:表示对象生命周期的结束&…...
JS中重排和重绘的区别是什么?
在JavaScript中,当DOM(文档对象模型)发生变化时,浏览器需要重新计算和更新渲染树,这个过程通常涉及到重排(reflow)和重绘(repaint)。了解这两者之间的区别对于优化页面性…...
工业—使用Flink处理Kafka中的数据_ProduceRecord2
使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入HBase 中的 gyflinkresult:Produce5minAgg 表, rowkey“...
C 库中的断言与 FreeRTOS 中的 trace 宏
在 C 编程领域,断言和 FreeRTOS 中的 trace 宏都有着独特而重要的作用。 一、断言(assert) 断言在一般的 C 库中是一个非常有用的工具,它以函数的形式存在。其核心作用在于对程序中的逻辑条件进行检查,确保特定的表达…...
JAVAWeb中的Servlet学习
一 Servlet简介 1.1动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源.例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Servle…...
docker安装ddns-go(外网连接局域网)
docker先下载镜像,目前最新版是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表示法来表示,即: 其中…...
如何处理和优化大文件上传和下载
如何处理和优化大文件上传和下载 简单来说 文件过大会导致内存溢出,上传和下载过慢会影响用户体验,不合理的设计可能引发安全问题,还有网络问题,数据完整性,服务器压力等 文件过大,内存溢出,…...
QT 线程锁
在 Qt 中,线程锁是用来同步多线程访问共享资源的机制,防止数据竞争和线程安全问题。Qt 提供了几种线程锁和同步工具,主要包括以下几种: 1. QMutex 功能:QMutex 是 Qt 中最常用的互斥锁(mutex)…...
光猫开DMZ教程
本教程以移动光猫未例,具体操作以实际光猫为准 1、登录移动光猫管理后台 打开浏览器,在浏览器地址栏输入移动光猫登录管理地址192.168.1.1或者tplogin.cn 按“回车键”打开登录页面,然后输入路由器管理密码登录。 移动光猫登录页面 超级密…...
分区之间的一种度量方法-覆盖度量(Covering Metric)
分区之间的一种度量方法——覆盖度量(Covering Metric),用于量化一个分区如何被另一个分区覆盖或近似。以下是逐步详细解释: 1. 背景与符号说明 分区的概念: 分区是将一个集合(这里是 { 1 , … , n } \{…...
cocos creator接入字节跳动抖音小游戏JSAPI敏感词检测(进行文字输入,但输入敏感词后没有替换为*号)
今天更新了某个抖音小游戏的版本,增加了部分剧情,半天过后一条短信审核未通过,emmm…抖音总是能给开发者惊喜…打开电脑看看这次又整什么幺蛾子… 首先是一脸懵逼,后端早已接入了官方的内容安全检测能力了(https://de…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
