高速PWM ,通道3,组合PWM模式1和2都不行,其他不对称也可以。AI8H2K17U
void PWM_Config(void)
{
//高速设置
CLKSEL |= 0x80; //内部PLL输出时钟选择, |=0x80: 选择PLL 144MHz, &=~0x80: 选择96MHz(默认)
USBCLK = (USBCLK &~0x60) | (1<<5); //选择PLL输入时钟分频,保证输入时钟为12M, 0: 1分频(对应12MHz), 1: 2分频(对应24MHz), 2: 4分频(对应48MHz), 3: 8分频(对应96MHz)
USBCLK |= 0x80; //PLL倍频控制, |=0x80: 使能PLL倍频. &= ~0x80: 禁止PLL倍频
delay(); //等待PLL锁频
CLKSEL |= 0x40; //高速IO时钟源选择, |=0x40: 选择PLLCLK, &=~0x40: 选择MCLK(默认)
HSCLKDIV = 0; //不分频
//pwm设置
HSPWMA_CFG = 0X03; //新增的移相寄存器使用间接定址访问前需要设置新增的使能位(bit4)
WritePWMA((u8)&PWMA_ENO, 0x00); // IO输出禁止
WritePWMA((u8)&PWMA_IER, 0x00); // 禁止中断
WritePWMA((u8)&PWMA_SR1, 0x00); // 清除状态
WritePWMA((u8)&PWMA_SR2, 0x00); // 清除状态
//通过异步方式设置PWMA的相关寄存器
WritePWMA((u8)&PWMA_PSCRH, 0x00);
WritePWMA((u8)&PWMA_PSCRL, 0x00);
// WritePWMA((u8)&PWMA_DTR, 72); // 死区时间配置, n=0~127: DTR= n T, 0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,
WritePWMA((u8)&PWMA_CCER1, 0x00);//写 CCMRx 前必须先清零 CCxE 关闭通道
WritePWMA((u8)&PWMA_CCER2, 0x00);
WritePWMA((u8)&PWMA_CCMR1X, 0x00);//通道1:PWM1模式
WritePWMA((u8)&PWMA_CCMR1, 0x60);
WritePWMA((u8)&PWMA_CCMR3X, 0x01);//通道3:组合PWM2模式
WritePWMA((u8)&PWMA_CCMR3, 0x50);
WritePWMA((u8)&PWMA_CCMR4X, 0x00);//通道4:PWM1模式
WritePWMA((u8)&PWMA_CCMR4, 0x60);
WritePWMA((u8)&PWMA_CCER1, 0x55);//配置通道输出使能和极性55 N
WritePWMA((u8)&PWMA_CCER2, 0x55);
PWM_PERIOD = 1000; //设置周期值
// WritePWMA((u8)&PWMA_ENO, 0x00);//使能输出
WritePWMA((u8)&PWMA_ENO, 0x12);
WritePWMA((u8)&PWMA_BKR, 0x80); //使能主输出
WritePWMA((u8)&PWMA_CR1, 0x01); //使能ARR预装载,开始PWM计
// WritePWMA((u8)&PWMA_EGR, 0x01 ); //设置输出PWM的周期
}