找回密码
 立即注册
查看: 19|回复: 3

STC32G12K128输出两路相位差180度的HSPWM波形,但是无法进入中断且设置不了占空比

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-26 17:07:59
已绑定手机

1

主题

2

回帖

11

积分

新手上路

积分
11
发表于 前天 16:21 | 显示全部楼层 |阅读模式
主要代码:
void HSPWM_config(void)
{
        HSPWMx_InitDefine                PWMx_InitStructure;
        u16 PWM4_DUTY_TEMP,PWM4_ARR_TEMP,PWM4_DTR_TEMP;
       
        PWM4_ARR_TEMP        = 50;//重装载值  单位:KHZ
        PWM4_DUTY_TEMP = 20;//占空比 取值0-100
        PWM4_DTR_TEMP = 1000;//死区时间  单位:ns
       
        Pwm_Control.Pwm_Arr_Set = 4*MAIN_Fosc  / PWM4_ARR_TEMP / 1000;//480;//设置频率
        Pwm_Control.Pwm_Duty_Set = 4*(PWM4_DUTY_TEMP / 100.00f) * Pwm_Control.Pwm_Arr_Set;//设置占空比
        Pwm_Control.Pwm_Dtr_Set = 4*(PWM4_DTR_TEMP / 1000.00f)* (MAIN_Fosc / 1000000);//设置死区时间
//        PWM3_USE_P24P25();
        PWM4_USE_P26P27();

        PWMx_InitStructure.PWM_EnoSelect= ENO4N;        //输出通道选择,        ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8P
        PWMx_InitStructure.PWM_MainOutEnable= ENABLE;                                //主输出使能, ENABLE,DISABLE
        PWMx_InitStructure.PWM_CEN_Enable   = ENABLE;                                //使能计数器, ENABLE,DISABLE
        HSPWM_Configuration(PWMA, &PWMx_InitStructure, &PWMA_Duty);                                //初始化PWM通用寄存器,  PWMA,PWMB




       
        HSPllClkConfig(MCLKSEL_HIRC,PLL_96M,0);    //系统时钟选择,PLL时钟选择,时钟分频系数
               
       
}



void HSPWM_Configuration(u8 PWM, HSPWMx_InitDefine *PWMx, PWMx_Duty *DUTYx)
{

                //通过异步方式设置PWMA的相关寄存器
                WritePWMA((u8)&PWMA_CCER1, 0x00);
                WritePWMA((u8)&PWMA_CCER2, 0x00);
//                WritePWMA((u8)&PWMA_CCMR3, CCMRn_ROLLOVER);        //PWM3采用OC输出
                WritePWMA((u8)&PWMA_CCMR4, CCMRn_ROLLOVER | 0X08);        //PWM4采用PWM模式1
               
               
               
                WritePWMA((u8)&PWMA_CCER1, 0X00);                        //配置通道输出使能和极性
                WritePWMA((u8)&PWMA_CCER2, 0X40);
                WritePWMA((u8)&PWMA_ENO, 0X80);        //使能PWM信号输出端口
//                WritePWMA((u8)&PWMA_CCR3H, (u8)(DUTYx->PWM3_Duty >> 8));        //设置输出PWM的占空比
//                WritePWMA((u8)&PWMA_CCR3L, (u8)DUTYx->PWM3_Duty);
                WritePWMA((u8)&PWMA_CCR4H, (u8)(Pwm_Control.Pwm_Duty_Set >> 8));        //设置输出PWM的占空比
                WritePWMA((u8)&PWMA_CCR4L, (u8)Pwm_Control.Pwm_Duty_Set);
                WritePWMA((u8)&PWMA_ARRH,        (u8)(Pwm_Control.Pwm_Arr_Set >> 8));        //设置输出PWM的周期
                WritePWMA((u8)&PWMA_ARRL,        (u8)(Pwm_Control.Pwm_Arr_Set));
                WritePWMA((u8)&PWMA_DTR, (u8)0x00);
                WritePWMA((u8)&PWMA_BKR, PWMx->PWM_MainOutEnable<<7);        //使能主输出
               
                PWMA_IER |= 0x11;//开启PWM4捕获中断
                PPWMAH = 1, PPWMA = 1;
                WritePWMA((u8)&PWMA_EGR, (u8)0x11);
               
                WritePWMA((u8)&HSPWMA_CFG, (u8)0x03);
                WritePWMA((u8)&HSPWMA_CFG, (u8)0x07);

                WritePWMA((u8)&PWMA_CR1, PWMx->PWM_CEN_Enable | 0X80);                                //开始PWM计数


}



u8 pwm_flag=0;
void PWMA_ISR_Handler (void) interrupt PWMA_VECTOR
{
        u8 sta = 0;
        sta = ReadPWMA((u8)&PWMA_SR1);
    if ((sta && 0x01) || (sta && 0x08))    //UIFA 更新中断
    {
                WritePWMA((u8)&PWMA_SR1,0);
                pwm_flag = 1;
               

    }

}
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:648
  • 最近打卡:2026-03-26 08:54:18
已绑定手机

52

主题

2506

回帖

8840

积分

论坛元老

积分
8840
发表于 昨天 09:14 | 显示全部楼层
如果先开启PWM寄存器异步访问模式,则后续在指定地址范围内的寄存器都需要通过异步方式访问,例如:
  1. HSPWMA_CFG = 0x07;                      //使能PWMA相关寄存器异步访问功能,并使能异步模式PWM中断
  2. ...
  3. //通过异步方式设置PWMA的相关寄存器
  4. ...
复制代码

中断使能寄存器也要通过异步方式进行设置,例如
WritePWMA((u8)&PWMA_IER, 0X11);

如果在配置完成PWM寄存器后才开启异步访问模式,则前面的PWM寄存器就不需要通过异步方式设置。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-26 17:07:59
已绑定手机

1

主题

2

回帖

11

积分

新手上路

积分
11
发表于 昨天 17:07 | 显示全部楼层
现在可以进入中断了,是不是相位差180°时占空比最高只能调到50%,按照公式算超过50%占空比时CCR就比ARR大了
截图202603261707216417.jpg
截图202603261707573031.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-26 17:07:59
已绑定手机

1

主题

2

回帖

11

积分

新手上路

积分
11
发表于 昨天 18:22 | 显示全部楼层
目前遇到的问题是相位差会变,不是恒定的180°,这点不太理解
截图202603261822432977.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-27 01:32 , Processed in 0.103961 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表