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模式测频率占空比

相关推荐
树爷只认钱13 分钟前
ESP01S模块+串口底座 AT指令连接中移Onenet物联网全过程(第1篇)
单片机·嵌入式硬件·物联网·esp8266
学嵌入式的小杨同学29 分钟前
STM32 进阶封神之路(二十六):ESP8266 实战全攻略 ——TCP 通信 + 数据上传 + 远程控制 + 透传模式(库函数 + 代码落地)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
Nice__J30 分钟前
Mcu架构以及原理——7.寄存器编程与抽象
stm32·单片机·架构
嵌入式学习和实践37 分钟前
当MCU遇上大模型:在单片机上实现AI对话的硬核玩法
人工智能·单片机·大模型
我不是程序猿儿1 小时前
【嵌入式】适合 STM32 初学者BootLoader 入门学习心得
linux·stm32·单片机·嵌入式硬件·学习
惶了个恐1 小时前
嵌入式硬件第五弹——ARM(1)
嵌入式硬件
Suifqwu2 小时前
stm32进阶-启动文件
stm32·单片机·嵌入式硬件
火龙果里的芝麻3 小时前
STM32 FreeModbus 移植(最详细)
stm32·单片机·嵌入式硬件
weiyvyy3 小时前
嵌入式硬件接口开发的流程
人工智能·驱动开发·单片机·嵌入式硬件·硬件架构·硬件工程
weiyvyy3 小时前
嵌入式硬件接口开发的核心原则
驱动开发·单片机·嵌入式硬件·fpga开发·硬件架构·硬件工程