STM32通用定时器输入捕获

通用定时器输入捕获部分框图介绍

通用定时器输入捕获脉宽测量原理

要测量脉宽的高电平的时间:t2-t1=(脉宽下降沿时间点-脉宽上升沿时间点)

假设:递增计数模式

ARR:自动重装载寄存器的值

CCRx1:t1时间点CCRx的值

CCRx2:t2时间点CCRx的值

产生捕获事件时,会让CNT的值转移到CCRx寄存器

t1时要把CNT的值清0,同时把通道的边缘检测改为下降沿检测

递增计数模式下,溢出条件:CNT==ARR,实际记得个数(ARR+1)

高电平期间:计数器计数的个数:N*(ARR+1) + CCRx2

计数频率:Ft/(PSC+1)

因此,记一个数的时间:(PSC+1)/Ft

通用定时器输入捕获实验配置步骤

  1. 配置定时器基础工作参数:HAL_TIM_IC_Init()
  2. 定时器输入捕获MSP初始化:HAL_TIM_IC_MspInit(),配置NVIC、CLOCK、GPIO等
  3. 配置输入通道映射、捕获边沿等:HAL_TIM_IC_ConfigChannel
  4. 设置优先级,使能中断:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
  5. 使能定时器更新中断:HAL_TIM_ENABLE_IT()
  6. 使能捕获、捕获中断及计数器:HAL_TIM_IC_Start_IT()
  7. 编写中断服务函数:TIMx_IRQHandler() ---> HAL_TIM_IRQHandler()
  8. 编写更新中断和捕获回调函数:HAL_TIM_PeriodElapsedCallback()、HAL_TIM_IC_CaptureCallback()

相关HAL库函数介绍

HAL_TIM_IC_Init():初始化定时器基础参数

HAL_TIM_IC_MspInit():存放NVIC、CLOCK、GPIO初始化代码

HAL_TIM_IC_ConfigChannel():配置通道映射、捕获边沿、分频、滤波等

__HAL_TIM_ENBALE_IT():使能更新中断

HAL_TIM_IC_Start_IT():使能输入捕获、捕获中断并启动计数器

HAL_TIM_IRQHandler():定时器中断处理公用函数,处理各种中断

HAL_TIM_PeriodElapsedCallback():定时器更新中断回调函数,由用户重定义

HAL_TIM_IC_CaptureCallback():定时器输入捕获回调函数,由用户重定义

关键结构体介绍

c 复制代码
typedef struct
{
	uint32_t ICPolarity; //输入捕获触发方式选择,比如上升、下降捕获
	uint32_t ICSelection; //输入捕获选择,用于设置映射关系
	uint32_t ICPrescaler; //输入捕获分频系数
	uint32_t ICFilter; //输入捕获滤波器设置
}HAL_TIM_InitTypeDef;

实战

通过定时器5通道1来捕获按键高电平脉宽时间,通过串口打印出来

  1. 确定计数器工作频率:1MHZ计数频率为例,PSC=71,ARR=65535

    溢出时间65536
  2. 配置输入捕获方式:上升沿捕获,IC1映射在TI1上、不分频、不滤波
相关推荐
Aaron158810 小时前
无人机反制中AOA+TDOA联合定位技术与雷达探测定位技术的应用对比分析
arm开发·嵌入式硬件·fpga开发·硬件工程·无人机·信息与通信·信号处理
foundbug99910 小时前
STM32 睡眠模式测试程序
stm32·单片机·嵌入式硬件
wxmtwfx12 小时前
littlefs 源码分析
单片机·littlefs·嵌入式文件系统
嵌入式小站13 小时前
STM32 零基础可移植教程 18:I2C 入门,先用扫描器找一找总线上有没有设备
chrome·stm32·嵌入式硬件
天涯铭14 小时前
深入浅出:单片机I/O口串联电阻选型
单片机·嵌入式硬件·io口串联电阻
国科安芯15 小时前
ASP7A84AS——航天级低噪声高PSRR线性稳压器
网络·单片机·嵌入式硬件·架构·安全性测试
普中科技15 小时前
【普中STM32F1xx开发攻略--标准库版】-- 第 42 章 STM32 内部 FLASH 实验
stm32·单片机·嵌入式硬件·开发板·普中科技·内部flash
不做无法实现的梦~16 小时前
CLion+pyocd配置教程
嵌入式硬件
破晓单片机18 小时前
012、STM32项目分享:智能台灯系统
stm32·单片机·嵌入式硬件
悠哉悠哉愿意18 小时前
【单片机复习笔记】十五届国赛复盘
笔记·单片机·嵌入式硬件·学习