STM32高级控制定时器之输入捕获模式
目录
概述
1 输入捕获模式
1.1 原理介绍
1.2 实现步骤
1.3 发生输入捕获流程
2 使用STM32Cube配置工程
2.1 软件环境
2.2 配置参数
2.3 生成项目文件
3 功能实现
3.1 PWM调制占空比函数
3.2 应用函数库
4 测试
4.1 功能框图
4.2 运行结果
源代码下载地址:
stm32-f103-rct6-输入捕获测试代码资源-CSDN文库
概述
本文主要介绍STM32高级定时器的用法至输入捕获功能,该功能可用于捕捉外部输入信号的频率。笔者通过详细的案例介绍这个功能,包括理论知识,实现原理,以及如何使用STM32Cube配置基本的参数,编写实用代码,实现捕捉频率当的功能。
1 输入捕获模式
1.1 原理介绍
在输入捕获模式下,捕获/比较寄存器(TIMx_CCRx)用于锁存在由相应的ICx信号检测到的转变之后的计数器的值。当发生捕获,相应的CCXIF标志(TIMx_SR寄存器)被设置,并且中断或
如果它们被启用,则可以发送DMA请求。如果在CCxIF标志为则过捕获标志CCxOF(TIMx_SR寄存器)被设置。CCxIF可以是软件通过将其写入“0”或读取存储在中的捕获数据来清除TIMx_CCRx寄存器。CCxOF在写入“0”时被清除。
1.2 实现步骤
以下示例显示如何在TI1时捕获TIMx_CCR1中的计数器值投入增加。要执行此操作,请使用以下步骤:
1) 选择激活输入:TIMx_CCR1必须连接到TI1输入,因此写入CC1S位到TIMx_ CCMR1寄存器中的01。一旦CC1S变得与00不同,通道被配置在输入端并且TIMx_ CCR1寄存器变为只读。
2) 针对连接到的信号编程所需的输入滤波器持续时间定时器(如果输入是TIx输入,则通过在TIMx_CCMRx寄存器中编程ICxF位)。让我们想象一下,当切换时,输入信号在at must five期间不稳定内部时钟周期。我们必须编程一个比这五个时钟更长的滤波器持续时间循环。当8个连续样本具有新的已经检测到电平(以fDTS频率采样)。然后将IC1F位写入中的0011
CCMR1寄存器。3) 通过将CC1P位写入0,选择TI1通道上活动转换的边缘CCER寄存器(在这种情况下为上升沿)。
4) 对输入预分频器进行编程。在我们的示例中,我们希望捕获在每个有效转换,因此预分频器被禁用(将IC1PS位写入TIMx_CCMR1寄存器)
5 ) 通过在中设置CC1E位,启用从计数器到捕获寄存器的捕获TIMx_CCER寄存器。
6 ) 如果需要,通过在中设置CC1IE位来启用相关的中断请求TIMx_DIER寄存器和/或DMA请求,通过在TIMx_DIER寄存器。
1.3 发生输入捕获流程
为了处理过度捕获,建议在过度捕获标志。这是为了避免错过阅读后可能发生的过度捕获
标志和读取数据之前。
1) TIMx_CCR1寄存器在激活转换时获取计数器的值。
2)CC1IF标志被设置(中断标志)。如果至少有两次连续捕获,也会设置CC1OF发生,而标志未被清除。
3)根据CC1IE位生成中断
4)根据CC1DE位生成DMA请求
注意问题:
IC中断和/或DMA请求可以由软件通过设置EGR寄存器中相应的CCxG位。
2 使用STM32Cube配置工程
2.1 软件环境
| 软件名称 | 版本信息 |
|---|---|
| STM32Cube | STM32CubeMX 6.11 |
| STM32 HAL | STM32Cube_FW_F1_V1.8.5 |
2.2 配置参数
1)配置系统时钟:72M Hz,Timer的工作时钟为72M Hz

2) 使用定时器1配置输入捕获功能
其对应的IO口配置

计数器时钟参数和捕获通道参数
3)配置PWM相关参数
选择定时器8作为控制PWM的输出

PWM波对应的IO接口
Timer-8定时器相关参数

和PWM相关的参数配置

2.3 生成项目文件
使用STM32FCube完成项目配置后,就可以生成工程文件。生成代码如下:

