STM32f103入门(8)TIM输入捕获输入捕获测频率PWMI测占空比

news2025/4/15 19:58:19

TIM输入捕获

  • 频率测量
  • 输入捕获基本结构
  • PWMI基本结构
  • 主从触发模式
  • 输入捕获测量频率
  • PWMI测占空比

频率测量

在这里插入图片描述

输入捕获基本结构

在这里插入图片描述
CNT计数一个周期,转运到CCR1里面去,CNT=0
这时候CCR1=N
Fx=Fc/N Fc cnt的驱动时钟 这时候就可以得到频率 Fc=72M/PSC

PWMI基本结构

在这里插入图片描述
这里用到了两个CCR2 CCR2用来记录高电平时候的cnt 正好为总数的占空比
CCR2/CCR1 就是占空比

主从触发模式

在这里插入图片描述

输入捕获测量频率

由于我们是测量频率,是要修改频率的
我们之前都是修改占空比,修改的是CCR,这里不同
频率=72M/(PSC+1)/(ARR+1)
PSC 和 ARR都可以调节频率
但是占空比=CRR/ARR+1 ,如果调节ARR会影响到占空比
而通过PSC则不会影响占空比

单独修改PSC的函数为

void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)
TIM2  PSC的值、重装模式(立刻,还是周期结束)

第一步 RCC开启时钟
GPIO 和 TIM的时钟打开
第二步 GPIO初始化,把GPIO配置成输入模式 一般是上拉输入
第三步 配置时基单元,让cnt计数器在内部时钟的驱动下自增运行
第四步 配置输入捕获单元包括滤波器,极性,直连通道,交叉通道,分频器这些参数
一个结构体
第五步 选择从模式的触发源 触发源选择为TI1FP1
第六步 选择触发之后执行的操作,执行reset操作
最后 调用 TIM_CMD 开启定时器

IC 输入捕获常用函数

TIM_ICInit 输入捕获的初始化函数  只可以1个通道  41 通用 结构体里区别
TIM_PWMIConfig 也是初始化  可以两个同时
TIM_OCStructInit 可以给输入捕获结构体一个初始值
TIM_SelectInputTrigger 选择触发源TRGI 从模式的触发源选择
TIM_SelectOutputTrigger 选择主模式输出的触发源
TIM_SelectSlaveMode 选择从模式

配置四个 分频器
void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD);

输出比较下 CCR只写
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);

输入捕获下 CCR只读
分别读取四个通道的CCR
uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx);
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);

本次代码需要注意的点

TIM3 对应的四个通道为PA6 PA7 PB0 PB1
GPIO引脚设置为上拉输入 IPU  PA6
为了让cnt更好的计数 而不被重载 我们需要把ARR设置为65536-1

输入捕获单元结构体配置
结构体从滤波开始 每一部分都对应了图片的一个模块

TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;  //设置通道1 PA6
TIM_ICInitStructure.TIM_ICFilter = 0xF;//滤波 连续的高电平 为 高电平,采样频率很高    
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//极性   边沿检测 机型选择 rising or falling
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 分频器 不分频
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //配置数据选择器,直连通道还是交叉通道  这里是直连  交叉为indirectTI
TIM_ICInit(TIM3, &TIM_ICInitStructure);

配置 TRGI的触发源为TI1FP1

	TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);
	//配置从模式为Reset 清除CNT
	TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
	/*TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1)是一个函数调用,用于选择定时器 TIM3 的输入触发源。在这种模式下,选择了 TI1FP1 作为触发源。
TI1FP1 是一个特定的触发源选择,它指的是使用 TIM3 输入捕获通道 1 (TI1) 的上升或下降沿来触发定时器。这意味着当输入捕获通道 1 上出现一个上升或下降沿时,TIM3 定时器将会被触发。
具体地,当 TI1FP1 触发条件满足时,TIM3 可能执行一些预定义的操作,例如开始一个计时操作、启动/停止测量等。触发操作的具体行为取决于你的代码实现。
要注意的是,使用 TIM_SelectInputTrigger 函数只是选择了触发源。在使用时,你还需要配置相应的引脚和定时器相关的参数,以确保触发源的正确连接和正常工作。*/

