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
8系列单片机支持硬件移相组合模式的暂时只有这两个系列
乘风飞扬 发表于 2026-3-23 00:17
8系列单片机支持硬件移相组合模式的暂时只有这两个系列
原来在最底下 没看到{:shui:}
页:
[1]