3 功能实现
3.1 PWM调制占空比函数
在tim.c中实现一个函数,其用于实现调制PWM的占空比。函数原型如下:
void HAL_TIM_SetPWM_Pulse( uint32_t Pulse, uint32_t Channel)
{TIM_OC_InitTypeDef sConfigOC = {0};sConfigOC.OCMode = TIM_OCMODE_PWM1;sConfigOC.Pulse = Pulse;sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, Channel) != HAL_OK){Error_Handler();}
}
3.2 应用函数库
创建App/product目录,实现应用函数。
1)pwm_ctrl.c 实现pwm的功能控制
2)input_capture.c 实现捕捉功能

1) 在 pwm_ctrl.c文件中配置PWM的占空比
void pwm_ctrl_Init( void )
{HAL_TIM_Base_Start( &htim8 );HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_1); // PC6 HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_2); // PC7HAL_TIM_SetPWM_Pulse( 500, TIM_CHANNEL_1);HAL_TIM_SetPWM_Pulse( 500, TIM_CHANNEL_2);
}
2)input_capture.c 实现捕捉功能
初始化捕捉功能参数:
static void set_captureMode( uint32_t Channel, uint32_t ICPolarity )
{TIM_IC_InitTypeDef sConfigIC = {0};if(HAL_TIM_IC_Stop_IT(&htim1, Channel) != HAL_OK){/* Starting Error */Error_Handler();}sConfigIC.ICPolarity = ICPolarity;sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;sConfigIC.ICFilter = 0;if (HAL_TIM_IC_ConfigChannel(&htim1, &sConfigIC, Channel) != HAL_OK){Error_Handler();}if(HAL_TIM_IC_Start_IT(&htim1, Channel) != HAL_OK) {/* Starting Error */Error_Handler();}
}
3)捕捉功能回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{uint32_t uwIC2Value0;static uint32_t uwIC2Value2_list[2];static uint8_t count = 0;if(htim->Instance == TIM1) {if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){/* Get the 1st Input Capture value */uwIC2Value0 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);uwIC2Value2_list[count] = uwIC2Value0;count++;if( count == 2 ){count = 0;if( uwIC2Value2_list[1] > uwIC2Value2_list[0])printf(" cycle = %d us\r\n", uwIC2Value2_list[1]- uwIC2Value2_list[0]);}}}
}
4 测试

4.1 功能框图

4.2 运行结果
1)使用逻辑分析仪测试,PWM的周期为10ms

2)使用捕捉功能测试的数据为: 10000us = 10ms

