HyunYong_7782 发表于 2026-3-21 23:50:33

STC8H4K32TL是不能用组合PWM么

#include        "STC8Hxxx.h"
#include         "intrins.h"                                                                            // Keil 内部函数头文件

#define MAIN_Fosc                11059200L                                                        // 定义主时钟

#define PWM1_1      0x00                                                                        // P:P1.0N:P1.1
#define PWM3_1      0x00                                                                        // P:P1.4N:P1.5

u16 PWM_PERIOD = 0;                                                                                        // PWM周期

// PWMA配置--充电PWM
void PWMA_config(void)
{
    PWMA_PSCRH = 0x00;
    PWMA_PSCRL = 0x00;          // 预分频=1
    PWM_PERIOD = 74;         // 周期160 → 24MHz/160 = 150kHz

    PWMA_CCER1 = 0x00;
    PWMA_CCER2 = 0x00;
    PWMA_CCMR1X = 0x00;         // PWM1模式
    PWMA_CCMR1= 0x60;
    PWMA_CCMR3X = 0x01;         // 组合PWM2模式
    PWMA_CCMR3= 0x50;
    PWMA_CCMR4X = 0x00;         // PWM1模式
    PWMA_CCMR4= 0x60;

    PWMA_CCER1 = 0x55;
    PWMA_CCER2 = 0x55;

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

    PWMA_ENO = 0x00;
    PWMA_ENO |= ENO1P;
    PWMA_ENO |= ENO3P;

    PWMA_PS = 0x00;
    PWMA_PS |= PWM1_1;          // P1.0/P1.1
    PWMA_PS |= PWM3_1;          // P1.4/P1.5

        PWMB_BKR = 0;               // 关
    PWMA_CR1 = 0x01;                         // 向上计数,开始计时
}

// PWMA转接函数
void PWMA_SetDuty(u8 duty1,u8 duty2, u8 deadtime)
{
    PWMA_CCR1H = (u8)(duty1 >> 8);
    PWMA_CCR1L = (u8)(duty1);
   
    PWMA_CCR3H = (u8)((deadtime) >> 8);
    PWMA_CCR3L = (u8)((deadtime));
    PWMA_CCR4H = (u8)((deadtime + duty2) >> 8);
    PWMA_CCR4L = (u8) (deadtime + duty2);

        PWMA_BKR = 0x80;                        // 使能主输出
}

void IO_Init(void)
{
        P1M0 = (P1M0 & ~0xea) | 0x11; P1M1 = (P1M1 & ~0x11) | 0xea;      P1IE &= ~0xfb;
    P5M0 &= ~0x10; P5M1 |= 0x10;   P5IE &= ~0x10;
    P3M0 = 0x14; P3M1 = 0xeb;   P3IE &= ~0xb7;
}

// 主函数
void main(void)
{       
        P_SW2 |= 0x80;                                                                                                                                                                // SFR enable

        IRCDB = 0x10;                                              // 内部高速时钟起振等待稳定的时钟数 低于33Mhz 默认值0x10       
        IAP_TPS = 11;                                              // 根据晶振值设置 40Mhz 就是写入40 30Mhz写入3022.1184Mhz 就是写入22

    //EA = 1;
   
    IO_Init();
    PWMA_config();

    // 主循环
        while(1)
        {
      PWMA_SetDuty(15,12,2);
    }
}同样的程序 我烧录在AI8H2K32U-LQFP32上,观测P10 14引脚 是可以观测到波形的
但是烧录在STC8H4K32TL0LQFP32上 观测这两个引脚的时候 观测不到 P14的PWM输出 只有高电平 然后P10是出了PWM的 频率 占空比都对的上

所需波形如图所示 黄色P10 蓝色P14

乘风飞扬 发表于 2026-3-23 00:17:35

8系列单片机支持硬件移相组合模式的暂时只有这两个系列

HyunYong_7782 发表于 2026-3-23 10:19:15

乘风飞扬 发表于 2026-3-23 00:17
8系列单片机支持硬件移相组合模式的暂时只有这两个系列

原来在最底下 没看到{:shui:}
页: [1]
查看完整版本: STC8H4K32TL是不能用组合PWM么