--------------------------输入端口配置------------------------------------------
GPIO_Init_User(EN_CODER, EN_A_PIN, GPIO_MODE_IN_FL_NO_IT);//ENCODER
GPIO_Init_User(EN_CODER, EN_B_PIN, GPIO_MODE_IN_FL_NO_IT);//ENCODER
---------------------------定时器1配置-------------------------------------------
TIM1->SMCR |= 0x03;//同时在TI1和TI2边缘计数
TIM1->CCMR1 |= 0x01;//CC1通道被配置为输入,IC1映射在TI1FP1
TIM1->CCMR2 |= 0X01;//CC2通道被配置为输入,IC2映射在TI2FP2
TIM1->ARRH = 0xEA;
TIM1->ARRL = 0x60;
TIM1->CR1 = 0x01;//使能计数器
------------------------------读数--------------------------------------------------------
void VolumControl(void)
{
static vu16 LastCentValue;
vu16 NowCentValue;
vu16 Temp;
vu8 VolumValue;
NowCentValue = TIM1->CNTRH;
NowCentValue = NowCentValue<<8;
NowCentValue |= TIM1_CNTL;
if(NowCentValue>LastCentValue)
Temp=NowCentValue-LastCentValue;
else
Temp=LastCentValue-LastCentValue;//对编码器消抖动
if(Temp>10)
{
VolumValue=NowCentValue/256;
}
else
EncoderStatus=STOP;
}
这是我用STM8S103F2P6的定时器1做的编码器接口配置,当我旋转编码器时,管脚有信号,
为什么计数器的值始终为零。
|