沁恒青稞系列芯片是一款国产支持蓝牙的芯片,支持pwm输出和管脚映射,但是不支持单个管脚映射。这篇文章记录了采用ch582系列芯片pwm开发过程。
pwm基础知识
pwm简要理解参考硬件攻城狮,其中需要明确的是周期、占空比、频率概念,这对配置pwm波形特别重要。小伙伴们也可以参考
CH582芯片寄存器
配置pwm之前,一定要配置相应的GPIO,将GPIO配置为推挽模式,注意:带单个小标的pwm引脚为重映射引脚。如
此处的PB2为pwm8的重映射引脚,实际上真正的pwm8管脚为PB6
当采用的为从映射模式时,需要开启函数GPIOPinRemap(ENABLE, RB_PIN_PWMX);
注意,一旦引用此函数,所有的引脚都被重映射,该芯片不支持配置单个通道。
确定好管脚后,我们便开始配置寄存器,配置寄存器主要用到三个函数,PWMX_CLKCfg(25); PWMX_CycleCfg(PWMX_Cycle_63);
,这两个函数第一个是用来配置pwm的时钟分频,他是由主频分来的,可以在函数SetSysClock(CLK_SOURCE_PLL_60MHz);
查出,分频后的频率是pwm生成的时钟频率。另外一个函数是配置pwm周期的,也就是pwm1个完整周期需要多少个时钟频率,所以有了公式 :
cycle = 25/Fsys 其中cycle为pwm时钟频率,Fsys 为系统时钟频率
周期 = 63*cycle
那么想要得出自己想要的频率,该怎么算呢?
上面得出的周期就是pwm一个周期所需要的时间,只需要用1s除以周期,就能得出频率值了。想要得出想要的频率值,只需要调整这两个参数的值便可。
配置完频率后,再调用PWMX_ACTOUT(CH_PWM8, 32, Low_Level, DISABLE);
这个函数启动即可,其中,这个函数第一个参数为通道,第二个参数为占空比,根据官方例程代码PWMX_ACTOUT(CH_PWM7, 64 / 4, Low_Level, ENABLE); // 25% 占空比
,64/4的占空比为25%,我们可以采用计算得知,1%占空比为0.64,第二个参数只需要乘以0.64的倍数,既可以配置占空比的大小。第三个为pwm的极性,也就是高电平在前还是在后,这点不再赘述。最后是使能通道,选择ENABLE为使能,DISABLE为失能。