105-SLM130(NB-IOT)C-SDK(OpenCPU)学习开发-PWM输出
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
说明
上一节学习了定时器,每路定时器除了可以实现基本的定时以外
还可以实现PWM输出.
定时器0对应PWM0; 定时器1对应PWM1 ......
现在让定时器0输出PWM, 可以配置GPIO2或者GPIO13或者GPIO10作为输出
直接上程序(定时器0,GPIO10输出PWM)
#include <stdio.h> #include "app.h" #include "bsp.h" #include "slpman_ec616.h" #include "bsp_custom.h" #include "pad_ec616.h" #include "gpio_ec616.h" #include "timer_ec616.h" #define timer_index 0 //定时器0 (在PWM0引脚上输出脉冲) #define timer_clock_id GPR_TIMER0FuncClk //定时器时钟线 #define timer_clock_select GPR_TIMER0ClkSel_26M //设置时钟频率 void pwm_init(void) { //设置PWM输出引脚 pad_config_t config; PAD_GetDefaultConfig(&config); config.mux = PAD_MuxAlt5; //复用第5功能 PAD_SetPinConfig(25, &config); //设置引脚(GPIO10, PWM0) TIMER_DriverInit();//初始化 //设置时钟线频率 CLOCK_SetClockSrc(timer_clock_id, timer_clock_select); CLOCK_SetClockDiv(timer_clock_id, 1);//时钟分频 //配置定时器 timer_pwm_config_t pwmConfig; pwmConfig.pwmFreq_HZ = 1000; //PWM频率 pwmConfig.srcClock_HZ = GPR_GetClockFreq(timer_clock_id);//源时钟频率 pwmConfig.dutyCyclePercent = 50;//占空比 TIMER_SetupPwm(timer_index, &pwmConfig); TIMER_Start(timer_index);//打开定时器 } void main_entry(void) { BSP_CommonInit();//官方底层初始化函数,默认写上就可以 BSP_CustomInit();//串口1作为printf pwm_init(); while (1) { } }
默认是输出1.8V电压的脉冲,可以根据自己的需求设置为别的电压
slpManNormalIOVoltSet(IOVOLT_3_30V);//配置所有普通引脚输出电压
动态设置占空比
TIMER_UpdatePwmDutyCycle(timer_index, 80);//设置占空比