#include "asm/mcpwm.h" #include "asm/gpio.h" #include "task_func.h" #include "./nvs/nvs.h" #include "timer.h" #include "system/includes.h" #include "user_cfg.h" #include "earphone.h" // 宏定义 EARPHONE_STATE_... #include "ble_user.h" #include "le_client_demo.h" #include "le_common.h" #include "./ble_handler/client_handler.h" #include "./RFID/include/rfid_main.h" #include "./RFID/include/READER_REG.h" /* * PWM配置参数: * - 周期: 50ms (20Hz) * - 最小脉宽: 500us (1%占空比) * - 最大脉宽: 2.5ms (5%占空比) * - PWM引脚: PA1 (IO_PORTA_01) */ void pwm_test_init(void) { struct pwm_platform_data pwm_data = {0}; // 配置PWM参数 pwm_data.pwm_aligned_mode = pwm_edge_aligned; // 边沿对齐模式 pwm_data.pwm_ch_num = pwm_ch0; // 使用PWM通道0 pwm_data.frequency = 50; // 20Hz (周期50ms) pwm_data.duty = 100; // 初始占空比1% (500us/50ms = 1%) pwm_data.h_pin = IO_PORTA_01; // PWM输出引脚PA1 pwm_data.l_pin = -1; // 不使用互补引脚 pwm_data.complementary_en = 0; // 非互补模式 // 初始化PWM mcpwm_init(&pwm_data); // 启用PWM通道 mcpwm_open(pwm_ch0); } // 设置PWM占空比 (脉宽范围: 500us-2.5ms) void pwm_test_set_pulse_width_us(u32 pulse_width_us) { u16 duty; // 限制脉宽范围: 500us - 2500us if (pulse_width_us < 500) { pulse_width_us = 500; } else if (pulse_width_us > 2500) { pulse_width_us = 2500; } // 计算占空比: (脉宽/周期) * 10000 // 周期20ms = 20000us duty = (pulse_width_us * 10000) / 20000; // 设置占空比 mcpwm_set_duty(pwm_ch0, duty); } // 测试函数: 从最小脉宽到最大脉宽循环变化 void pwm_test_sweep(void) { u32 pulse_width; pwm_test_set_pulse_width_us(500); mdelay(1000); pwm_test_set_pulse_width_us(2500); mdelay(50); } // 主测试函数 void pwm_test_main(void) { // 初始化PWM pwm_test_init(); // 设置最小脉宽500us pwm_test_set_pulse_width_us(500); // 运行脉宽扫描测试 while (1) { pwm_test_sweep(); os_time_dly(100); } }