两路正交编码器只有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-21 07:03
已经解决了,换成TIM2的通道3和3产生PWM波,TIM3和TIM4设置为正交编码器,两个配置一样,结果都好使了,不知道是中断的问题还是定时器的问题,所有中断都能进去,换成其他TIM就不好用,我也是很无奈,目前就这么用着吧,已经能实现我想要的结果了
正点原子
2楼-- · 2019-07-21 09:53
帮顶。。。。
心雨达致
3楼-- · 2019-07-21 09:53
回复【2楼】正点原子:
---------------------------------
谢谢原子哥,原子哥知道怎么弄不?
水云乐乐
4楼-- · 2019-07-21 15:42
 精彩回答 2  元偷偷看……
xhdzwzj
5楼-- · 2019-07-21 18:55
先记下,备用。谢谢分享
雨枫
6楼-- · 2019-07-22 00:23
 精彩回答 2  元偷偷看……

一周热门 更多>