系统 RTThread
芯片 F1C100S
使用 drv_pwm 驱动
代码如下
//gpio_set_func(BKPWM,IO_FUN_3); // PE6 pwm1 设置为PWM 模式
//gpio_set_func(PWM0,IO_FUN_3); // PA2设置为PWM 模式
/************************* 设置 pwm1 通道 开始 ************************** /
rt_uint32_t period, pulse;
period = 500000; // 周期为0.5ms,单位为纳秒ns
pulse = 5000; // PWM脉冲宽度值,单位为纳秒ns
// 查找设备
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL){
rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
return RT_ERROR;
}
// 设置PWM周期和脉冲宽度
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); //PWM_DEV_CHANNEL 1 period 500000 pulse 5000
// 使能设备
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
rt_kprintf("%s run success! \n", PWM_DEV_NAME);
/************************* 设置 pwm1 通道 结束 **************************/
烧录后 pwm 初始化是成功的 也能找到这个设备 但是IO没有反应 一直是高电平
后来使用 直接写寄存器的方式 也不行 这个代码摘自 https://github.com/nminaylov/F1C100s_projects/tree/master 的逻辑程序
gpio_set_func(BKPWM,IO_FUN_3);
gpio_set_pull_mode(BKPWM,PULL_DISABLE);
pwm_init(PWM1, PWM_MODE_CONTINUOUS, 1, PWM_PSC_120); // 24M / 120 = 200kHz
pwm_set_period(PWM1, LED_PWM_PERIOD); // 200k / 200 = 1kHz
pwm_set_pulse_len(PWM1, 30);
pwm_enable(PWM1);
离线