相关文章:
STM32高级控制定时器之输入捕获模式
目录 概述 1 输入捕获模式 1.1 原理介绍 1.2 实现步骤 1.3 发生输入捕获流程 2 使用STM32Cube配置工程 2.1 软件环境 2.2 配置参数 2.3 生成项目文件 3 功能实现 3.1 PWM调制占空比函数 3.2 应用函数库 4 测试 4.1 功能框图 4.2 运行结果 源代码下载地址…...
使用 Vue 3 和 qrcode.js 开发二维码显示组件
二维码在现代应用中广泛使用,例如支付、身份验证、链接分享等。本文将介绍如何使用 Vue 3 和 qrcode.js 库来创建一个灵活的二维码显示组件,并展示如何在应用中使用它。 1. 安装必要的依赖 首先,我们需要安装 Vue 3 和 qrcode.js。如果你还…...
LabVIEW异步编程概述
LabVIEW异步编程是一种在图形化编程环境中处理并行任务的方法。通过异步执行,可以提高程序的响应速度和资源利用效率,使得多个任务可以独立进行而不互相干扰。 原理 LabVIEW异步编程的核心在于使用异步调用节点(Asynchronous Call By Refer…...
【数据库】MySQL表的操作
目录 一.创建表 二.查看表 三.修改表 四.删除表 一.创建表 基本语法: CREATE TABLE table_name(field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校验规则 engine 储存引擎field表示列名 datatype表示列的类型 charatcer se…...
【mybatis解决oracle查询in超过1000条数据】
1、因为代码中前人未考虑in 数据可能大于1000,导致现在系统报错,MPP low前人 直接上sql select * from table a <where><if test"list ! null and list.size > 0">and a.name in<foreach collection"list" inde…...
EasyExcel之动态表头导出不生效
今天接到一个优化需求,表格导出后的表头顺序和页面不一致,要优化成一致的。根据传入的字段,动态导出数据,并保证顺序。 我看到导出的实体类都有ExcelProperty注解,同时也在官网查看了这注解的含义和使用。 ExcelPrope…...
appium元素定位工具_uiautomatorviewer.bat
特点: uiautomatorviewer是android-sdk自带的元素定位工具uiautomatorviewer只能用于安卓系统;它是通过截屏分析XML布局文件方式,来提供控件信息的查看服务 uiautomatorviewer.bat 基本使用 路径:这个工具是Android SDK中自带&…...
手机离线翻译哪个好?断网翻译也能超丝滑
有时在异国他乡,面对语言不通的窘境,即便是简单的对话也变得异常困难,真是挑战满满! 然而,能离线翻译的软件让语言障碍不再是问题,不必依赖网络也能轻松进行翻译啦~ 只需下载所需的语言包,选择…...
神器!!Python热重载调试【送源码】
在 Python 开发的路上,调试是我们不可避免的一环。 而今天推荐的开源项目Reloadium ,让你在不重启程序的情况下实现代码的即时更新和调试。 🔄 Reloadium 功能亮点: 1. 热重载魔法: Reloadium 不仅仅能够实现代码的…...
Flutter基础 -- Dart 语言 -- 列表集合枚举
目录 1. 列表 List 1.1 初始 1.2 声明 1.2.1 自动 1.2.2 定长 1.2.3 生成数据 1.3 属性 1.4 方法 1.4.1 添加 1.4.2 查询 1.4.3 删除 1.4.4 Range 1.4.5 洗牌 1.4.6 排序 1.4.7 复制子列表 1.4.8 操作符 2. 集合 Map 2.1 初始 2.2 声明 2.2.1 松散 2.2.2 …...
怎么花草识别?方法有三种!
怎么花草识别?在这个五彩斑斓的世界里,花草是我们生活中不可或缺的一部分。它们点缀着我们的环境,为我们带来无尽的美丽与惊喜。然而,面对众多的花草种类,你是否曾感到困惑和迷茫,不知道如何识别它们&#…...
【qt】自定义对话框
自定义对话框 一.自定义对话框的使用1.应用场景2.项目效果3.界面拖放4.模型和视图的设置5.action功能实现 二.自定义对话框的创建1.设置对话框界面2.创建对话框 三.对话框的功能与样式实现1.对话框数据的交换2.对话框的显示3.设置对话框的特性4.完成按钮的功能 四.编辑表头的对…...
汽车IVI中控开发入门及进阶(二十二):video decoder视频解码芯片
前言: 视频解码器在许多汽车、专业和消费视频应用中仍有需求。Analog Devices是模拟视频产品领域的行业领导者,提供一系列视频解码器,可将标准(SD,standard definition)和高清(HD,High definition)分辨率的模拟视频高质量转换为MIPI或TTL格式的数字视频数据。典型的应…...
混沌测试介绍
混沌测试介绍 1. 混沌测试简介 混沌测试(Chaos Engineering)是一种测试方法,通过在生产环境中故意引入故障,测试系统在异常情况下的表现,以提高系统的弹性和鲁棒性。其目标是确保系统能够在面对不可预见的事件或故障…...
python 单链表创建,遍历
# !/usr/bin/python3 # -*- coding:utf-8 -*- """ author: JHC000abcgmail.com file: 111.py time: 2024/05/30 21:37:09 desc:""" # 定义单链表结构 class ListNode:def __init__(self,value0,nextNone):self.value valueself.next nextdef _…...
【方法】如何取消PPT“以只读方式打开“?
以“只读方式”打开的PPT,可能会受到不同的限制,比如无法编辑修改内容,无法保存原文件等。那如何取消PPT的“只读方式”呢?不同形式的“只读方式”,取消方法不同,下面一起来看看吧! “只读方式”…...
ChatTTS,语气韵律媲美真人的开源TTS模型,文字转语音界的新魁首,对标微软Azure-tts
前两天 2noise 团队开源了ChatTTS项目,并且释出了相关的音色模型权重,效果确实非常惊艳,让人一听难忘,即使摆在微软的商业级项目Azure-tts面前,也是毫不逊色的。 ChatTTS是专门为对话场景设计的文本转语音模型&#x…...
Django企业招聘后台管理系统开发实战四
前言 首先我们看一下产品的需求背景,这个产品为了解决招聘面试的过程中,线下面试管理效率低,面试过程和结果不方便跟踪的痛点 招聘管理的系统几乎是每一家中小公司都需要的产品 我们以校园招聘的面试为例子来做 MVP 产品迭代 首先我们来看一下…...
APP上架 篇一:上架资质要求
文章目录 系列文章Apple Store商店上架App官方文档资质要求费用详情Google Play商店上架App官方文档资质要求费用详情华为应用商店上架App官方文档资质要求费用详情小米应用商店上架App官方文档资质要求...
C++入门之类和对象
目录 1.C相对于C语言的一些不同的小语法 1.1命名空间 1.2C输入&输出 1.3缺省参数 1.4函数重载 1.5引用 1.6内联函数 1.7auto 1.8nullptr 2.类的引入 2.1类的内部 2.2this指针 2.3类的默认成员函数 2.3.1构造函数 2.3.2析构函数 2.3.3拷贝构造 2.4运…...
Flow Matching 流匹配策略:从理论到机器人实时控制
目录 1.1.1.1 流匹配的基本定义 1.1.1.2 连续性方程与概率路径演化 1.1.1.3 流匹配损失函数的标准形式 1.2.1.1 条件概率路径的构造原理 1.2.1.2 条件向量场的确定性映射 1.2.1.3 条件流匹配损失的等价性证明 1.2.1.4 线性插值路径的实例化 2.1.1.1 Kantorovich最优传输…...
北海特色美食哪家好
在北海,海鲜始终是餐桌上最核心的语言,但从风味调性来看,无论是早市现捞的海虾、生蚝,还是北部湾的鳗鱼、鲍鱼,呈现出的多为“鲜甜”“咸鲜”这类闽粤沿海常见的味觉模式。游客在选择时往往面临两个现实:一…...
红日靶场(二)phpstudy服务异常排查与修复指南
1. phpstudy服务异常排查思路 遇到phpstudy服务启动失败时,很多新手会直接重装软件,其实80%的问题通过系统化排查都能解决。我处理过上百个红日靶场环境,总结出这套黄金排查法则: 首先确认报错类型,常见的三种情况&…...
Comsol 多裂纹水力压裂扩展:拉伸与压缩下的破坏探索
comsol多裂纹水力压裂扩展,可以实现拉伸和压缩下的破坏。在工程领域,水力压裂是一项至关重要的技术,尤其在石油和天然气开采等方面应用广泛。而 Comsol 作为强大的多物理场仿真软件,为我们研究多裂纹水力压裂扩展提供了有力工具&a…...
从‘猫狗大战’到医疗影像:LRP(逐层相关性传播)如何帮医生看懂AI的‘诊断思路’?
从‘猫狗大战’到医疗影像:LRP如何成为医生与AI的翻译官 当一位放射科医生第一次看到AI系统标注的肺结节"恶性概率92%"时,他的反应不是赞叹,而是皱眉:"它凭什么这么判断?"这种场景正在全球各大医院…...
FlowState Lab跨周期波动模式提取效果:从秒级到年度的规律发现
FlowState Lab跨周期波动模式提取效果:从秒级到年度的规律发现 1. 时间序列分析的革命性突破 时间序列分析领域最近迎来了一项重要突破。传统方法往往只能聚焦单一时间尺度,要么分析高频交易数据,要么研究季节性规律,很难同时捕…...
服装打版辅助新思路:Nano-Banana软萌拆拆屋结构化拆解应用
服装打版辅助新思路:Nano-Banana软萌拆拆屋结构化拆解应用 1. 引言:当服装设计遇见“拆解魔法” 想象一下,你是一位服装设计师,面对一件构思精巧的连衣裙,如何向打版师清晰地传达它的内部结构?是画一堆复…...
超实用AI专著生成攻略,掌握工具技巧,轻松搞定大型学术著作
学术专著创作困境与AI写作工具解决方案 撰写学术专著时的困难,不仅仅体现在“能够写出来”,更关键的是“能够成功出版并获得认可”。在当今的出版行业,学术专著的受众群体相对较小,出版社在选择题材时,对其学术价值以…...
无GPU方案:星图平台OpenClaw镜像+百川2-13B-4bits的云端沙盒体验
无GPU方案:星图平台OpenClaw镜像百川2-13B-4bits的云端沙盒体验 1. 为什么选择云端沙盒方案 作为一个长期折腾本地AI部署的技术爱好者,我最近遇到了一个典型困境:想体验最新的OpenClaw智能体框架,但手头的MacBook Pro只有集成显…...
3D Face HRN真实案例:用于司法鉴定中面部特征三维比对辅助系统
3D Face HRN真实案例:用于司法鉴定中面部特征三维比对辅助系统 1. 引言:从平面照片到三维证据的突破 在司法鉴定领域,面部特征比对一直是身份识别的重要技术手段。传统的2D照片比对方法存在角度、光照、表情等多重限制,往往难以…...
