TIM输入捕获

输入捕获的概念

IC(Input Capture)输入捕获

4个输入捕获和输出比较通道,共用4个CCR寄存器,另外它们的CH1到CH4,4个通道的引脚,也是共用的(最左边和最右边),所以对于同一个寄存器,输入捕获和输出比较只能使用其中一个,不能同时使用

输入捕获模式下,当通道输入引脚出现指定电平跳变(上升沿和下降沿,可以通过程序配置)时,发生电平跳变的瞬间,输入捕获电路会干些啥呢?会让当前CNT的值将被锁存到CCR中(把当前CNT的值读出来,写到CCR中去),(目的是)可用于测量PWM波形的频率、占空比、脉冲间隔(和频率差不多的意思)、电平持续时间(和占空比差不多)等参数

对比一下输出比较,就是,输出比较,引脚是输出端口,输入捕获引脚是输入端口,输出比较,是根据CNT和CCR的大小关系来执行输出动作,输入捕获是接收到输入信号,执行CNT锁存到CCR的动作

每个高级定时器和通用定时器都拥有4个输入捕获通道(输入捕获电路,通用定时器和高级定时器没有区别,都是一样,基本定时器没有输入捕获的功能)

可配置为PWMI(PWM的输入模式)模式,同时测量频率和占空比

可配合主从触发模式,实现硬件全自动测量

后面这两条,PWMI模式和主从触发模式,设计的非常巧妙,把这两个功能结合起来,测量频率占空比就是硬件全自动执行,软件不需要进行任何干预,也不需要进中断,需要测量的时候,直接读取CCR寄存器就行了,极大的减轻了软件的压力

频率测量

8:45

输入捕获测频率

先用PWM模块,在PA0端口输出一个频率和占空比可调的波形,本节代码测量波形的输入口是PA6,所以我们需要将信号发生器和PA6连一起(也可以PA0连一起,这样就能测量自己PWM模块产生波形的频率了)

程序:

c 复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"
#include "IC.h"

int main(void)
{
	OLED_Init();
	PWM_Init();
	IC_Init();
	
	OLED_ShowString(1, 1, "Freq:00000Hz");
	
	PWM_SetPrescaler(720  - 1);			//Freq = 72M / (PSC + 1) / 100
	PWM_SetCompare1(50);				//Duty = CCR / 100
	
	while (1)
	{
		OLED_ShowNum(1, 6, IC_GetFreq(), 5);
	}
}

现象:

目前这个程序只能测频率,还不能测量占空比,如果想同时测量频率和占空比,STM32的输入捕获还设计了一个PWMI模式,即PWM输入模式

PWMI模式测频率占空比

相关推荐
Wave84513 小时前
STM32+ESP8266 智能手表实战:天气获取与阿里云时钟同步
stm32·阿里云·智能手表
汽车芯猿14 小时前
嵌入式 SHA-256 完全实现(附原码)(无 uint64_t,减少栈使用)
c语言·单片机
进击的小头14 小时前
第12篇:嵌入式核心外设科普:ADC_DAC模拟前端接口原理与典型应用
单片机·嵌入式硬件
水云桐程序员15 小时前
嵌入式系统开发 需要的环境配置
嵌入式硬件·物联网·硬件工程
CHANG_THE_WORLD15 小时前
PE文件解析器详细文档
stm32·单片机·嵌入式硬件
Z文的博客15 小时前
SLCAN工程搭建与实现教程(下)
stm32·单片机·嵌入式·can
老师用之于民16 小时前
【DAY39】Linux 驱动开发关键技术研究:设备树、Input 子系统与 I2C 通信
单片机·嵌入式硬件
发发就是发16 小时前
触摸屏驱动调试手记:从I2C鬼点到坐标漂移的实战录
linux·服务器·驱动开发·单片机·嵌入式硬件
芯岭技术郦16 小时前
XL32F001 单片机产品简介
单片机·嵌入式硬件
发发就是发16 小时前
I2C适配器与算法:从一次诡异的时序问题说起
服务器·驱动开发·单片机·嵌入式硬件·算法·fpga开发