c-如何在stm32 h7设置编码器模式



我正在尝试将编码器数据获取到stm32 h7,并通过uart显示计数器值。

我可以通过我的uart终端看到计数器值0,但计数器值永远不会上升。。。

我正在使用编码器模式。请帮我做这个

static void Encoder_init(void)
{
RCC->APB2RSTR &= ~(1 <<  1);
RCC->APB2ENR |= (1 << 1);   //TIM8 clk enable
TIM8->CR1 &= ~(1 << 0);     //tim8 disable
TIM8->SMCR |= (0x03 << 0);  //SMS set
TIM8->CCER &= ~(1 << 1);    //CC1P
TIM8->CCER &= ~(1 << 5);    //CC2P
TIM8->CCER &= ~(1<<3);      //CC1NP LOW
TIM8->CCER &= ~(1<<7);      //CC2NP LOW
TIM8->CCMR1 |= (1<<0);      //CC1S
TIM8->CCMR1 |= (1<<8);      //CC2S
TIM8->PSC = 0;              //prescaler zero
TIM8->ARR = 0xFFFF;
TIM8->CR1 |= (1 << 0);      //tim8 enable}
}
void tEncoder(void *pvParameters)
{
uint8_t encoder_data;
char buf[4];
char val;
RCC->AHB4RSTR &= ~(1 << 2);
RCC->AHB4ENR |= (1 << 2);
GPIOC->MODER &= ~(0x03 << 12);
GPIOC->MODER &= ~(0x03 << 14);
GPIOC->PUPDR |= (1<<6) | (1<<7);
Encoder_init();
while(1) {
vTaskDelay(1000);
if(encoder_data!=TIM8->CNT) {
encoder_data = TIM8->CNT;
int2str(buf, encoder_data);
uart7_buffer_putstr(buf);
SystemPrint("tEncoder countingnr");
}
}
}

您清除了MODER寄存器,但从未设置Alternate函数模式。根据参考手册第578页

GPIOC->MODER |= (GPIO_MODER_MODE6_1 | GPIO_MODER_MODE7_1); // Set mode to Alternate Function 2<<12; 2<<14;

您从未清除和设置替代功能低寄存器(针0-7(参考手册第582页。AF3应根据STM32H747XI数据表第95页使用。

GPIOC->AFR[0] &= ~((0xFUL << GPIO_AFRL_AFSEL6_Pos) | (0xFUL << GPIO_AFRL_AFSEL7_Pos)); // Clear 15<<24; 15<<28
GPIOC->AFR[0] |= (0x3UL << GPIO_AFRL_AFSEL6_Pos) | (0x3UL << GPIO_AFRL_AFSEL7_Pos); // Set AF3 for PC6 and PC7 3<<24; 3<<28

最新更新