原子哥帮看看计数咋不准呢?
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA,PA端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;// GPIO_Mode_IPU; //GPIO_Mode_IN_FLOATING;//
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM3->DIER|=1<<0; //允许更新中断
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//TIM3的优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//TIMx_SUB_PRIORITY;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM3-> SC = 0x0;//预分频器
TIM3->ARR = 3;//设定计数器自动重装值
TIM3->CR1 &=~(3<<8);// 选择时钟分频:不分频
TIM3->CR1 &=~(3<<5);// 选择计数模式:边沿对齐模式
TIM3->CCMR1 |= 1<<0; //CC1S='01' IC1FP1映射到TI1
TIM3->CCMR1 |= 1<<8; //CC2S='01' IC2FP2映射到TI2
TIM3->CCER |= 1<<0; //CC1P='0' IC1FP1反相,IC1FP1=TI1
TIM3->CCER |= 1<<4; //CC2P='0' IC2FP2反相,IC2FP2=TI2
TIM3->CCER &= ~(1<<1); //CC1P='0' IC1FP1不反相,IC1FP1=TI1
TIM3->CCER &= ~(1<<5); //CC2P='0' IC2FP2不反相,IC2FP2=TI2
// TIM3->CCER |= 1<<1;
// TIM3->CCER |= 1<<5;
// TIM3->CCMR1 |=0x0000;
TIM3->SMCR |= 3<<0; //SMS='011' 所有的输入均在上升沿和下降沿有效
TIM3->CNT =0;
TIM3->CR1 |= 0x01;
void TIM3_IRQHandler(void)
{
int16_t tim_count;
tim_count=TIM_GetCounter(TIM3);//获取ENCODER_TIMER TIM3的值
if(tim_count>=3)if(d<100)d++;
else if(d>0)d--;
TIM3->SR=0;
}
|