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

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

前言:

        定时器的三大功能还剩下最后一个捕获,而这在蓝桥杯嵌入式开发板上也有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);}}

        最终效果如下:

 

相关文章:

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

前言: 定时器的三大功能还剩下最后一个捕获,而这在蓝桥杯嵌入式开发板上也有555定时器可以作为信号发生器供定时器来测量。 原理图部分: 开发板上集成了两个555定时器,一个通过跳线帽跟PA15相连,最终接到了旋钮R40上&…...

多态的定义、重写、原理

多态 文章目录多态多态的定义和条件协变(父类和子类的返回值类型不同)函数隐藏和虚函数重写的比较析构函数的重写关键字final和override抽象类多态的原理单继承和多继承的虚函数表单继承下的虚函数表多继承下的虚函数表多态的定义和条件 定义&#xff1…...

Angular 配置api代理 proxy 实践

话不多说,直奔主题 $方式一 第一步,在根目录或/src 下新建一个 proxy.conf.json 文件 备注:这里不用纠结文件名称即xxx.xxx.json,只要使用时能找到,且正确配置文件内容格式即可 {"/dev-list": {"target…...

ES: 数据增,删,改,批量操作

1> 指定id 新增 _id 1 新增一条. 此命令重复执行,就是更新id1的数据 POST employee_zcy/_doc/1 {"uid" : "1234","phone":"12345678909","message" : "qq","msgcode" : "1","send…...

伯努利方程示例 Python 计算(汽水流体和喷泉工程)

伯努利原理 在流体的水平流动中,流体速度较高的点比流体速度较慢的点具有更小的压力。 不可压缩流体在到达狭窄的收缩部分时必须加速,以保持恒定的体积流量。 这就是为什么软管上的窄喷嘴会导致水流加速的原因。 但有些事情可能会困扰您这一现象。 如果…...

2022年中职网络安全竞赛——应用服务漏洞扫描与利用解析(详细)

应用服务漏洞扫描与利用 任务环境说明: 服务器场景:Server2115服务器场景操作系统:未知(关闭链接)使用命令nmap探测目标靶机的服务版本信息,将需要使用的参数作为FLAG进行提交;通过上述端口访问靶机系统并探测隐藏的页面,将找到的敏感文件、目录名作为FLAG(形式:[敏…...

yyds,Elasticsearch Template自动化管理新索引创建

文章目录一、什么是Elasticsearch Template?二、Elasticsearch Template的用法2.1、创建模板2.2、验证模板2.3、应用模板2.4、删除模板2.5、组合模板2.6、如何在同一个模板中定义多种匹配模式2.7、模板优先级2.8、提前模拟索引的最终映射三、Elasticsearch Template…...

蓝桥杯嵌入式ADC与DAC(都不需要中断)

目录 1.原理图 (1)ADC的原理图 (2)DAC的原理图 2.STM32CubeMX的配置 (1)ADC的配置 (2)DAC配置 3.代码部分 (1)ADC代码 (2)DA…...

网络视频的防盗与破解

网络视频(Web 视频)是指利用 HTML5 技术在浏览器中播放的视频,这类视频资源通常可以被随意下载,某些行业(比如教培行业)如果希望保护自己的视频资源不被下载,就需要对视频做防盗链处理。 防盗链需要着重加强两个方面的安全性:网络传输和客户端。 网络传输安全 网络传…...

FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(二)

通过上面的介绍相信大家对数字变频已经有了一个较为整体性的认识,下面笔者来对照XILINX的DDS IP核对数字变频技术展开更进一步的说明,做到了理论和实践很好地结合,这样大家再带入Modelsim进行仿真测试就不仅掌握了数字变频的理论知识&#xf…...

接口中新增方法,接口应用和适配器设计模式

目录 JDK8以后接口中新增方法 接口中默认方法注意事项: 新增方法static 接口中静态方法的注意事项: JDK9新增的方法 JDK8以后接口中新增方法 允许在接口中定义默认的方法,需要使用关键字default修饰作用:解决接口升级的问题 …...

自主HttpServer实现(C++实战项目)

文章目录项目介绍CGI技术概念原理设计框架日志文件TCPServer任务类初始化与启动HttpServerHTTP请求结构HTTP响应结构线程回调EndPoint类EndPoint主体框架读取HTTP请求处理HTTP请求CGI处理非CGI处理构建HTTP响应发送HTTP响应接入线程池简单测试项目扩展项目介绍 该项目是一个基…...

第26篇:Java数组API总结

目录 1、数组基本概念 2、Java如何声明数组 2.1中括号在数据类型之前 2.2 中括号在数据类型之后...

[C++] 信号

前言 信号与槽是QT的一个概念&#xff0c;原版C里并没有 使用 先声明一些类 Receiver负责接收信号&#xff0c;Emitter2则是负责发送 class Receiver : public ntl::Reflectible { public:void received(int num){std::cout << "received:" << num &…...

单片机——矩阵按键模块

主要目的 学会按键扫描 1.延时函数 延时函数部分详见链接: 单片机控制一盏灯的亮与灭程序解释 void delay (uint k) //定义延时函数{uint i,j;for(i<0;i<k;i){for(j0;j<113;j){;}}}这个程序里面的延时函数的目的是按键消抖。 2.按键扫描模块 这是本次实验的重点&a…...

Android学习之网络操作

网络操作 Android平台下的原生网络操作可以分为以下几步&#xff1a; 创建URL对象&#xff1b;通过URL对象获取HttpURLConnection对象&#xff1b;通过HttpURLConnection对象设置请求头键值对、网络连接超时时间等&#xff1b;通过HttpURLConnection对象的connect()方法建立网…...

Delphi XE开发android开发环境搭建

Delphi xe为使用Delphi作为开发工具的程序员,提供了开发APP的便捷工具,它的开发环境也是非常容易搭建,这里我简述一下Android的开发环境搭建,Delphi XE开发Android程序的开发环境需要三个软件支持:Java SE Development开发环境、Android SDK和Android Ndk开发环境。 1、安…...

flink入门-流处理

入门需要掌握&#xff1a;从入门demo理解、flink 系统架构&#xff08;看几个关键组件&#xff09;、安装、使用flink的命令跑jar包flink的webUI 界面的监控、常见错误、调优 一、入门demo&#xff1a;统计单词个数 0、单词txt 文本内容(words.txt)&#xff1a; hello world …...

【数据结构】单链表中,如何实现 将链表中所有结点的链接方向“原地”逆转

一.实现一个单链表&#xff08;无头单向不循环&#xff09; 我们首先实现一个无头单向不循环单链表。 写出基本的增删查改功能&#xff0c;以及其它的一些功能&#xff08;可忽略&#xff09;。 #include<stdio.h> #include<assert.h> #include<stdlib.h>…...

摘花生(简单DP)

Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上面有若干颗花生&#xff0c;经过一株花生苗就能摘走该它上面所有的花生。Hel…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...