"#include "flashfrequency.h"

#define FTM_MODULE 10000 // FTM模块计数器的最大值 #define FTM_CLK_FREQ 8000000 // FTM模块时钟频率

void FTM0_IRQHandler(void) { static uint32_t rising_edge_time = 0; static uint32_t falling_edge_time = 0; static uint32_t pulse_width = 0; static uint32_t frequency = 0; static uint32_t duty_cycle = 0;

if (FTM0_C0SC & FTM_CnSC_CHF_MASK) // 检查通道0的中断标志位
{
    if (FTM0_C0SC & FTM_CnSC_MSB_MASK) // 检查通道0的输入捕获模式
    {
        rising_edge_time = FTM0_C0V; // 获取上升沿时间
        FTM0_C0SC &= ~FTM_CnSC_MSB_MASK; // 切换到下降沿捕获模式
    }
    FTM0_C0SC &= ~FTM_CnSC_CHF_MASK; // 清除中断标志位
}
else
{
    falling_edge_time = FTM0_C0V; // 获取下降沿时间
    FTM0_C0SC &= ~FTM_CnSC_MSB_MASK; // 切换到上升沿捕获模式

    pulse_width = falling_edge_time - rising_edge_time; // 计算脉冲宽度
    frequency = FTM_CLK_FREQ / pulse_width; // 计算频率
    duty_cycle = (pulse_width * 100) / (FTM_MODULE + 1); // 计算占空比

    // 处理脉冲频率和占空比的数据
    // ...

    FTM0_C0SC |= FTM_CnSC_CHF_MASK; // 清除中断标志位
}

}


原文地址: https://www.cveoy.top/t/topic/pxHi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录