KEA128 测方波频率和空占比程序示例
#include "SKEAZ1284.h"
#define F_CPU 8000000UL // KEA128工作频率为8MHz #define PRESCALER 1
void delay_us(uint32_t us) { uint32_t cycles = F_CPU / (1000000UL * PRESCALER) * us; while (cycles--); }
void delay_ms(uint32_t ms) { while (ms--) { delay_us(1000); } }
int main(void) { // 初始化PTC2作为输入引脚 PTC_BASE_PTR->PDDR &= ~(1 << 2);
// 初始化FTM0
SIM_SCGC |= SIM_SCGC_FTM0_MASK; // 使能FTM0时钟
FTM0_SC = 0; // 禁用FTM0
FTM0_CNTIN = 0; // 设置FTM0计数器初始值为0
FTM0_MOD = 0xFFFF; // 设置FTM0计数器溢出值为65535
FTM0_SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALER); // 选择系统时钟作为FTM0时钟源,并设置预分频器
while (1) {
// 等待方波上升沿
while (!(PTC_BASE_PTR->PDIR & (1 << 2)));
// 记录上升沿时间
uint32_t start_time = FTM0_CNT;
// 等待方波下降沿
while (PTC_BASE_PTR->PDIR & (1 << 2));
// 计算方波周期
uint32_t end_time = FTM0_CNT;
uint32_t period = end_time - start_time;
float frequency = (float)F_CPU / (PRESCALER * period);
// 计算空占比
uint32_t high_time = period - (end_time - FTM0_CNT);
float duty_cycle = (float)high_time / period * 100;
// 输出结果
printf("频率 = %.2f Hz, 空占比 = %.2f %%
", frequency, duty_cycle);
delay_ms(1000); // 延时1秒钟
}
return 0;
}
// 该程序使用FTM0模块来测量方波的频率和空占比。首先,通过设置PTC2作为输入引脚,将方波信号接到该引脚上。然后,初始化FTM0模块,并设置预分频器,以便对方波进行计数。在主循环中,程序等待方波的上升沿和下降沿,并记录两个时间点。通过计算时间差,可以得到方波的周期。然后,通过计算高电平时间与周期的比例,可以得到方波的空占比。最后,程序输出频率和空占比的结果,并延时1秒钟后再次进行测量。
请注意,这个示例代码可能需要根据具体的硬件配置和需求进行调整和修改。
原文地址: https://www.cveoy.top/t/topic/pxG2 著作权归作者所有。请勿转载和采集!