4.1 测试
使用STC32G12K128开发板进行PWM测试：
在无晶振情况下，测试PWM输出400HZ，50HZ频率PWM波，误差均小于0.02%
使用引脚：P6.0

代码如下：
#include "stc32g.h"
#include "intrins.h"

#define MAIN_Fosc 24000000L      // 主时钟24MHz
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

/**************************** 固定参数 400Hz PWM ****************************/
//#define PWM_FREQ        400             // 目标频率
//#define PERIOD          59999           // 24MHz下 400Hz 对应周期值
//#define DUTY            18000           // 30%占空比 (PERIOD/2)

/**************************** 正确参数：50Hz / 30%占空比 ****************************/
#define PWM_FREQ        50
#define PSC_VAL         239     // 预分频值（核心修复：解决16位溢出）
#define PERIOD          1999    // 周期值（16位寄存器最大值65535，合规）
#define DUTY            600     // 30%占空比 (1999*0.3=600)

/**************************** 官方宏定义 保留 ****************************/
#define PWM1_0 0x00 //P:P1.0 N:P1.1
#define PWM1_1 0x01 //P:P2.0 N:P2.1
#define PWM1_2 0x02 //P:P6.0 N:P6.1  ? 最终输出引脚
#define ENO1P 0x01

/*****************************************************************************/
void UpdatePwm(void);

/******************** 主函数 **************************/
void main(void)
{
    WTST = 0;
    EAXFR = 1;    // 扩展寄存器访问使能
    CKCON = 0;

    // IO口初始化
    P0M1 = 0x00; P0M0 = 0x00;
    P1M1 = 0x00; P1M0 = 0x00;
    P2M1 = 0x00; P2M0 = 0x00;
    P3M1 = 0x00; P3M0 = 0x00;
    P4M1 = 0x00; P4M0 = 0x00;
    P5M1 = 0x00; P5M0 = 0x00;
    P6M1 = 0x00; P6M0 = 0x00;
    P7M1 = 0x00; P7M0 = 0x00;

    // ===================== PWM 硬件配置 =====================
    PWMA_ENO = 0x00;
    PWMA_ENO |= ENO1P;            // 使能PWM1通道输出

    PWMA_CCER1 = 0x00;
    PWMA_CCMR1 = 0x68;            // PWM模式1输出
    PWMA_CCER1 = 0x01;            // 高电平有效（正常输出）

    PWMA_PS = 0x00;
    PWMA_PS |= PWM1_2;            // ? 选择通道：P6.0 输出
		
		// ========== 核心修复：配置预分频器（之前缺失！） ==========
    PWMA_PSCRH = (u8)(PSC_VAL >> 8);
    PWMA_PSCRL = (u8)PSC_VAL;

    UpdatePwm();                  // 加载400Hz/50%占空比参数

    PWMA_BKR = 0x80;              // 使能主输出（必备）
    PWMA_CR1 = 0x81;              // 关键：关闭单脉冲模式 → 连续输出PWM

    EA = 1;                       // 开总中断（保留框架）

    while (1)
    {
        // 无需任何操作，硬件连续输出400Hz PWM
    }
}

//========================================================================
// 函数: UpdatePwm(void)
// 功能: 固定配置 400Hz + 50%占空比
//========================================================================
void UpdatePwm(void)
{
    // 固定周期：59999 → 400Hz
    PWMA_ARRH = (u8)(PERIOD >> 8);
    PWMA_ARRL = (u8)PERIOD;

    // 固定占空比：29999 → 50%
    PWMA_CCR1H = (u8)(DUTY >> 8);
    PWMA_CCR1L = (u8)DUTY;
}


#################################################################################
后面接上11.0592Mhz外部晶振，再测试PWM没有成功，在代码中对占空比进行调整均始终输出3.3V，PWM频率没有使用示波器测量
由于时间原因，外部晶振策略搁置