- 打卡等级:偶尔看看II
- 打卡总天数:21
- 最近打卡:2025-06-14 19:36:31
已绑定手机
注册会员
- 积分
- 118
|
void encoder_check_direction(void) {
int16 current_count = PWMA_CNTR; // 假设 CNTR 是计数寄存器
if (current_count > last_count) {
// 正向旋转
DIR = 1;
} else if (current_count < last_count) {
// 反向旋转
DIR = 0;
}
last_count = current_count;
}
void encoder_init(void) {
gpio_init(ENCODER_SW, GPI, 1, GPI_PULL_UP);
gpio_init(ENCODER_A, GPI, 1, GPI_PULL_UP);
gpio_init(ENCODER_B, GPI, 1, GPI_PULL_UP);
gpio_init(P25, GPI, 1, GPI_PULL_UP);
gpio_init(P51, GPI, 1, GPI_PULL_UP);
gpio_init(P50, GPI, 1, GPI_PULL_UP);
PWMA_PSCRH = 0x00;
PWMA_PSCRL = 0x00;
// 自动重载值设为最大(自由计数模式)
PWMA_ARRH = 0x00;
PWMA_ARRL = 0xee;
// 禁止 PWM 输出
PWMA_ENO = 0x00;
// 配置 CH1 和 CH2 为 TI1/TI2 输入,滤波 160 个时钟周期
PWMA_CCMR1 = 0x01 + (4 << 4); // CH1 作为 TI1 输入,滤波 160
PWMA_CCMR2 = 0x01 + (4 << 4); // CH2 作为 TI2 输入,滤波 160
PWMA_CCER1=0x55;
// 选择 P24 和 P26 作为 TI1/TI2 输入
PWMA_PS = 0xAF; // TI1 on P24, TI2 on P26
// 计数器初始值
PWMA_CNTRH = 0x00;
PWMA_CNTRL = 0x00;
// 分频为 1(不分频)
PWMA_PSCRH = 0x00;
PWMA_PSCRL = 0x00;
// 设置编码器模式 3
PWMA_SMCR = 0x03 | (0x3 << 4); // Encoder Mode 3
// 启用更新中断
PWMA_IER = 0x02;
// 启动定时器
PWMA_CR1 = 0x01;
}
void PWMA_ISR() interrupt 26 {
if (PWMA_SR1 & 0x02) { // UIF or COMIF 发生
PWMA_CNTR = (PWMA_CNTRH << 8) + PWMA_CNTRL;
encoder_check_direction();
}
PWMA_SR1 = 0; // 清除 UIF 和 COMIF 标志
}
代码哪里错了啊
|
|