STM32CubeMX配置定时器输入捕获功能

STM32CubeMX配置定时器输入捕获功能

  • 0.前言
  • 一、方法简介
  • 二、STM32CubeMX配置
    • 1.生成PWM信号
    • 2.配置TIM3_CH1进行采样
    • 3.占空比计算
  • 三、总结


参考文章:CubeMX系列教程——11 定时器输入捕获

0.前言

  最近在学习江科大STM32教程的原理部分时,发现该教程中使用定时器输入捕获功能获取信号频率及占空比的实验与之前常用的方式不同,并且该方法非常巧妙,所以水一篇记录一下。

一、方法简介

  在以往的一些教程中,定时器输入捕获功能通常由中断完成,设置好定时器的Prescaler(主要控制采样分辨率)和Count Period(主要控制最大计数次数)之后,再使能该定时器的中断,在中断中完成计数次数统计(TIM–>CCR寄存器),然后清空标志位和该寄存器,进行下次采样。如参考文章中所述,该方法也确实能够完成采样信号的频率和占空比统计,但由于一直进入中断,对CPU资源需求较大。
  在江科大的教程中,通过配置TIM定时器的从模式为reset,当定时器触发计数更新时,直接完成CCR寄存器的读取和清空,这样可以由硬件自动完成后续步骤,降低了CPU软件负载。相关的原理部分可以移步该教程进行详细了解。

二、STM32CubeMX配置

1.生成PWM信号

  首先使用TIM2_CH1产生1KHz的信号,主频72MHz,分频(72-1),计数周期(1000-1),这样即可生成1KHz信号,Pulse值设置500,即占空比为 50%:
在这里插入图片描述

2.配置TIM3_CH1进行采样

  在原先教程中,只需要配置红框中的内容,然后使能定时器中断对频率进行统计即可,在新方式中,配置定时器从模式为Reset mode,即清空技术统计,触发模式选择TI1FP1(需要根据触发源自行修改),这样当触发计数更新时,就可以自动采集统计数据并清空。如果信号毛刺较大,则需要配置Input Filter进行滤波。
在这里插入图片描述
在主函数中,先启动TIM2的PWM输出待测信号,在主循环中对TIM3的输入捕获寄存器进行读取,即可完成对信号频率的采样。
在这里插入图片描述

3.占空比计算

如果想要计算占空比,则还需要设置TIM3_CH2的相关属性。将CH2设置为下降沿采集,采集模式与CH1为互补模式,即可进行采空比的计数采集:
在这里插入图片描述
在主函数中分别启动TIM3的channel_1和channel_2采集功能,即可分别获取信号上升沿和下降沿时的计数统计,然后就可以计算出频率和占空比。
通过设置TIM2的Pulse值或预分频值,可以修改信号的占空比等参数,以验证采样结果是否正确。
在这里插入图片描述

三、总结

  从使用效果来看,由硬件自动进行信号采样和计算,确实在一定程度上减轻了CPU的计算压力,不用频繁的进入中断,感觉在此类功能上,可以完全不用由中断进行信号采样和计算了。由于freertos暂时还无法查看线程的系统占用,所以暂时还无法查看所消耗的资源,后续有机会可以考虑在RTT中对线程资源进行统计,查看实际效果。目前来看还是比较推荐的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【EI会议征稿通知】2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024)

2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024) 2024 4th International Conference on Digital Signal and Computer Communications 第四届数字信号与计算机通信国际会议(DSCC 2024)将于2024年4月12日至14日在中国-香港举行。DSCC 2024旨…

使用Rancher管理Kubernetes集群

部署前规划 整个部署包括2个部分,一是管理集群部署,二是k8s集群部署。管理集群功能主要提供web界面方式管理k8s集群。正常情况,管理集群3个节点即可,k8s集群至少3个。本文以3节点管理集群,3节点k8s集群为例 说明部署过…

【大模型研究】(1):从零开始部署书生·浦语2-20B大模型,使用fastchat和webui部署测试,autodl申请2张显卡,占用显存40G可以运行

1,演示视频 https://www.bilibili.com/video/BV1pT4y1h7Af/ 【大模型研究】(1):从零开始部署书生浦语2-20B大模型,使用fastchat和webui部署测试,autodl申请2张显卡,占用显存40G可以运行 2&…

【Web前端开发基础】CSS的盒子模型

CSS的盒子模型 一、学习目标 能够认识不同选择器的优先级公式能够进行CSS权重叠加计算,分析并解决CSS 冲突问题能够认识盒子模型的组成部分能够掌握盒子模型的边框、内边距、外边距的作用及简写形式能够计算盒子的实际大小能够了解外边距折叠现象,并知…

【Go面试向】rune和byte类型的认识与使用

