好吧,所以我的目标是在引脚 a1 和 a5 上设置接口编码器模式。读取TIM2->CNT。我有一个旋转编码器,连接到两个引脚和接地/5v。我查看了数据表,我认为我已经正确配置了设置,但我无法让它工作。
这是我的设置
void init_hardware_timer_version(void)
{
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // Enable GPIOA clock
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // Enable TIM2 clock
TIM2->ARR = 12; // Set auto-reload register to maximum value
// Configure capture/compare mode
TIM2->CCMR1 |= (TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0);
// Configure capture/compare polarity
TIM2->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);
// Configure the slave mode controller
TIM2->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1;
// Enable the timer
TIM2->CR1 |= TIM_CR1_CEN;
}
现在我的期望是,在主程序中调用 TIM2->CNT 后,该值会根据编码器的旋转而变化。然而 CNT 似乎仍然是 0。我不知道为什么它不起作用。
编辑:这就是我设置引脚的方式
GPIOA->MODER |= GPIO_MODER_MODER1_1 | GPIO_MODER_MODER5_1; // Set PA1 and PA5 to alternate function mode
GPIOA->AFR[0] |= (1 << (1 * 4)) | (1 << (5 * 4)); // Set alternate function AF1 for PA1 and PA5 (TIM2_CH2 and TIM2_CH1)
您还没有告诉我们您使用的是哪款STM32F0xx;但在我检查过的所有 'F0xx 数据表中('F031/'F042/'F051/'F072/'F091),PA1 和 PA5 上的 TIM2_CHx 是 AF2,而不是 AF1。