PWMI测占空比

TIM3 增加通道3
输出捕获单元设置为交叉通道,下降沿触发
因为在上升沿结束时 cnt 清零 所以过了半个周期到了下降沿 CCR2=CNT=总的1半
然后到了上升沿CCR=CNT=总的
最后占空比的时候就时
CCR2/CCR1 经过测量 CCR总是计数少一
所以需要+1
(CCR2+1)/(CCR+1)

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

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

相关文章

STM32微控制器的低功耗模式

STM32微控制器的低功耗模式(Low-power modes):Sleep mode、Stop mode 和 Standby mode。 1.1 Sleep Mode(睡眠模式): 把STM32微控制器当作一位劳累的工人,他在工作过程中需要短暂的休息。在Sleep模式下,微控制器会关闭一部分电路,减小功耗,但仍然保持对中央处理单…

【Spring Boot】通过AOP拦截Spring Boot日志并将其存入数据库

文章目录 前言摘要AOP介绍AOP的实现添加依赖配置数据库连接定义日志实体类定义日志拦截器使用AOP拦截日志并保存到数据库中 代码方法介绍测试用例全文小结 前言 在软件开发中,常常需要记录系统运行时的日志。日志记录有助于排查系统问题、优化系统性能、监控操作行…

滑动窗口和双指针

滑动窗口和双指针 一、循环不变量1.1 定义1.2 总结 二、使用循环不变量写对代码2.1 注意2.2 总结 三、滑动窗口3.1 固定长度的滑动窗口(同向交替移动的两个变量)3.2 不定长度的滑动窗口3.2.1 定义3.2.2 总结 3.3 计数问题3.3.1 标准3.3.2 总结 3.4 使用数…

three.js(一)创建场景添加物体

目录 前言 一、创建Three世界 1.导入Three.js 2.引入three 3.创建基本结构 4.创建场景、相机、渲染器 场景 相机 渲染器 二、向场景中存放物体 1.创建一个物体 几何体 材质 网格模型 前言 官方网站https://threejs.org/网站目录翻译 文档连接https://threejs.org/…

postgresql-条件表达式

postgresql-条件表达式 简单Case表达式搜索Case表达式缩写函数总结 简单Case表达式 select e.first_name , e.last_name , e.department_id , case e.department_id when 90 then 管理when 60 then 开发else 其他end as "部门" from cps.public.employees e ;-- 统…

JavaWeb 文件上传和下载

目录 一、文件上传 1.文件上传和下载的使用说明 : 2.文件上传基本原理 : 3.文件上传经典案例 : 3.1 页面实现: 3.2 servlet实现 : 3.3 工具类实现 : 3.4 运行测试 : 3.5 注意事项 : 二、文件下载 1.文件下载基本原理 : 2.文件下载经典案例 : 2.1 准备工作 2.2 页面…

2022年03月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:多项式相加 我们经常遇到两多项式相加的情况, 在这里, 我们就需要用程序来模拟实现把两个多项式相加到一起。 首先, 我们会有两个多项式,每个多项式是独立的一行, 每个多项式由系数、 幂数这样的多个整数对来表示。 如多项式 2…

专业的视觉特效处理包,FxFactory 8 Pro for Mac助您打造精彩视频

FxFactory 8 Pro for Mac是一款强大的视觉特效处理包,专门为Mac用户设计。它集成了超过200种高质量的视觉效果和过渡效果,可以轻松地应用于各种视频项目中。该软件提供了一个直观的界面,用户可以通过简单拖放操作将特效应用到视频片段上。它支…

【golang】调度系列之goroutine

前面的两篇,从相对比较简单的锁的内容入手(也是干货满满),开始了go的系列。这篇开始,进入更核心的内容。我们知道,go应该是第一门在语言层面支持协程的编程语言(可能是我孤陋寡闻),goroutine也完全算的上是go的门面。g…

