STC8H4K64TLCD,P26,P27引脚无法输出PWM互补信号
单片机型号:STC8H4K64TLCD
PWM互补输出测试
P20,P21测试正常
P26,P27 无PWM输出
//PWM 初始化
void PWM_init3(void)
{
P_SW2 |= 0x80;//扩展功能寄存器使能
P2M0 |= 0xc0; P2M1 &= ~0xc0; //P26,P27推挽输出
// PWMA_ENO |= 0xC0;//P27和P26脚的PWM4N和PWM4P 使能
PWMA_ENO = 0xC0;
// PWMA_PS |= (1<<6);//PWA通道4在P26,P27
PWMA_PS = 0x40;
PWM1-> PSCRH = 0x00; //预分频寄存器
PWM1-> PSCRL = 0x00;
PWM1-> DTR = 0x2C; //死区时间配置
PWM1-> CCMR1 = 0x68; //通道模式配置
PWM1-> CCMR1 = 0x68; //通道模式配置
PWM1-> ARRH = 0x0A;//高位 自动重装载寄存器,计数器 overflow 点
PWM1-> ARRL = 0xCC;//低位 ARRH ARRL低电平维持时间
PWM1-> CCR4H = 0x05; //高位 计数器比较值
PWM1-> CCR4L = 0x34; //低位 CCR1HCCR1L高电平维持时间
PWM1-> CCER1 = 0x55; //配置通道输出使能和极性
PWM1-> BKR = 0x80; //主输出使能 相当于总开关
PWM1-> CR1 = 0x01; //使能计数器
EA = 1;
}
//main.c
void main() //主函数
{
// LED_Config();
Timer0_Init();
EA = 1; //开总中断
LED0 = 0;
PWM_init3();
while(1)
{
;
}
}
// P20,P21
void PWM_init3(void)
{
P_SW2 |= 0x80;
P2M0 |= 0x03; P2M1 &= ~0x03;
PWMA_ENO = 0x03; //=0000 0011 P11和P10脚的PWM1N和PWM1P 使能 //通道1使能
PWMA_PS = 0x55;//PW4\PW3\PW2在P2脚PW1在P2脚 0101 0101
/**********************************************************
PWMx_duty = *100
***********************************************************/
PWM1-> PSCRH = 0x00; //预分频寄存器
PWM1-> PSCRL = 0x00;
PWM1-> DTR = 0x2C; //死区时间配置
PWM1-> CCMR1 = 0x68; //通道模式配置
//TIM1-> CCMR2 = 0x68;
//TIM1-> CCMR3 = 0x68;
// TIM1-> CCMR4 = 0x68;
// TIM1-> ARRH = 0x04;//高位 自动重装载寄存器,计数器 overflow 点
// TIM1-> ARRL = 0x4C;//低位 ARRH ARRL低电平维持时间
// TIM1-> CCR1H = 0x02; //高位 计数器比较值
// TIM1-> CCR1L = 0x26; //低位 CCR1HCCR1L高电平维持时间
//ARR 2764 CCRL 1332
PWM1-> ARRH = 0x0A;//高位 自动重装载寄存器,计数器 overflow 点
PWM1-> ARRL = 0xCC;//低位 ARRH ARRL低电平维持时间
PWM1-> CCR1H = 0x05; //高位 计数器比较值
PWM1-> CCR1L = 0x34; //低位 CCR1HCCR1L高电平维持时间
PWM1-> CCER1 = 0x55; //配置通道输出使能和极性
// TIM1-> CCER2 = 0x55; //配置通道输出使能和极性
PWM1-> BKR = 0x80; //主输出使能 相当于总开关
// TIM1-> IER = 0x02; //使能中断
PWM1-> CR1 = 0x1; //禁止计数器
EA = 1;
}
页:
[1]