32g的p1.4的pwm功能如何配置
请教一下各位大佬,我想给stc32g的p1.4引脚配置pwm,我按照官方的《25-高级PWM1-PWM2-PWM3-PWM4,驱动P6口呼吸灯实验程序》例程去修改配置,但是没有成功,p1.4没有波形,能帮我看看我的代码哪里有问题么#include "..\..\comm\STC32G.h"
#include "stdio.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define MAIN_Fosc 24000000UL
/****************************** 用户定义宏 ***********************************/
#define Timer0_Reload (65536UL - (MAIN_Fosc / 1000)) // Timer0中断频率1ms
/************* PWM配置 **************/
#define PWM_PERIOD 1023 // PWM周期
u16 PWM3_Duty = 0; // PWM3占空比
bit PWM3_Flag = 0; // 呼吸灯方向标志
/************* 函数声明 **************/
void UpdatePwm(void);
/********************* 主函数 *************************/
void main(void) {
WTST = 0;
EAXFR = 1;
CKCON = 0;
// 设置P1.4为推挽输出(PWM3P)
P1M1 &= ~0x10;// P1.4模式设置
P1M0 |= 0x10; // P1.4推挽输出
// Timer0初始化
AUXR = 0x80; // 1T模式
TH0 = (u8)(Timer0_Reload >> 8);
TL0 = (u8)(Timer0_Reload);
ET0 = 1; // 使能定时器中断
TR0 = 1; // 启动定时器
// PWM配置(使用PWMA通道3)
PWMA_CCER1 = 0x00; // 关闭通道3
PWMA_CCMR3 = 0x60; // PWM模式1(预装载使能)
// 使能通道3正极输出(PWM3P)
PWMA_CCER1 |= 0x01 << 4; // CC3E = 1(使能输出)
// 设置PWM周期
PWMA_ARRH = (u8)(PWM_PERIOD >> 8);
PWMA_ARRL = (u8)PWM_PERIOD;
// 初始化占空比
PWMA_CCR3H = (u8)(PWM3_Duty >> 8);
PWMA_CCR3L = (u8)PWM3_Duty;
// PWM输出配置
PWMA_BKR = 0x80; // 主输出使能
PWMA_CR1 = 0x81; // 使能预装载,启动计数器
// 映射PWM3P到P1.4(根据数据手册设置PS寄存器)
PWMA_PS = 0x00; // 选择默认引脚P1.4(具体值需查手册确认)
EA = 1; // 开启总中断
while(1) {
if(B_1ms) {
B_1ms = 0;
UpdatePwm();
}
}
}
/********************** Timer0 1ms中断函数 ************************/
void timer0_isr() interrupt 1 {
B_1ms = 1;// 1ms标志置位
}
/********************** PWM更新函数 ************************/
void UpdatePwm(void) {
// 呼吸灯效果
if(!PWM3_Flag) {
if(++PWM3_Duty >= PWM_PERIOD) PWM3_Flag = 1;
} else {
if(--PWM3_Duty == 0) PWM3_Flag = 0;
}
// 更新PWM3占空比
PWMA_CCR3H = (u8)(PWM3_Duty >> 8);
PWMA_CCR3L = (u8)PWM3_Duty;
}
页:
[1]