【Go】rune和byte类型的认识与使用 大家好 我是寸铁👊 总结了一篇rune和byte类型的认识与使用的文章✨ 喜欢的小伙伴可以点点关注 💝 byte和rune类型定义 byte,占用1个字节,共8个比特位,所以它实际上和uint8没什么本质区别,它表示…

第十四课:eNSP AAA配置教程

一、AAA介绍 AAA是Authentication(认证)、Authorization(授权)和Accounting(计费)的简称,是一种管理框架,它提供了授权部分用户访问指定资源和记录这些用户操作行为的安全机制。因其…

ip_vs 的管理以及 keepalived + lvs 案例

ip_vs 的管理 ipvsadm 与 keepalived for lvs ipvsadm 命令及参数介绍 部署和配置LVS服务会经常用到一些命令,如ipvsadm,可以使用“ipvsadm -help”命令查看使用帮助。 ipvsadm 命令的常用参数及其说明如下: # 添加虚拟服务器# 语法&#x…

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档:http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深,具体而言,就是观察两个协议实体之间交换的报文序列&…

python系列-顺序/条件/循环语句

🌈个人主页: 会编程的果子君 ​💫个人格言:“成为自己未来的主人~” 目录 顺序语句 条件语句 什么是条件语句 语法格式 缩进和代码块 空语句pass 循环语句 while循环 for循环 continue break 顺序语句 默认情况下,Python的代码执行…

精准核酸检测 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准圈定可能被感染的人群。 现在根据传染病流调以及大数据分析&a…

Linux第34步_TF-A移植的第2步_修改设备树和tf-a.tsv

在虚拟机中,使用VSCode打开linux /atk-mp1/atk-mp1/my-tfa/目录下tf-a.code-workspace”; 找到“tf-a-stm32mp-2.2.r1/fdts”目录,就是设备树文件所在的目录。 见下图: 一、修改“stm32mp157d-atk.dts” 修改后,见下…

日志平台搭建手册

1. Java环境安装和配置 JDK要求安装1.8版本,安装可以参考《Linux安装JDK完整步骤》。 2. 创建用户 创建elk用户,用来管理elk相关的服务,包括:filebeat、logstash、elasticsearch、kibana。执行命令: useradd elk …

VC++中使用OpenCV进行人脸检测

VC中使用OpenCV进行人脸检测 对于上面的图像,如何使用OpenCV进行人脸检测呢? 使用OpenCV进行人脸检测十分简单,OpenCV官网给了一个Python人脸检测的示例程序, objectDetection.py代码如下: from __future__ import p…

计算机网络-分层结构,协议,接口,服务

文章目录 总览为什么要分层怎样分层正式认识分层概念小结 总览 为什么要分层 发送文件前要做的准备工作很多 把这个准备工作分层小问题解决,也就分层解决 怎样分层 每层相互独立,每层做的工作不同 界面自然清晰,层与层之间的接口能够体现…

(2)(2.1) Andruav Android Cellular(二)

文章目录 前言 5 Andruav Web Client 6 Andruav Telemetry 7 Andruav高级功能 8 将Andruav与SITL配合使用 9 FAQ 10 术语表 前言 Andruav 是一个基于安卓的互联系统,它将安卓手机作为公司计算机,为你的无人机和遥控车增添先进功能。 5 Andruav W…

【Java】IDEA集成开发环境工具切换JDK和设置环境变量

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…

CTF CRYPTO 密码学-5

题目名称:山岚 题目描述: 山岚 f5-lf5aa9gc9{-8648cbfb4f979c-c2a851d6e5-c} 解题过程: Step1:根据题目提示栅栏加密 分析 观察给出的密文发现有f、l、a、g等字符有规律的夹杂的密文中间,看出都是每3个字符的第1…

只会 Python 不行,不会 Python 万万不行 。。。

当下的环境大家有目共睹,未来一段时间情况如何,想必不少人心里也清楚,技术人走到中年,难免会焦虑,职场上干得不爽,但是跳槽也不容易,加上不少企业裁员,换个满意的工作更是难上加难。…

大学生图像采集上传成功的秘诀被破解了‼️

✅大学生毕业图像采集上传成功了我喜欢的 大学生图像采集可以自己上传 尤其是毕业采集, 很多同学都需要自己拍照上传,只要你照片人像比例对, 像素和大小对,真的分分钟上传成功! 毕业采集照片要求: 像素480*…

Kotlin 尾递归函数

函数式编程中,重要的概念 尾递归: 当一个函数 在最后调用 自身,称为 尾递归,是一种特殊的递归函数。 Kotlin 使用 tailrec 声明尾递归函数,可以避免 StackOverflowError 的风险。 原理是:通过编译器优化 …