void Encoder_Init(void)
{
RCC->APB1ENR|=1<<2; //TIM4时钟使能
RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOB->CRL&=0XF0FFFFFF;//PB6
GPIOB->CRL|=0X04000000;//浮空输入
GPIOB->CRL&=0X0FFFFFFF;//PB7
GPIOB->CRL|=0X40000000;//浮空输入
//这两个东东要同时设置才可以使用中断
TIM4->DIER|=1<<0; //允许更新中断
TIM4->DIER|=1<<6; //允许触发中断
// MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//组2,抢占优先级1,次优先级3
TIM4->  SC = 0x0;//预分频器
TIM4->ARR = ENCODER_TIM_PERIOD-1;//设定计数器自动重装值
TIM4->CR1 &=~(3<<8);// 选择时钟分频:不分频
TIM4->CR1 &=~(3<<5);// 选择计数模式
TIM4->CCMR1 |= 1<<0; //CC1S='01' IC1FP1映射到TI1
TIM4->CCMR1 |= 1<<8; //CC2S='01' IC2FP2映射到TI2
TIM4->CCER &= ~(1<<1); //CC1P='0' IC1FP1不反相,IC1FP1=TI1
TIM4->CCER &= ~(1<<5); //CC2P='0' IC2FP2不反相,IC2FP2=TI2
TIM4->CCMR1 |= 3<<4; // IC1F='1000' 输入捕获1滤波器
TIM4->SMCR |= 3<<0; //SMS='011' 所有的输入均在上升沿和下降沿有效
TIM4->CNT = COUNTER_RESET;
TIM4->CR1 |= 0x01; //CEN=1,使能定时器
}
是之前科科1987发的一个例程,我把改到定时器4之后,正交AB输出接到PB6和PB7计数值一直为1,反而是接到PA6和PA7计数值会有变化,理解不能,求指教!
|