RDT2020 发表于 2022-4-14 10:38

使用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


RDT2020 发表于 2022-4-14 10:39

使用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运行
}

RDT2020 发表于 2022-4-14 11:10

看到资料TIME4/5/6三个定时器是一样的,没什么特别的地方,不知哪个出错或者漏掉什么了

wubangmi 发表于 2022-4-14 13:45

你虽然照搬了例程,却忘了P33和P34的TIM5输出PWM功能,并不在功能2上,看书要仔细啊。

RDT2020 发表于 2022-4-14 14:20

感谢你的回复,这是我在文档上面看到的配置,感觉是在功能2上啊,请帮忙指出,谢谢

RDT2020 发表于 2022-4-14 14:50

找到了,另外一个开发文档《HC32F003系列_HC32F005系列用户手册Rev2.31.pdf》关于IO功能配置这里,说法与你说的是一致的。
而在文档《HC32F003系列_HC32F005系列数据手册Rev2.8.pdf》这里面说的是错误的,谢谢楼上回答
页: [1]
查看完整版本: 使用HC32F005的TIME5输出不了PWM