新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2018-4-4
- 在线时间
- 5 小时
|
1金钱
各位高手指点指点!
编码器最大计数值只能到100,超过100就清零,这是为什么,TIM4 计数器不是16位的吗?
void Encoder_Init(void)
{
GPIO_InitTypeDef GPIO_InitTypeDef_Struct;
TIM_ICInitTypeDef TIM_ICInitTypeDef_Struct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeDef_Struct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //ÊÇÄÜTIM4 ʱÖÓÔ´
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //ʹÄÜGPIOB ʱÖÓ
GPIO_InitTypeDef_Struct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitTypeDef_Struct.GPIO_Pin |= GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitTypeDef_Struct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitTypeDef_Struct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOB,&GPIO_InitTypeDef_Struct);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4); //°Ñ B6:7 Ó³Éäµ½¸´Óù¦ÄÜTIM4
GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_TIM4); //°Ñ B6:7 Ó³Éäµ½¸´Óù¦ÄÜTIM4
TIM_TimeBaseStructInit(&TIM_TimeBaseInitTypeDef_Struct);
TIM_TimeBaseInitTypeDef_Struct.TIM_CounterMode = TIM_CounterMode_Up; //³õʼ»¯TIM4 ΪÏòÉϼÆÊýģʽ,¸ù¾ÝDIRλȷ¶¨µÝÔö»òµÝ¼õ¼ÆÊý
TIM_TimeBaseInitTypeDef_Struct.TIM_ClockDivision = TIM_CKD_DIV1; //TDTS = TCK_INT
TIM_TimeBaseInitTypeDef_Struct.TIM_Period = 60000; //TIMx->ARR = 0 Ô¤×°ÔØÖµ
TIM_TimeBaseInitTypeDef_Struct.TIM_Prescaler = 0; //TIMx-> SC = Psc Ô¤·ÖƵÆ÷
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitTypeDef_Struct);
/**
* ÉèÖÃTIM4,±àÂëÆ÷Ä£3; SMS = 0x011;
* TI1/TI2 ÉÏÉýÑØÓÐЧ
**/
TIM_EncoderInterfaceConfig(TIM4,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
TIM_ICStructInit(&TIM_ICInitTypeDef_Struct);
TIM_ICInitTypeDef_Struct.TIM_ICFilter = 10;
TIM_ICInit(TIM4, &TIM_ICInitTypeDef_Struct);
TIM_SetCounter(TIM4,0); //Çå³ýTIM¼ÆÊýÆ÷
TIM_Cmd(TIM4,ENABLE); //ÊÇÄÜTIM4 ¶¨Ê±Æ÷
}
u16 Read_Encoder_Count(void)
{
return (u16)TIM_GetCounter(TIM4); //»ñÈ¡¼ÆËãÆ÷Öµ TIMx->CNT
printf("Encoder_Count %d\n",TIM4->CNT);
}
|
|