最近写了一个STM32F407VET6编码器的正交解码模式,发现网上资料较少,就把自己的代码贴上来。对于F407来说,可以用作编码器模式的只有高级定时器TIM1和TIM8,通用定时器有TIM2 TIM3 TIM4 TIM5。且每个定时器只有通道1和通道2能作为正交解码。
还要注意一下定时器5和定时器2是32位定时器,装载数值时注意要装载0xffffffff。还有读不来数据看看是不是自己用的编码器需要加上拉电阻。
void Speed_ENC(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //TIM1时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); //使能PORTE时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); //TIM5时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能PORTA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE); //TIM8时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //使能PORTC时钟
/************定时器1引脚初始化******************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11; //PTE9 PTE11
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed &