21ic问答首页 - 使用HC32F005的TIME5输出不了PWM
使用HC32F005的TIME5输出不了PWM
RDT20202022-04-14
用的是华大开发库,想分别用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
说明一下:
TIME4 用的IO输出是P23,P26
TIME5 用的IO输出是P33,P34
TIME6 用的IO输出是P35,P36
赞0
114166257c376a8862.png (307.95 KB )
下载附件
2022-4-14 14:47 上传
而在文档《HC32F003系列_HC32F005系列数据手册Rev2.8.pdf》这里面说的是错误的,谢谢楼上回答
评论
2022-04-14
赞0
评论
2022-04-14
赞0
评论
2022-04-14
赞0
评论
2022-04-14
赞0
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_CHB TIM5_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运行
}
评论
2022-04-14
您需要登录后才可以回复 登录 | 注册