蓝桥杯嵌入式(G4系列):定时器捕获

news2024/12/24 2:56:37

前言:

        定时器的三大功能还剩下最后一个捕获,而这在蓝桥杯嵌入式开发板上也有555定时器可以作为信号发生器供定时器来测量。

原理图部分:

        

 

         开发板上集成了两个555定时器,一个通过跳线帽跟PA15相连,最终接到了旋钮R40上,另一个接到了旋钮R39上。了解了这些,我们下一步到STM32Cubemx上配置就有数了。

STM32Cubemx配置:

        我个人是将PA15设定为了TIM2_CH1

         PB4设定为了TIM16_CH1

         接下来,我们进入TIM2和TIM16的配置界面,配置对应的通道

        然后我们再配置一下响应的参数,分频系数我们设置为79,重装载值,我们就不需要改了

         然后我们再打开中断

         接下来,我们对PB4进行配置,点击TIM16

         设置分频系数和使能中断

 

 代码部分:

        在原有的interrupt.c文件里面,我们新增加一个回调函数HAL_TIM_IC_CaptureCallback,这个回调函数在stm32g4xx_hal_tim.h的2550行的位置,如果大家记不住的话,可以去看一下

         然后,我们可以重新书写回调函数的代码了

unsigned int ccr1_val1 = 0,ccr1_val2 = 0;
unsigned int frq1 = 0,frq2 = 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)		//中断回调函数
{
	if(htim->Instance == TIM2)	//PA15
	{
		ccr1_val1 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
		__HAL_TIM_SetCounter(htim,0);			//读完之后,将计时值清零
		frq1 = (80000000/80)/ccr1_val1;			//计算频率
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
	}
	if(htim->Instance == TIM16)	//PB4
	{
		ccr1_val2 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
		__HAL_TIM_SetCounter(htim,0);			//读完之后,将计时值清零
		frq2 = (80000000/80)/ccr1_val2;			//计算频率
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
	}
	
}

        然后在main.c里面开启定时器中断

HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);	//开启定时器,R39 -> PB4
HAL_TIM_IC_Start_IT(&htim16,TIM_CHANNEL_1);	//开启定时器,R40 -> PA15

        这就是最终的一个效果 

 补发:

        采用杜邦线将PA7和PB4相连,将PA6与PA15相连,就可以测量一下上一篇博客定时器输出可调PWM 中提到的PWM频率,如图所示

         这里,我们甚至还可以进一步测量其占空比。通过一个定时器通道去测量整个周期的时间,再用一个定时器的通道去测量高电平持续的时间,其中,高电平持续的时间可以通过检测下变沿来得出。

        接下来,我们进入到STM32Cubemx中去配置一下参数,因为我们的TIM16定时器只有一个通道,所以这里,我们只能用TIM2来做一下占空比测量

        选择一个通道,设定为间接模式

         将间接模式的通道的触发方式设定为下降沿触发

  

        点击生成代码

        我们再进入一下中断回调函数,增加几句代码,在main.c里面只需要声明几个变量即可,不需要额外开启第二通道的函数。

float ccrl_val1a,ccrl_val1b = 0;
unsigned int frq1 = 0,frq2 = 0;
float duty1,duty2 = 0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)		//中断回调函数
{
	if(htim->Instance == TIM2)	//PA15
	{
		if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)//中断消息来源,选择直接输入通道
		{
			ccrl_val1a = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);	//直接	
			ccrl_val1b = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);	//间接
			__HAL_TIM_SetCounter(htim,0);		    //计数值清零
			frq1 = (80000000/80)/ccrl_val1a;		//计算频率
			duty1 = (ccrl_val1b/ccrl_val1a) * 100;  //计算占空比
			HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);	//重新开启定时器通道一
			HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);	//重新开启定时器通道二
		}
	}
	if(htim->Instance == TIM16)	//PB4
	{
		ccr1_val2 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
		__HAL_TIM_SetCounter(htim,0);			//读完之后,将计时值清零
		frq2 = (80000000/80)/ccr1_val2;			//计算频率
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
	}
	
}

        最终效果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32F103CubeMX定时器

前言定时器作为最重要的内容之一,是每一位嵌入式软件工程师必备的能力。STM32F103的定时器是非常强大的。1,他可以用于精准定时,当成延时函数来使用。不过个人不建议这么使用,因为定时器很强大,这么搞太浪费了。如果想…

Zookeeper的Java API操作

Zookeeper的Java API操作一、先启动Zookeeper集群二、IDEA 环境搭建三、创建子节点四、获取子节点并监听节点变化五、判断 Znode 是否存在六、Watcher工作流程一、先启动Zookeeper集群 二、IDEA 环境搭建 1.创建一个Maven工程:ZookeeperProject 2.在pom.xml文件添…

ARM uboot 的移植4 -从 uboot 官方标准uboot开始移植

一、添加DDR初始化1 1、分析下一步的移植路线 (1) cpu_init_crit 函数成功初始化串口、时钟后,转入 _main 函数,函数在 arch/arm/lib/crt0.S 文件中。 (2) 在 crt0.S 中首先设置栈,将 sp 指向 DDR 中的栈地址; #if defined(CONF…

CNCF x Alibaba云原生技术公开课 【重要】第九章 应用存储和持久化数据卷:核心知识

