1、问题
在使用HC32A0SITB的时候,发现timera的占空比的输出不对,设置10%占空比,输出确是90%占空比。更改分频系数后,占空比偶尔是正常。
2、问题解决
通过查看其数据手册发现。端口输出电平由端口控制寄存器来进行配置。
其中的CMPC位置为设置输出电平。默认设置PERC和CMPC都是11,表示电平翻转。为了保持其10%占空比实际输出也要是10%。需要将CMPC设置为00
通过上图可以分析出,当PERC和CMPC都是11b是,输出实际上是有一定的随机性。PERC=11b,CMPC=00b,这时可以满足要求,设置10%占空比,输出也为10%占空比。
最终的代码设置为:
stcTmraInit.sw_count.u16ClockDiv = TMRA_CLK_DIV64; //设置tima7时钟为120M
stcTmraInit.sw_count.u16CountMode = TMRA_MD_SAWTOOTH;
stcTmraInit.sw_count.u16CountDir = TMRA_DIR_UP;
(void)TMRA_Init(CM_TMRA_7, &stcTmraInit);
/* 4. Set the comparison reference value. */
(void)TMRA_PWM_StructInit(&stcPwmInit);
stcPwmInit.u16CompareMatchPolarity = TMRA_PWM_LOW;
这样设置,不论什么分频系数,波形都是正常的,如果当PERC和CMPC都是11b,当改变分频时,输出波形极性可能会发生变化。