当前位置: 首页 > news >正文

STM32标准库学习笔记-6.定时器-输入捕获

参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】

定时器输入捕获

  • IC(Input Capture)输入捕获
  • 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
  • 每个高级定时器和通用定时器都拥有4个输入捕获通道
  • 可配置为PWMI模式,同时测量频率和占空比
  • 可配合主从触发模式,实现硬件全自动测量
频率测量
  •         测频法:在闸门时间T内,对上升沿计次,得到N,则频率f_x=N / T
  •         测周法:两个上升沿内,以标准频率fc计次,得到N ,则频率f_x=f_c / N
  •         中界频率:测频法与测周法误差相等的频率点f_m=√f_c / T
输入捕获通道

主模式和从模式触发

输入捕获基本结构

PWMI基本结构

        由于只有TI1FP1TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1

/TIMx_CH2信号。

代码实例
#include "stm32f10x.h"                  // Device headervoid IC_Init(void)
{//使能TIM3系统时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//TIM3时基单元初始化,用于捕获TIM2产生的PWM波TIM_TimeBaseInitTypeDef TIM3_TimeBaseInitStruct;TIM3_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM3_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM3_TimeBaseInitStruct.TIM_Period = 65536 - 1; TIM3_TimeBaseInitStruct.TIM_Prescaler = 36 - 1;TIM3_TimeBaseInitStruct.TIM_RepetitionCounter = 0x00;TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseInitStruct);TIM_InternalClockConfig(TIM3);//输入捕获初始化TIM_ICInitTypeDef TIM3_ICInitStructure;TIM3_ICInitStructure.TIM_Channel = TIM_Channel_1;TIM3_ICInitStructure.TIM_ICFilter = 0xF;TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;    //直连输入TIM_ICInit(TIM3,&TIM3_ICInitStructure);//根据TIM3_ICInitStructure配置为PWMI模式(也就是增加选择器的另一路,设置极性和非直连输入)TIM_PWMIConfig(TIM3,&TIM3_ICInitStructure);//设置输入触发源TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);//设置从模式TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);TIM_Cmd(TIM3,ENABLE);
}//@param Freqc:fc频率表示TIM3计数器频率
uint32_t IC_GetFreq(uint32_t Freqc)
{return (uint32_t)(Freqc/TIM_GetCapture1(TIM3));
}//获取占空比,为百分比
uint8_t IC_GetDuty(void)
{return (uint8_t)(100*TIM_GetCapture2(TIM3)/TIM_GetCapture1(TIM3));
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • final
  • Redis5优化-Redis
  • Burp Suite、Wireshark与Fiddler:三款网络工具深度解析与比较
  • 【C++篇】迈入新世界的大门——初识C++(上篇)
  • JavaEE篇:多线程(1)
  • 计算机网络中用于远程访问和文件传输的不同方式
  • 数据结构入门——07堆
  • Spring Boot自动配置原理
  • 乌龟对对碰在线版
  • 第七十四:前端实现点击页面某个菜单跳转到对应的锚点功能
  • 微信怎么恢复聊天记录?轻松4招,恢复消失的聊天记录
  • OpenCv图像处理: 时域滤波与频域滤波
  • flink车联网项目:维表离线同步(第69天)
  • socks4和socks5和https代理的区别
  • KNN 图像识别
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CentOS7 安装JDK
  • css系列之关于字体的事
  • Debian下无root权限使用Python访问Oracle
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Javascript编码规范
  • React的组件模式
  • REST架构的思考
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue--数据传输
  • 复习Javascript专题(四):js中的深浅拷贝
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端性能优化--懒加载和预加载
  • 容器服务kubernetes弹性伸缩高级用法
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 提醒我喝水chrome插件开发指南
  • 通过npm或yarn自动生成vue组件
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 用element的upload组件实现多图片上传和压缩
  • 原生js练习题---第五课
  • 自定义函数
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ‌移动管家手机智能控制汽车系统
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Matlab)使用竞争神经网络实现数据聚类
  • (windows2012共享文件夹和防火墙设置
  • (多级缓存)多级缓存
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (南京观海微电子)——示波器使用介绍
  • (十一)c52学习之旅-动态数码管
  • (学习日记)2024.01.19
  • (一)认识微服务
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)linux 命令大全