[SpringBoot3]博客管理系统(源码放评论区了)

八、博客管理系统 创建新的SpringBoot项目,综合运用以上知识点,做一个文章管理的后台应用。依赖: Spring WebLombokThymeleafMyBatis FrameworkMySQL DriverBean Validationhutool 需求:文章管理工作,发布新文章&…

Web安全——穷举爆破上篇(仅供学习)

Web安全 一、概述二、常见的服务1、burpsuite 穷举后台密码2、burpsuite 对 webshell 穷举破解密码3、有 token 防御的网站后台穷举破解密码3.1 burpsuite 设置宏获取 token 对网站后台密码破解3.2 编写脚本获取token 对网站后台密码破解 4、针对有验证码后台的穷举方法4.1 coo…

华为云云服务器评测 [Vue3 博物馆管理系统] 使用Vue3、Element-plus菜单组件构建轮播图

系列文章目录 第一章 定制上中下(顶部菜单、底部区域、中间主区域显示)三层结构首页 第二章 使用Vue3、Element-plus菜单组件构建菜单 第三章 使用Vue3、Element-plus菜单组件构建轮播图 [第四章 使用Vue3、Element-plus菜单组件构建组图文章] 华为云云…

WebSocket(一)

一.什么是WebSocket 【1】WebSocket是一种协议,设计用于提供低延迟,全双工和长期运行的连接。 全双工:通信的两个参与方可以同时发送和接收数据,不需要等待对方的响应或传输完成。 【2】比较 传统通信(http协议&am…

QML与C++的交互操作

QML旨在通过C 代码轻松扩展。Qt QML模块中的类使QML对象能够从C 加载和操作,QML引擎与Qt元对象系统集成的本质使得C 功能可以直接从QML调用。这允许开发混合应用程序,这些应用程序是通过混合使用QML,JavaScript和C 代码实现的。除了从QML访问…

15年检测生涯转瞬即逝,复旦MBA助力邢国芒实现质量强国梦

日月光华,旦复旦兮!复旦MBA如同一个巨大的磁场,吸引了诸多来自五湖四海、各行各业的职场精英。从初入职场的青涩懵懂到如今的独当一面专业干练,他们逐渐成长为职场的中坚力量,在各自领域内发光发热。作为新时代的青年&…

多线程应用——阻塞队列

阻塞队列 文章目录 阻塞队列1.队列的概念2.阻塞队列3.现实中的例子4.消息队列5.使用队列的优势1.解耦2.削峰填谷3.异步操作 6.实现 1.队列的概念 一种先进先出的数据结构 2.阻塞队列 队列写元素是从队尾插入,从对头取出 当插入元素时,先判断一下队列…

数据治理-数据管理框架

DMBOK2提出的想法和概念在不同的组织中都可以应用,组织所采用的数据管理方法取决于某些关键要素,如其所处行业、所应用的数据范围、企业文化、成熟度、战略、愿景以及待解决的问题和挑战。 战略一致性模型和阿姆斯特丹模型,展示了组织管理数…

算法通关村第十二关——字符串反转问题解析

前言 字符串反转是关于字符串算法里的重要问题,虽然不是太难,但需要考虑到一些边界问题。本篇文章就对几道字符串反转题目进行分析。 1.反转字符串 力扣344题,编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数…

opencv 提取选中区域内指定hsv颜色的水印

基于《QT 插件化图像算法研究平台》做的功能插件。提取选中区域内指定hsv颜色的水印。 《QT 插件化图像算法研究平台》有个HSV COLOR PICK功能,可以很直观、方便地分析出水印 的hsv颜色,比如, 蓝色:100,180,0,255,100,255。 然后利用 opencv …

JavaScript中关于数组的小挑战

史蒂芬仍在建立他的小费计算器,使用的规则与以前一样: 如果账单价值在50到300之间,小费为账单的15%,如果价值不同,小费为20%。 编写一个函数’calcTip’,将任何账单值作为输入,并返回相应的小费…