打印

使用HC32F005的TIME5输出不了PWM

[复制链接]
1035|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RDT2020|  楼主 | 2022-4-14 10:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用的是华大开发库,想分别用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_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运行
}

使用特权

评论回复
板凳
RDT2020|  楼主 | 2022-4-14 11:10 | 只看该作者
看到资料TIME4/5/6三个定时器是一样的,没什么特别的地方,不知哪个出错或者漏掉什么了

使用特权

评论回复
地板
wubangmi| | 2022-4-14 13:45 | 只看该作者
你虽然照搬了例程,却忘了P33和P34的TIM5输出PWM功能,并不在功能2上,看书要仔细啊。

使用特权

评论回复
5
RDT2020|  楼主 | 2022-4-14 14:20 | 只看该作者
感谢你的回复,这是我在文档上面看到的配置,感觉是在功能2上啊,请帮忙指出,谢谢

686486257bcaa095a6.png (139.29 KB )

686486257bcaa095a6.png

使用特权

评论回复
6
RDT2020|  楼主 | 2022-4-14 14:50 | 只看该作者
找到了,另外一个开发文档《HC32F003系列_HC32F005系列用户手册Rev2.31.pdf》关于IO功能配置这里,说法与你说的是一致的。
而在文档《HC32F003系列_HC32F005系列数据手册Rev2.8.pdf》这里面说的是错误的,谢谢楼上回答

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

12

帖子

0

粉丝