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  软件环境

软件名称版本信息
STM32CubeSTM32CubeMX 6.11
STM32 HALSTM32Cube_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

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

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

相关文章

MySQL 存储过程(一)

本篇主要介绍MySQL存储过程的相关内容 目录 一、什么是存储过程? 二、基本语法 创建存储过程 调用存储过程 查看存储过程 删除存储过程 三、变量 系统变量 用户自定义变量 局部变量 四、存储过程的参数 in out inout 一、什么是存储过程&#xff1f…

9 个步骤内快速完成 SEO 审核

SEO审计对于提高网站在搜索引擎结果中的性能和可见性至关重要。这种系统评估涉及仔细检查各种元素,从关键字和页面优化到网站结构和页面速度等技术方面。在本指南中,我们将概述执行全面 SEO 检查器的 12 个基本步骤,帮助您确定优势、劣势和改…

基于小波区间相关的信号降噪方法(MATLAB 2021B)

在我们处理信号过程中最重要的任务就是找到信号隐藏的规律和信号的特征。常用的傅里叶分析法只能用于在时间域或者频率域上分析信号,而通常的数据会在时间域和频率域均有特征。而小波分析是继傅里叶分析之后的一大突破性创新,也是近年来在学术界非常热门…

小熊家务帮day5-day7 客户管理模块1 (小程序认证,手机验证码认证,账号密码认证,修改密码,找回密码等)

客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…

使用import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 创建模块后,就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码,这可以使用import语句实现。im…

react、vue动态form表单

需求在日常开发中反复写form 是一种低效的开发效率,布局而且还不同这就需要我们对其封装 为了简单明了看懂代码,我这里没有组件,都放在一起,简单抽离相信作为大佬的你,可以自己完成, 一、首先我们做动态f…

外包小菜鸡花了几个w报的课立志进大厂

不知不觉已经毕业了好几年,但是感觉还是自己的年龄增长了而已,对应的技术却没学到,最后一咬牙报了图灵的架构VIP班,不得不说,诸葛老师讲的是真的好呀,大家可以看看他的公开课,希望学完下面这些视…

JVMの内存泄漏内存溢出案例分析

1、内存溢出 内存溢出指的是程序在申请内存时,没有足够的内存可供分配,导致无法满足程序的内存需求,常见的内存溢出情况包括堆内存溢出(Heap Overflow)和栈溢出(Stack Overflow): …

《数字图像处理-OpenCV/Python》第15章:图像分割

《数字图像处理-OpenCV/Python》第15章:图像分割 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第15章:图像分割 图像分割是由图像处理到图像分析的关键步骤…

spark的简单学习二

一 spark sql基础 1.1 Dataframe 1.介绍: DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表 格,除了数据以外,还掌握数据的结构信息,即schema。同时,与Hive类似,DataFrame也支 持…

STM32_HAL_I2C_串行接口

电气特性 I2C(Inter-Integrated Circuit)是一种由飞利浦公司(现恩智浦半导体)开发的串行通信协议,用于连接低速外围设备。I2C总线只需要两根线(SDA:串行数据线,SCL:串行…

免费生物蛋白质的类chatgpt工具助手copilot:小分子、蛋白的折叠、对接等

参考: https://310.ai/copilot 可以通过自然语言对话形式实现小分子、蛋白质的相关处理:生成序列、折叠等 应该是agent技术调用不同工具实现 从UniProt数据库中搜索和加载蛋白质。使用ESM Fold方法折叠蛋白质。使用310.ai基础模型设计新蛋白质。使用TM-Align方法比较蛋白质…

【Spring Cloud】微服务链路跟踪Sleuth

目录 为什么要使用微服务链路跟踪微服务的现状多服务协同工作复杂的调用链条容易出错 微服务链路跟踪需要实现的需求实现监控决策避免技术债务快速定位故障 微服务链路跟踪的技术要求低消耗应用透明延展性可控采样率可视化 Spring Cloud Sleuth简介Spring Cloud Sleuth的4个特点…

Shell脚本快速入门

为什么要学shell?能做什么? 答:CI/CD 持续集成,自动化部署作业方式,需要将一系列linux命令程序化,shell 就能做到,提高运维人员的工作效率。 指定解析器: (1) shell解析器 #…

Linux网络-自定义协议、序列化和反序列化、网络计算服务器的实现和Windows端客户端

文章目录 前言一、自定义协议传结构体对象 序列化和反序列化什么是序列化?反序列化 二、计算器服务端(线程池版本)1.main.cc2.Socket.hpp3.protocol.hpp4.Calculator.hpp5.serverCal.hpp6.threadPool.hpp7.Task.hpp8. log.hpp 客户端Windows客…

小白级教程—安装Ubuntu 20.04 LTS服务器

下载 本教程将使用20.04版进行教学 由于官方速度可能有点慢,可以下方的使用清华镜像下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/ 点击20.24版本 选择 ubuntu-20.04.6-live-server-amd64.iso 新建虚拟机 下载好后 我们使用 VMware 打开它 这里选…

一篇文章讲透排序算法之归并排序

0.前言 本篇文章将详细解释归并排序的原理,以及递归和非递归的代码原理。 一.概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使…

苹果或面临退一赔三,新iPad悄悄砍了核心规格

618 快过去了一半,各家都卖的如火如荼,这其中当属苹果搞得最热火朝天。 某东手机竞速榜中,iPhone15 Pro Max 销量稳坐头把交椅,平板方面虽然没有统计表,但是相信销量也是不差。 加上今年刚刚发布的新系列的 iPad&…

求助!什么软件可以人声分离?手机上可以进行人声分离操作吗?

在数字时代,音频处理变得越来越重要,而人声分离技术则是其中的一项关键技术。很多人可能都有过这样的疑问:什么软件可以实现人声分离?手机上能否进行人声分离操作?今天,我们就来为大家解答这些问题&#xf…

提取伴奏与人声分离软件:5款手机必备音频软件

在数字音乐的浪潮中,音频处理软件已经成为手机用户不可或缺的工具。特别是在音乐制作、卡拉OK伴奏制作以及日常音频编辑中,人声与伴奏的分离显得尤为重要。本文将为您介绍五款免费且实用的手机音频软件,它们都具有人声与伴奏分离的功能&#…