Files
100_STC_PWM/测试结果.txt

98 lines
3.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

4.1 测试
使用STC32G12K128开发板进行PWM测试
在无晶振情况下测试PWM输出400HZ50HZ频率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.3VPWM频率没有使用示波器测量
由于时间原因,外部晶振策略搁置