使用的是EC11旋转编码器,之前使用PWMA是可以的,现在改到PWMB就驱动不起来了,请高手帮忙看下,是有哪里配置不正确,
void init_pwm()
{
/* 1.【时钟源选择】*/
/* STC8H1K08 默认使用系统时钟,此处无需额外配置 */
/* 2.【时基单元配置】*/
PWMB_ARR = 0xFFFF; /* 自动重装载值,设置为最大值 */
PWMB_CNTR = 10000; /* 计数器初始值,设为中间值防止溢出 */
/* 3.【PWM 引脚配置】*/
PWMB_ENO = 0x00; /* 关闭所有输出通道(配置前需清空)*/
PWMB_PS = 0x05; /* 配置引脚:PWMB5_2→P1.7, PWMB6_2→P5.4 */
/* PWMB_PS 位定义:
* bit0: PWMB5_2 输入使能(EC11-A相)
* bit2: PWMB6_2 输入使能(EC11-A相)
*/
/* 4.【捕获/比较模式配置】*/
PWMB_CCER1 = 0x11; /* 关闭捕获/比较使能寄存器 1*/
PWMB_CCER2 = 0x00; /* 关闭捕获/比较使能寄存器 2*/
/* 配置通道为输入捕获模式,并设置输入滤波器 */
/* 滤波器值 10 对应 64 个时钟周期,可有效消除编码器抖动 */
PWMB_CCMR1 = 0x01 + (10 << 4); /* 通道 1:输入模式 + 滤波 */
PWMB_CCMR2 = 0x01 + (10 << 4); /* 通道 2:输入模式 + 滤波 */
PWMB_SMCR = 2; // 编码器模式, 模式1或模式2: 每个脉冲两个边沿加减2. 模式3: 每个脉冲四个边沿加减4.
/* 5.【死区时间配置】*/
PWMB_DTR = 0; /* 编码器模式无需死区时间 */
/* 6.【中断配置】*/
PWMB_SR1 = 0; /* 清除中断标志位 1*/
PWMB_SR2 = 0; /* 清除中断标志位 2*/
PWMB_IER = 0x02; /* 使能捕获/比较中断 */
/* 7.【启动 PWM 模块】*/
// PWMB_BKR = 0x80; /* 使能主输出 */
PWMB_CR1 |= 0x01; /* 启动计数器 */
}