登录/注册

STM32的PWM捕获

STM32的PWM捕获

更多

在 STM32 中实现 PWM 捕获(测量 PWM 信号的周期和占空比)通常使用定时器的 输入捕获 功能。以下是详细步骤和代码示例(基于 STM32 HAL 库):


1. 硬件连接


2. 配置步骤

(1) 定时器基础设置

(2) 输入捕获通道配置

TIM_IC_InitTypeDef sICConfig;

// 通道 1 配置(上升沿捕获周期)
sICConfig.ICPolarity = TIM_ICPOLARITY_RISING;   // 上升沿触发
sICConfig.ICSelection = TIM_ICSELECTION_DIRECTTI; // 直接连接到通道
sICConfig.ICPrescaler = TIM_ICPSC_DIV1;         // 无分频
sICConfig.ICFilter = 0x0;                       // 无滤波
HAL_TIM_IC_ConfigChannel(&htim2, &sICConfig, TIM_CHANNEL_1);

// 通道 2 配置(下降沿捕获高电平时间)
sICConfig.ICPolarity = TIM_ICPOLARITY_FALLING;  // 下降沿触发
sICConfig.ICSelection = TIM_ICSELECTION_INDIRECTTI; // 间接连接到通道
HAL_TIM_IC_ConfigChannel(&htim2, &sICConfig, TIM_CHANNEL_2);

(3) 从模式触发配置

(4) 启用捕获和中断

// 启动捕获通道
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);  // 通道1 + 中断
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);  // 通道2 + 中断

// 启用定时器全局中断(需在 NVIC 中配置)
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM2_IRQn);

3. 中断处理

在中断回调函数中读取捕获值并计算周期/占空比:

// 全局变量存储结果
volatile uint32_t period = 0;
volatile uint32_t pulse = 0;
volatile float duty_cycle = 0.0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
    if (htim->Instance == TIM2) {
        // 通道1捕获上升沿(周期结束)
        if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) {
            __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1);
            period = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1) + 1; // 周期 = CCR1 + 1
        }

        // 通道2捕获下降沿(高电平结束)
        if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) {
            __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2);
            pulse = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); // 高电平时间 = CCR2
            duty_cycle = (pulse * 100.0f) / period; // 占空比(%) = (高电平时间 / 周期) * 100
        }
    }
}

4. 关键点说明


5. 进阶优化

通过以上步骤,即可实现 STM32 对 PWM 信号的周期和占空比精确捕获。

使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确,是什么原因导致的?

在使用STM32F103芯片的2个定时器捕获2路PWM波时,当2路信号同时输入时,会出现

2025-05-14 06:24:00

使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确是什么原因导致的?

在使用STM32F103芯片的2个定时器捕获2路PWM波时,当2路信号同时输入时,会出现

2025-04-27 08:39:28

使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题,是什么原因导致的?

在使用STM32F103芯片的2个定时器捕获2路PWM波时,当2路信号同时输入时,会出现

2025-04-25 08:29:21

STM32第八章-TIM输入捕获

  在第七章我们介绍了 STM32 的定时器作为 PWM 输出的使用方法,这一章,我们将向大家介绍通用定时器作为输入捕获的使

资料下载 康辅佑 2022-02-07 11:00:19

STM32-定时器输入捕获实验(捕获PWM方波的频率和占空比)

STM32-定时器输入捕获实验(捕获PWM方波的频率和占空比)一、输入

资料下载 20762 2021-12-14 18:55:21

stm32捕获占空比_基于STM32超声波避障小车

stm32捕获占空比_基于STM32超声波避障小车

资料下载 Petc 2021-11-23 16:21:10

stm32捕获占空比_基于STM32超声波避障小车

stm32捕获占空比_基于STM32超声波避障小车

资料下载 丁冬芹 2021-11-22 19:21:03

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准,为什么?

在使用STM32F103芯片的2个定时器捕获2路PWM波时,当2路信号同时输入时,会出现

2025-04-22 10:43:06

STM32F103VE搭建的PWM输入捕获功能,移植到STM32F103VD无法捕获的原因?

利用STM32F103VE芯片搭建的PWM输入捕获功能,移植到STM32

2024-03-20 08:21:39

一个通道如何捕获PWM的频率和占空比?

一,前言正常情况是双通道捕获PWM波,这种方法简单且准确,但是它占用的资源太多了,因为它使用定时器的两个通道,且这两个通道映射在一个通道上,同时配置一路捕获

2023-12-30 08:00:54

STM32定时器(三)输入捕获

STM32的定时器是支持信号输入捕获的,何为输入捕获?主要做什么应用?

2023-07-21 14:58:06

浅析stm32定时器pwm模式输入捕获

stm32定时器pwm模式输入捕获stm32中的定时器,除了TIM6和T

2021-08-19 07:33:15

stm32定时器pwm模式输入捕获功能

stm32定时器pwm模式输入捕获##stm32中的定时器,除了TIM6

2021-08-18 07:41:50

stm32输入捕获pwm输出同时工作

stm32输入捕获和pwm输出同时工作,一、 用STM32F103输出一

2021-08-09 06:55:13
7天热门专题 换一换
相关标签