问答

汇集网友智慧,解决技术难题

21ic问答首页 - HC32F005C6PA的PCA配置PWM8位分辨率输出,电流达到155ma!

HC32F005C6PA的PCA配置PWM8位分辨率输出,电流达到155ma!

CUIHUANWEN2022-03-02
HC32F005C6PA的PCA,按照官方例程P03口配置PWM8位分辨率输出,芯片电流竟然达到155ma,手摸芯片都发热,想请教各位师傅这正常吗?
回答 +关注 18
8972人浏览 10人回答问题 分享 举报
10 个回答
  • 有木有可能烧掉了啊
  • 看程序看不出问题来
  • 是不是外围电路有问题啊
  • 电流也太大了点
  • 需要看看电路图吧
  • PCA是什么功能模块啊
  • /*************************************************************
    *******本项目采用hc32f005c6pa芯片,少引脚够用,低成本,系统启用
    *******22.12MHZ内部频率,pwm时钟16分频,输出5.44khzpwm
    *******  
    *******    qd         p14     //启动信号
    *******    24v        p15     //24v开关  
    *******    PWM        p03     //pwm输出
    *************************************************************/

    #include "gpio.c"
    #include "pca.c"
    #include "ddl.c"
    #include "sysctrl.c"
    #include "interrupts_hc32f005.c"
    #include "uart.c"
    #include "bt.c"

    #define  E24V_on   Gpio_WriteOutputIO(GpioPort1, GpioPin5, TRUE)       //24v电源开
    #define  E24V_off  Gpio_WriteOutputIO(GpioPort1, GpioPin5, FALSE)      //24v电源关
    #define  qd_on    Gpio_WriteOutputIO(GpioPort1, GpioPin4, TRUE)       //启动
    #define  qd_off   Gpio_WriteOutputIO(GpioPort1, GpioPin4, FALSE)      //关闭
    #define  dw0        GpioPin4
    #define  dw1        GpioPin1
    #define  dw2        GpioPin2
    #define  dw3        GpioPin3
    #define  dw4        GpioPin4
    #define  dw5        GpioPin5
    #define  dw6        GpioPin6
    #define  dw7        GpioPin2
    #define  dw8        GpioPin3
    #define  D0   1
    #define  D1   80
    #define  D2   105
    #define  D3   130
    #define  D4   155
    #define  D5   180
    #define  D6   205
    #define  D7   230
    #define  D8   255

    static void Mcu_initcfg(void);
    static void App_chip4MHzTo16MHz (void);
    static void App_Pca_Pwm_cfg(uint8_t pwith);
    static void App_Uart1_cfg(void);
    static void App_send(uint8_t xy);

    static void App_chip4MHzTo16MHz (void)              //将时钟从RCH4MHz切换至RCH16MHzRCH时钟先将时钟
    {                                                   //从RCH切换至RCL32768,设置好频率后再切回RCH                                                     ///同频率的切换,需要先将时钟切换到RCL,
        Sysctrl_SetRCLTrim(SysctrlRclFreq32768);        
        Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);   //使能内部低速时钟
        Sysctrl_SysClkSwitch(SysctrlClkRCL);            //切换至内部低速时钟
       
        Sysctrl_SetRCHTrim(SysctrlRchFreq22_12MHz);     //< 加载目标频率的RCH的TRIM值
        Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);   //< 使能RCH(默认打开,此处可不需要再次打开)
                                                                                                                                                                                                                    //                                                                                                                                                                                                               
        Sysctrl_SysClkSwitch(SysctrlClkRCH);            //< 时钟切换到RCH
        Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);  //< 关闭RCL时钟   
    }

    static void Mcu_initcfg(void)
    {
                    stc_gpio_cfg_t GpioCfg;
           
        Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);             //打开GPIO时钟
        Sysctrl_SetPeripheralGate(SysctrlPeripheralPca,TRUE);        //打开PCA时钟
        Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE);         //模式0/2可以不使能
        Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);             //打开UART1时钟

        DDL_ZERO_STRUCT(GpioCfg);       
                    GpioCfg.enDir      = GpioDirIn;          //< 端口方向->输入  
                    GpioCfg.enDrv      = GpioDrvL;           //< 端口驱动能力->低驱动能力
                    GpioCfg.enPu       = GpioPuEnable;       //< 端口上拉使能
              GpioCfg.enPd       = GpioPdDisable;      //< 端口下拉禁止
                    GpioCfg.enOD       = GpioOdDisable;      //< 端口开漏输出禁止
           
                    Gpio_Init(GpioPort0, GpioPin1, &GpioCfg);        //1档
                    Gpio_Init(GpioPort0, GpioPin2, &GpioCfg);        //2档
        Gpio_Init(GpioPort0, GpioPin3, &GpioCfg);        //PcaPwm
           
                    Gpio_Init(GpioPort2, GpioPin3, &GpioCfg);        //3档
                    Gpio_Init(GpioPort2, GpioPin4, &GpioCfg);        //4档
                    Gpio_Init(GpioPort2, GpioPin5, &GpioCfg);        //5档
                    Gpio_Init(GpioPort2, GpioPin6, &GpioCfg); //6档
                    Gpio_Init(GpioPort2, GpioPin7, &GpioCfg);        //P27空闲               

                    Gpio_Init(GpioPort3, GpioPin1, &GpioCfg);        //P31空闲       
                    Gpio_Init(GpioPort3, GpioPin2, &GpioCfg);        //7档
                    Gpio_Init(GpioPort3, GpioPin3, &GpioCfg);        //8档
                    Gpio_Init(GpioPort3, GpioPin4, &GpioCfg); //0档
                    Gpio_Init(GpioPort3, GpioPin5, &GpioCfg);        //P35空闲       
                    Gpio_Init(GpioPort3, GpioPin6, &GpioCfg);        //P36空闲               
                   
        DDL_ZERO_STRUCT(GpioCfg);               
                    GpioCfg.enDir      = GpioDirOut;         //< 端口方向->输出  
                    GpioCfg.enDrv      = GpioDrvH;           //< 端口驱动能力->高驱动能力
                    GpioCfg.enPu       = GpioPuDisable;      //< 端口上拉无
              GpioCfg.enPd       = GpioPdDisable;      //< 端口下拉无
                    GpioCfg.enOD       = GpioOdDisable;      //< 端口开漏输出->禁止               
                    Gpio_Init(GpioPort1, GpioPin4, &GpioCfg);       
                    Gpio_Init(GpioPort1, GpioPin5, &GpioCfg);
                   
    }

    static void App_Pca_Pwm_cfg(uint8_t pwith)
    {
        stc_gpio_cfg_t GpioPcaCfg;       
        stc_pcacfg_t  PcaCfg;

        DDL_ZERO_STRUCT(GpioPcaCfg);        
        DDL_ZERO_STRUCT(PcaCfg);
      
        GpioPcaCfg.enDrv  = GpioDrvL;                 //驱动能力配置->低驱动能力                  
        GpioPcaCfg.enDir  = GpioDirOut;               //端口方向配置->输出
    //                GpioPcaCfg.enOD   = GpioOdEnable;                  //端口开漏输出       
        Gpio_Init(GpioPort0, GpioPin3, &GpioPcaCfg);
        Gpio_SetAfMode(GpioPort0, GpioPin3, GpioAf1);
       
        PcaCfg.pca_clksrc = PcaPclkdiv16;
        PcaCfg.pca_cidl   = FALSE;
        PcaCfg.pca_ecom   = PcaEcomEnable;       //允许比较器功能
        PcaCfg.pca_capp   = PcaCappDisable;      //禁止上升沿捕获
        PcaCfg.pca_capn   = PcaCapnDisable;      //禁止下降沿捕获
        PcaCfg.pca_mat    = PcaMatDisable;       //禁止匹配功能
        PcaCfg.pca_tog    = PcaTogDisable;       //禁止翻转控制功能
        PcaCfg.pca_pwm    = PcaPwm8bitEnable;    //使能PWM控制输出

        PcaCfg.pca_ccapl  =pwith;
        PcaCfg.pca_ccaph  =pwith;
        Pca_M3Init(&PcaCfg);
                   
              Pca_StartPca(TRUE);       
    }

    static void App_Uart1_cfg(void)
    {
              uint16_t timer=0;

        stc_gpio_cfg_t PcaGpioCfg;                    //PCA引脚配置
        stc_uart_baud_cfg_t setBaud;                  //波特率结构
        stc_bt_cfg_t BtCfg;
        stc_uart_cfg_t  uart_Cfg;       
           
        DDL_ZERO_STRUCT(PcaGpioCfg);       
        DDL_ZERO_STRUCT(setBaud);
        DDL_ZERO_STRUCT(BtCfg);       
        DDL_ZERO_STRUCT(uart_Cfg);               
                                                               
        PcaGpioCfg.enDir = GpioDirOut;
        Gpio_Init(GpioPort3, GpioPin5, &PcaGpioCfg);
        Gpio_SetAfMode(GpioPort3, GpioPin5, GpioAf1);  //配置P35 端口为URART1_TX
                                                             
        PcaGpioCfg.enDir = GpioDirIn;
        Gpio_Init(GpioPort3, GpioPin6, &PcaGpioCfg);
        Gpio_SetAfMode(GpioPort3, GpioPin6, GpioAf1);  //配置P36 端口为URART1_RX
           
        setBaud.bDbaud  = 0u;                          //双倍波特率功能
        setBaud.u32Baud = 9600u;                       //更新波特率位置
        setBaud.enMode  = UartMode3;                   //计算波特率需要模式参数
        setBaud.u32Pclk = Sysctrl_GetPClkFreq();       //获取PCLK
        timer = Uart_SetBaudRate(M0P_UART1, &setBaud); //设置波特率

        BtCfg.enMD = BtMode2;
        BtCfg.enCT = BtTimer;
        Bt_Init(TIM1, &BtCfg);                         //调用basetimer1设置函数产生波特率
        Bt_ARRSet(TIM1,timer);                         //重载值设置
        Bt_Cnt16Set(TIM1,timer);                       //16位计数器初值设置
        Bt_Run(TIM1);
                   
        uart_Cfg.enRunMode = UartMode3;               //启用模式3
        Uart_Init(M0P_UART1, &uart_Cfg);               
    }
    void App_send(uint8_t xy)
    {
    //                Uart_SetTb8(M0P_UART1,UartEven,xy);           //设置UartEven偶校验,UartOdd奇校验
              Uart_SendDataPoll(M0P_UART1,xy);                    //查询发送
    }

    /*******************************************************************/
    int32_t main(void)
    {
        App_chip4MHzTo16MHz();                         //切换至22.12MHZ
                    Mcu_initcfg();                                 //MCU初始化配置
    //    qd_on;
    //    E24V_on;       
              App_Pca_Pwm_cfg(D0);
        App_Uart1_cfg();
        App_send(3);       //送去显示       

        while(1)
                    {
                            if(Gpio_GetInputIO(GpioPort3,GpioPin4)==0)
                            {
                                     M0P_PCA->CCAP3H_f.CCAP3 =D0;
                                     qd_off;                               
                                     E24V_off;       
                                     App_send(0);       //送去显示                                       
                            }
                            if(Gpio_GetInputIO(GpioPort0,GpioPin1)==0)
                            {
                                     M0P_PCA->CCAP3H_f.CCAP3 =D1;
                               E24V_on;
                               qd_on;
                                     App_send(1);       //送去显示                               
                            }
                            if(Gpio_GetInputIO(GpioPort0,GpioPin2)==0)
                            {
                               M0P_PCA->CCAP3H_f.CCAP3 =D2;
                               E24V_on;
                               qd_on;
                                     App_send(2);       //送去显示                               
                            }
                            if(Gpio_GetInputIO(GpioPort2,GpioPin3)==0)
                            {
                                     M0P_PCA->CCAP3H_f.CCAP3 =D3;
                                     E24V_on;
                                     qd_on;
                                     App_send(3);       //送去显示
                            }
                            if(Gpio_GetInputIO(GpioPort2,GpioPin4)==0)
                            {
                                     M0P_PCA->CCAP3H_f.CCAP3 =D4;
                               E24V_on;
                               qd_on;
                                     App_send(4);       //送去显示                               
                            }
                            if(Gpio_GetInputIO(GpioPort2,GpioPin5)==0)
                            {
                               M0P_PCA->CCAP3H_f.CCAP3 =D5;
                               E24V_on;
                               qd_on;
                                     App_send(5);       //送去显示                               
                            }
                            if(Gpio_GetInputIO(GpioPort2,GpioPin6)==0)
                            {
                               M0P_PCA->CCAP3H_f.CCAP3 =D6;
                               E24V_on;
                               qd_on;
                                     App_send(6);       //送去显示                               
                            }
                            if(Gpio_GetInputIO(GpioPort3,GpioPin2)==0)
                            {
                               M0P_PCA->CCAP3H_f.CCAP3 =D7;
                               E24V_on;
                               qd_on;
                                     App_send(7);       //送去显示                       
                            }
                            if(Gpio_GetInputIO(GpioPort3,GpioPin3)==0)
                            {
                               M0P_PCA->CCAP3H_f.CCAP3 =D8;
                               E24V_on;
                               qd_on;
                                     App_send(8);       //送去显示                               
                            }
                    }
    }
  • 难道配置错误?请教各位大佬给诊断一下哪里配置的不对
  • 肯定不正常
12下一页

您需要登录后才可以回复 登录 | 注册