[mw_shl_code=c,true]//通用定时器4正交编码器模式初始化
//TIM4 CH1与CH2作为增量编码器的接口
void TIM4_Encoder_Init(u16 arr)
{
RCC->APB1ENR|=1<<2; //TIM4时钟使能
RCC->APB2ENR|=1<<3; //使能PB时钟
GPIOB->CRL&=0x00FFFFFF;
GPIOB->CRL|=0x88000000; //PB6,PB7下拉输入
GPIOB->ODR|=0<<6;
TIM4->  SC=0; //预分频器
TIM4->ARR=arr; //设定计数器自动重装值
TIM4->DIER|=1<<0; //允许更新中断
MY_NVIC_Init(1,3,TIM4_IRQChannel,2);//抢占1,子优先级3,组2
TIM4->CCMR1|=1<<0; //CC1S="01" IC1映射到TI1上 检测TI1输入的上升沿
TIM4->CCMR1|=1<<8; //CC2S="01" IC2映射到TI2上 检测TI2输入的上升沿
TIM4->CCMR1|=0<<4; //IC1F=0000 配置输入滤波器 不滤波
TIM4->CCER|=0<<1; //CC1P="0" 不反相 捕获发生在上升沿
TIM4->CCER|=0<<5; //CC2P="0" 不反相 捕获发生在上升沿
TIM4->SMCR|=2<<0; //SMS="010" 选择编码器模式1,计数器只在TI1边沿计数
TIM4->CR1|=1<<0; //使能计数器4
}[/mw_shl_code]
这是我设置成功的代码,你参考一下,如果还是不行,那估计就是不能用了! |