使用TIM4做正交编码器好使,然后我直接复制TIM4的代码,换成TIM5,就不好使了,只能记到3个数,0、1、65535,不知道什么问题,有做过这一方面的没?
[mw_shl_code=c,true]/***********************************************************
( 编码器)红线接3.3V,黑线接地
编码器接口模式 , 速度检测与方向检测TIM2/4用于编码模式
PA0(TIM2_CH1)接绿线;PA1(TIM2_CH2)接白线。
PB6(TIM4_CH1)接绿线;PB7(TIM4_CH2)接白线。
***********************************************************/
//****************TIM5用于编码模式**************
void TIM5_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);//使能由APB1控制的TIM5端口时钟
TIM_DeInit(TIM5); //TIM4初始化
//GPIO配置PA0、PA1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能PA端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PA0,PA1 浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);
//TIM5编码模式
TIM_EncoderInterfaceConfig(TIM5,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 0; //不分频
TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //设置计数器溢出后的重载初值
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //用以上参数初始化定时器时间基础模块
TIM_Cmd(TIM5, ENABLE); //使能定时器5
}
//***********读计数TIM5个数**************
int TIM5_Encoder_Read(void)
{
s16 data;
data=(s16)(TIM_GetCounter(TIM5));
return (int)data;
}
//***************TIM5计数寄存器赋值***********
void TIM5_Encoder_Write(int data)
{
TIM5->CNT = data;
}
//***********读计数TIM4个数**************
int TIM4_Encoder_Read(void)
{
s16 data;
data=(s16)(TIM_GetCounter(TIM4));
return (int)data;
}
//***************TIM4计数寄存器赋值***********
void TIM4_Encoder_Write(int data)
{
TIM4->CNT = data;
}
//*****************TIM4用于编码模式*************
void TIM4_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能由APB1控制的TIM4端口时钟
TIM_DeInit(TIM4); //TIM4初始化
//GPIO配置PB6,PB7
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PB6,PB7 浮空输入
GPIO_Init(GPIOB,&GPIO_InitStructure);
//TIM4编码模式
TIM_EncoderInterfaceConfig(TIM4,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 0; //不分频
TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //设置计数器溢出后的重载初值
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //用以上参数初始化定时器时间基础模块
TIM_Cmd(TIM4, ENABLE); //使能定时器4
}[/mw_shl_code]
程序是移植了别人的,希望哪位大神能帮忙指点一下啊,是在是弄不懂了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>