gdg.xxx 发表于 2025-3-24 17:15:22

32g pwm配置失败问题

请教一下各位大佬,我想使用32g8k64的6个引脚输出pwm波形,经过以下配置后p2.1、p2.2、p2.3、p1.0都配置pwm成功,但是p1.4和p2.0的pwm功能没有配置成功,各位大佬能帮我看看我的配置哪里不对么
void Init_PWM(void)
{
    // 初始化标志位和占空比
    PWM6_Flag = 0;
    PWM7_Flag = 0;
    PWM8_Flag = 0;
    PWM5_Flag = 0;
    PWM3P_Flag = 0;
    PWM1P_Flag = 0;

    PWM6_Duty = 0;// P2.1
    PWM7_Duty = 0;// P2.2
    PWM8_Duty = 0;// P2.3
    PWM5_Duty = 0;// P2.0
    PWM3P_Duty = 0; // P1.4
    PWM1P_Duty = 0; // P1.0
      
    // PWM配置
    PWMB_CCER1 = 0x00;
    PWMB_CCER2 = 0x00;
    PWMA_CCER1 = 0x00;
    PWMA_CCER2 = 0x00;

    PWMB_CCMR2 = 0x68;// PWM6配置
    PWMB_CCMR3 = 0x68;// PWM7配置
    PWMB_CCMR4 = 0x68;// PWM8配置
    PWMB_CCMR1 = 0x68;// PWM5配置
    PWMA_CCMR3 = 0x68;// PWM3P配置
    PWMA_CCMR1 = 0x68;// PWM1P配置

    // PWM输出极性
    PWMB_CCER1 = 0x55;
    PWMB_CCER2 = 0x55;
    PWMA_CCER1 = 0x55;
    PWMA_CCER2 = 0x55;

    PWMB_ARRH = (u8)(PWM_PERIOD >> 8);
    PWMB_ARRL = (u8)PWM_PERIOD;
    PWMA_ARRH = (u8)(PWM_PERIOD >> 8);
    PWMA_ARRL = (u8)PWM_PERIOD;

    // 使能PWM通道
    PWMB_ENO = 0x00;
    PWMB_ENO |= ENO6P;// PWM6 - P2.1
    PWMB_ENO |= ENO7P;// PWM7 - P2.2
    PWMB_ENO |= ENO8P;// PWM8 - P2.3
    PWMB_ENO |= ENO5P;// PWM5 - P2.0

    PWMA_ENO = 0x00;
    PWMA_ENO |= ENO3P;// PWM3P - P1.4
    PWMA_ENO |= ENO1P;// PWM1P - P1.0

    // 选择PWM通道
    PWMB_PS = 0x00;
    PWMB_PS |= PWM1_0;// PWM6 -> P2.1
    PWMB_PS |= PWM2_0;// PWM7 -> P2.2
    PWMB_PS |= PWM3_0;// PWM8 -> P2.3
    PWMB_PS |= PWM4_0;// PWM5 -> P2.0

    PWMA_PS = 0x00;
    PWMA_PS |= PWM5_0;// PWM3P -> P1.4
    PWMA_PS |= PWM6_0;// PWM1P -> P1.0

    PWMB_BKR = 0x80;
    PWMB_CR1 |= 0x81;
    PWMA_BKR = 0x80;
    PWMA_CR1 |= 0x81;
               
               
}

芯片引脚图:




国芯人工智能 发表于 2025-3-24 17:23:00

针对您在使用STC32G8K64微控制器时遇到的PWM配置问题,以下是可能的原因和解决方案:

1. 引脚复用功能配置
STC32G8K64的PWM输出功能需要通过引脚复用功能配置寄存器(PxM0、PxM1)来使能。请确保P1.4和P2.0的引脚复用功能已正确配置为PWM输出模式。例如:
c
P1M0 |= 0x10; // 设置P1.4为复用功能(PWM输出)
P1M1 &= ~0x10; // 清除P1.4的普通IO功能
P2M0 |= 0x01; // 设置P2.0为复用功能(PWM输出)
P2M1 &= ~0x01; // 清除P2.0的普通IO功能

2. PWM通道使能
您提到的代码中,PWMBCCER1、PWMBCCER2、PWMACCER1和PWMACCER2均被初始化为0x00,这意味着所有通道均未被使能。请确保P1.4和P2.0对应的PWM通道已正确使能。例如:
```c
PWMBCCER1 |= (1

[本文内容由国芯人工智能辅助生成,仅供参考]

yao眼的光 发表于 2025-3-24 17:26:22

【新提醒】部分较难的贴可通知我:时钟树,PWM,DMA,CAN,电机控制 | 不要在本贴咨询 - 第5页 - FOC,有ICache的 32F12K54 测试版块 国芯技术交流网站 - AI32位8051交流社区https://www.stcaimcu.com/forum.php?mod=viewthread&tid=12059&extra=&page=5   关注下这个帖子46楼

王昱顺 发表于 2025-3-24 17:41:17

pwma_ps和pwmb_ps给反了
pwma对应pwm1~4,pwmb对应pwm5~8
所以现在是有的pwm错误的输出到了其他引脚上

gdg.xxx 发表于 2025-3-26 10:21:37

感谢各位大佬
页: [1]
查看完整版本: 32g pwm配置失败问题