使用HC32F005的TIME5输出不了PWM
用的是华大开发库,想分别用TIME4,TIME5,TIME6输出周期和占空比是一样的互补PWM信号。但发现只有TIME4,TIME6可正常输出,而TIME5的CHA只固定输出个高电平,CHB则固定输出个低电平。想不明白,因为TIME4,5,6都是的同样配置函数,只是输出引脚不同,相关的引脚也选择相应的复用功能,唯独TIME5不正常工作,是不是TIME5有什么特别的地方?说明一下:
TIME4用的IO输出是P23,P26
TIME5用的IO输出是P33,P34
TIME6用的IO输出是P35,P36
使用HC32F005的TIME5输出不了PWM
用的也是官方的例子static void ADV_TIM5_Config(uint16_t u16Period, uint16_t u16CHA_PWMDuty)
{
stc_gpio_cfg_t stcTIM5Port;
en_adt_compare_t enAdtCompareA;
stc_adt_basecnt_cfg_t stcAdtBaseCntCfg;
stc_adt_CHxX_port_cfg_t stcAdtTIM5ACfg;
//---------PWM输出IO设置-------------------------------------
DDL_ZERO_STRUCT(stcTIM5Port);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //端口外设时钟使能
stcTIM5Port.enDir= GpioDirOut;
//P33 34设置为 TIM5_CHBTIM5_CHA
Gpio_Init(GpioPort3, GpioPin3, &stcTIM5Port);
Gpio_Init(GpioPort3, GpioPin4, &stcTIM5Port);
Gpio_SetAfMode(GpioPort3, GpioPin3,GpioAf2);
Gpio_SetAfMode(GpioPort3, GpioPin4,GpioAf2);
//-----------PWM输出方式定义--------------------------------------------------------
DDL_ZERO_STRUCT(stcAdtBaseCntCfg);
DDL_ZERO_STRUCT(stcAdtTIM5ACfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdvTim, TRUE); //ADT外设时钟使能
stcAdtBaseCntCfg.enCntMode = AdtSawtoothMode; //锯齿波模式
stcAdtBaseCntCfg.enCntDir = AdtCntUp;
stcAdtBaseCntCfg.enCntClkDiv = AdtClkPClk0;
Adt_Init(M0P_ADTIM5, &stcAdtBaseCntCfg); //ADT载波、计数模式、时钟配置
Adt_SetPeriod(M0P_ADTIM5, u16Period); //周期设置
enAdtCompareA = AdtCompareA;
Adt_SetCompareValue(M0P_ADTIM5, enAdtCompareA, u16CHA_PWMDuty);//通用比较基准值寄存器A设置
enAdtCompareA = AdtCompareB;
Adt_SetCompareValue(M0P_ADTIM5, enAdtCompareA, u16CHA_PWMDuty);//通用比较基准值寄存器A设置
stcAdtTIM5ACfg.enCap = AdtCHxCompareOutput; //比较输出
stcAdtTIM5ACfg.bOutEn = TRUE; //CHA输出使能
stcAdtTIM5ACfg.enPerc = AdtCHxPeriodLow; //计数值与周期匹配时CHA电平保持不变
stcAdtTIM5ACfg.enCmpc = AdtCHxCompareHigh; //计数值与比较值A匹配时,CHA电平翻转
stcAdtTIM5ACfg.enStaStp = AdtCHxStateSelSS; //CHA起始结束电平由STACA与STPCA控制
stcAdtTIM5ACfg.enStaOut = AdtCHxPortOutLow; //CHA起始电平为低
stcAdtTIM5ACfg.enStpOut = AdtCHxPortOutLow; //CHA结束电平为低
Adt_CHxXPortCfg(M0P_ADTIM5, AdtCHxA, &stcAdtTIM5ACfg); //端口CHA配置
stcAdtTIM5ACfg.enCap = AdtCHxCompareOutput; //比较输出
stcAdtTIM5ACfg.bOutEn = TRUE; //CHB输出使能
stcAdtTIM5ACfg.enPerc = AdtCHxPeriodHigh; //计数值与周期匹配时CHB电平保持不变
stcAdtTIM5ACfg.enCmpc = AdtCHxCompareLow; //计数值与比较值B匹配时,CHB电平翻转
stcAdtTIM5ACfg.enStaStp = AdtCHxStateSelSS; //CHB起始结束电平由STACA与STPCA控制
stcAdtTIM5ACfg.enStaOut = AdtCHxPortOutHigh; //CHB起始电平为低
stcAdtTIM5ACfg.enStpOut = AdtCHxPortOutHigh; //CHB结束电平为低
Adt_CHxXPortCfg(M0P_ADTIM5, AdtCHxB, &stcAdtTIM5ACfg); //端口CHB配置
Adt_StartCount(M0P_ADTIM5); //AdvTimer6运行
}
看到资料TIME4/5/6三个定时器是一样的,没什么特别的地方,不知哪个出错或者漏掉什么了 你虽然照搬了例程,却忘了P33和P34的TIM5输出PWM功能,并不在功能2上,看书要仔细啊。 感谢你的回复,这是我在文档上面看到的配置,感觉是在功能2上啊,请帮忙指出,谢谢 找到了,另外一个开发文档《HC32F003系列_HC32F005系列用户手册Rev2.31.pdf》关于IO功能配置这里,说法与你说的是一致的。
而在文档《HC32F003系列_HC32F005系列数据手册Rev2.8.pdf》这里面说的是错误的,谢谢楼上回答
页:
[1]