两路正交编码器只有TIM4好使

2019-07-21 02:07发布

使用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] 程序是移植了别人的,希望哪位大神能帮忙指点一下啊,是在是弄不懂了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
雨枫
1楼-- · 2019-07-22 03:36
按照程序,可以计数了,但当每次正交信号设为组,编码器模式为在IC1上升沿采集,计数却是每次加2,且奇数增加跟偶数增加分开计数(即先是2、4、6...,再是1、3、5...)
我不是萌妹子
2楼-- · 2019-07-22 05:08
楼主能分享一下代码吗?我现在TIM4可以用,TIM3死活搞不出来
jishixuan
3楼-- · 2019-07-22 10:14
 精彩回答 2  元偷偷看……
我不是萌妹子
4楼-- · 2019-07-22 12:26
jishixuan 发表于 2016-7-23 17:01
请问解决了吗 我也碰到你这个问题

我后来就没弄了0.0
心雨达致
5楼-- · 2019-07-22 16:29
问题解决了,你们要的代码在附件里,
心雨达致
6楼-- · 2019-07-22 20:34
jishixuan 发表于 2016-7-23 17:01
请问解决了吗 我也碰到你这个问题

解决了,看12楼

一周热门 更多>