1、Pod Volumes 场景 同一个pod中的某个容器异常退出,kubelet重新拉起来,保证容器之前产生数据没丢同一个pod的多个容器共享数据 常见类型 本地存储,常用的有 emptydir/hostpath;网络存储:网络存储当前的实现方式有两…

2021年我国半导体分立器件市场规模已达3037亿元,国内功率半导体需求持续快速增长

半导体分立器件是由单个半导体晶体管构成的具有独立、完整功能的器件。例如:二极管、三极管、双极型功率晶体管(GTR)、晶闸管(可控硅)、场效应晶体管(结型场效应晶体管、MOSFET)、IGBT、IGCT、发光二极管、敏感器件等。半导体分立器件制造,指单个的半导体…

proteus I2C Debugger 查看 AT24C02写入读取

I2C Debugger仪器,在仿真调试期中,该仪器可以显示I2C数据传送时间、S(START状态)、Sr(ReStart状态)、A(Ask响应)、N (No ask状态)、P(Stop状态)、…

中值滤波+Matlab仿真+频域响应分析

中值滤波 文章目录中值滤波理解中值滤波的过程Matlab 实现实际应用频域分析中值滤波是一种滤波算法,其目的是去除信号中的噪声,而不会对信号本身造成太大的影响。它的原理非常简单:对于一个给定的窗口大小,将窗口内的数值排序&…

【C++进阶】四、红黑树(三)

目录 一、红黑树的概念 二、红黑树的性质 三、红黑树节点的定义 四、红黑树的插入 五、红黑树的验证 六、红黑树与AVL树的比较 七、完整代码 一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可…

嵌入式安防监控项目——html框架分析和环境信息刷新到网页

目录 一、html控制LED 二、模拟数据上传到html 一、html控制LED 简单来说就是html给boa服务器发了一个控制指令信息,然后boa转发给cgi进程,cgi通过消息队列和主进程通信。主进程再去启动LED子线程。 这是老师给的工程。 以前学32都有这工具那工具来管…

导航技术调研(CSDN_0023_20221217)

文章编号:CSDN_0023_20221217 目录 1. 惯性导航 2. 组合导航技术 3. 卡尔曼滤波 1. 惯性导航 惯性导航系统(INS-Inertial Navigation System)是上个世纪初发展起来的。惯性导航是一种先进的导航方法,但实现导航定位的原理却非常简单,它是…

RHCSA-用户和组管理和文件系统权限(3.11)

目录 用户(UID) 用户类别(UID): 用户的增删改查: 修改用户密码: 查看用户是否存在: 组(GID) 组的增删改查: 设置组密码: 用户…

idea集成GitHub

设置 GitHub 账号绑定账号有两种方式:1. 通过授权登录2.如果上述登录不成功,用Token口令的方式登录,口令在github账号哪里生成,点击settings --->Developer settings --->pwrsonal access tokens ----> 复制口令到idea 口…

设置cpp-httplib 服务器模式模式下的线程池大小 以及如何增加默认处理函数 以便能够实现http请求转发

先说说默认的创建的线程池数量 原因是某天调试在gdb调试下 一启动程序发现 开启了好多线程 如下图 因为我们程序 没几个线程 数了下 居然有60多个线程 不需要那么多 所以看下 httplib的源码 构造函数的时候 设置了最大线程池数量 看下这个宏 然后打印了下 发现 居然那么大 …

FusionCompute安装和配置步骤

1. 先去华为官网下载FusionCompute的镜像 下载地址:https://support.huawei.com/enterprise/zh/distributed-storage/fusioncompute-pid-8576912/software/251713663?idAbsPathfixnode01%7C22658044%7C7919788%7C9856606%7C21462752%7C8576912 下载后放在D盘中&am…

【rabbitmq 实现延迟消息-插件版本安装(docker环境)】

一:插件简介 在rabbitmq 3.5.7及以上的版本提供了一个插件(rabbitmq-delayed-message-exchange)来实现延迟队列功能。同时插件依赖Erlang/OPT 18.0及以上。 二:插件安装 1:选择适合自己安装mq 版本的插件&#xff1…

设计模式---抽象工厂模式

目录 1 介绍 2 优缺点 3 实现 1 介绍 抽象工厂模式(Abstract Factory Pattern) 是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负…

ROC和AUC

目录 ROC AUC ROC ROC曲线是Receiver Operating Characteristic Curve的简称,中文名为"受试者工作特征曲线"。ROC曲线的横坐标为假阳性率(False Postive Rate, FPR);纵坐标为真阳性率(True Positive Rate, TPR).FPR和TPR的计算方法分别为 F…

Spring——案例-业务层接口执行效率和AOP通知获取数据+AOP总结

执行时间获取:记录开始时间和结束时间,取差值。 这里使用环绕通知来实现。 环境准备: 项目文件结构: 业务层接口和实现类: 数据层: 采用mybatis注解开发,这里没有实现类,直接在接口方法里面实现映射。 domain层: 实现了数据库里面每一个…

Altium designer--软件简介及安装教程(Altium designer16)

一、软件介绍(完整安装包资源见文末链接,含破解license) Altium Designer 是一款简单易用、原生3D设计增强的一体化设计环境,结合了原理图、ECAD库、规则和限制条件、BoM、供应链管理、ECO流程和世界一流的PCB设计工具。通过原理…

Baumer工业相机中曝光与增益两种功能的优点和作用以及使用方法

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有…