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

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 清除CNTTIM_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.rhkb.cn/news/117324.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之组合模式

文章目录 一、介绍二、案例 一、介绍 组合模式(Composite Pattern),属于结构型设计模式。组合模式常用于树形的数据结构,比如:多级菜单、部门层级关系、html文本中的dom树。它的特点是使用户对单个对象和组合对象的使用是相同的。 二、案例…

mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器

注意 mac 自带 openssl 所以没必要像 windows 一样先安装 openssl,直接生成即可 生成 ssl/自签名 证书 生成 key # 生成rsa私钥,des3算法,server_ssl.key是秘钥文件名 1024位强度 openssl genrsa -des3 -out server_ssl.key 1024让输入两…

走进低代码平台| iVX-困境之中如何突破传统

前言: “工欲善其事,必先利其器”,找到和使用一个优质的工具平台,往往会事半功倍。 文章目录 1️⃣认识走近低代码2️⃣传统的低代码开发3️⃣无代码编辑平台一个代码生成式低代码产品iVX受面性广支持代码复用如何使用? 4️⃣总结…

如何自定义iview树形下拉内的内容

1.使用render函数给第一层父级定义 2. 使用树形结构中的render函数来定义子组件 renderContent(h, {root, node, data}) {return data.children.length0? h(span, {style: {display: inline-block,width: 400px,lineHeight: 32px}}, [h(span, [h(Icon, {type: ios-paper-outli…

PY32F003F18P单片机概述

PY32F003F18P单片机是普冉的一款ARM微控制器,内核是Cortex-M0。这个单片机的特色,就是价格便宜,FLASH和SRAM远远超过8位单片机,市场竞争力很强大。 一、硬件资源: 1)、FLASH为64K字节; 2)、SRAM为8K字节&…

解决gitee仓库中 .git 文件夹过大的问题

最近,许多项目都迁移到gitee。使用的也越来越频繁,但是今天突然收到一个仓库爆满的提示。让我一脸懵逼。本文将详细为你解答,这种情况如何处理。 1、起因 我收到的报错如下: remote: Powered by GITEE.COM [GNK-6.4] remote: T…

车载监管模块项目需求分析报告

目录 1 文档说明.......................................................................................... 4 2 参考文件.......................................................................................... 4 3 概述.......................................…

YOLOv7框架解析

YOLOv7概念 YOLOv7是基于YOLO系列的目标检测算法,由Ultra-Light-Fast-Detection(ULFD)和Scaled-YOLOv4两种算法结合而来。它是一种高效、准确的目标检测算法,具有以下特点: 1. 高效:YOLOv7在保持准确率的…

Qt应用开发(基础篇)——颜色选择器 QColorDialog

一、前言 QColorDialog类继承于QDialog,是一个设计用来选择颜色的对话框部件。 对话框窗口 QDialog QColorDialog颜色选择器一般用来让用户选择颜色,比如画图工具中选择画笔的颜色、刷子的颜色等。你可以使用静态函数QColorDialog::getColor()直接显示对…

项目 - 后端技术栈转型方案

前言 某开发项目的后端技术栈比较老了,现在想换到新的技术栈上。使用更好的模式、设计思想、更合理的架构等,为未来的需求迭代做铺垫。怎么办呢?假设系统目前在线上运行着的,直接整体换的话耗时太久,且中间还有新的需…

linux安装docker全过程

3. 第二步:设置docker的存储库。就两条命令,我们直接执行就好。 ​ sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ​​ 4. 安装docker engine和docker-compose。 执行命…

Kotlin inline、noinline、crossinline 深入解析

主要内容: inline 高价函数的原理分析Non-local returns noinlinecrossinline inline 如果有C语言基础的,inline 修饰一个函数表示该函数是一个内联函数。编译时,编译器会将内联函数的函数体拷贝到调用的地方。我们先看下在一个普通的 kot…

QChart绘制柱状图并修改单个柱状条的颜色

文章目录 前言Qt Chart修改单个柱状图的颜色柱状堆积图利用柱状堆积图实现修改单个柱状条的颜色总结 前言 Qt Charts是Qt官方提供的一个模块,用于在Qt应用程序中创建各种图表和数据可视化。它提供了一组用于绘制和展示统计数据、趋势分析、实时数据等的类和函数。 …

【前端】 Layui点击图片实现放大、关闭效果

实现效果&#xff1a;点击图片实现放大&#xff0c;点击空白处关闭效果。下图。 实现逻辑&#xff1a;二维码是使用JQ插件生成的&#xff0c;点击二维码&#xff0c;获取图片路径&#xff0c;通过Layui的弹窗显示放大后的图片。 Html <div id"qrcode" class&quo…

PowerDesigner学习笔记

备注&#xff1a;文章主要对概念数据模型进行深入分析 1.对各种模型图初步认识 1.1.概念数据模型 (CDM) (Conceptual Data Model) 对数据和信息进行建模&#xff0c;利用实体-关系图&#xff08;E-R图&#xff09;的形式组织数据&#xff0c;检验数据设计的有效性和合理性。 …

如何在 Vue TypeScript 项目使用 emits 事件

Vue是构建出色的Web应用程序的最灵活、灵活和强大的JavaScript框架之一。Vue中最重要的概念和关键特性之一是能够促进应用程序组件之间的通信。让我们深入探讨一下Vue中的“emits”概念&#xff0c;并了解它们如何以流畅和无缝的方式实现父子组件之间的通信。 Vue中的emits是什…

微信小程序手机号快速验证组件调用方式

目录 一、测试环境 二、问题现象 三、总结 手机号验证组件&#xff08;包括快速验证组件和实时验证组件&#xff09;调用后无法对事件进行回调这个问题&#xff0c;先说结论&#xff0c;以下是正确的使用方式&#xff1a; <!-- 手机号快速验证组件 --> <button op…

京东API接口解析,实现获得JD商品评论

要获取京东商品评论&#xff0c;需要使用京东的开放平台API接口。以下是一个基本的示例&#xff0c;解析并实现获取JD商品评论的API接口。 首先&#xff0c;你需要访问京东开放平台并注册一个开发者账号。注册完成后&#xff0c;你需要创建一个应用并获取到API的权限。 在获取…

深度学习-4-二维目标检测-YOLOv5源码测试与训练

本文采用的YOLOv5源码是ultralytics发行版3.1 YOLOv5源码测试与训练 1.Anaconda环境配置 1.1安装Anaconda Anaconda 是一个用于科学计算的 Python 发行版&#xff0c;支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。 官方网址下载安装包&…

LeetCode 82 删除排序链表中的重复元素 II

LeetCode 82 删除排序链表中的重复元素 II 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/description/ 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&am…