野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13000|回复: 2

TIMER 读不出编码器的数值

[复制链接]
发表于 2017-3-6 15:53:46 | 显示全部楼层 |阅读模式
用定时器读取编码器数值,TIM4可以正常读,TIM9却一直是0.
不知是什么问题?难道是硬件电路有什么冲突?
硬件电路:
1.PNG 2.PNG
PE5 -- LTDC_G0   PE6 -- LTDC_G1
还有

E5 SAI1_SCK_A
E6 SAI1_SD_A
引脚都没有被用,为什么定时器不能用呢?

定时器   :TIM9  捕获通道:通道1 -- PE5        通道2 -- PE6 .引脚的上拉下拉都配置过啦,还是不行!

同样高级定时器8可以用,   定时器 TIM12 捕获通道:Channel1 -- PB14;Channel2 -- PB15  也不能用
大神来指点一下啊。迷惑死我啦

/**************************************************************************
函数功能:定时器编码器模式
定时器   : TIM4
捕获通道:通道1 -- PB6
                通道2 -- PB7
**************************************************************************/

static void Encoder_Init_TIM4(void)
{
         TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
         TIM_ICInitTypeDef         TIM_ICInitStructure;
         GPIO_InitTypeDef          GPIO_InitStructure;

         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);     //TIM4时钟使能
         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);    //使能PORTA时钟
         
         GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4);   //定时器复用引脚
         GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_TIM4);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;                 //端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                   //浮空输入
        GPIO_Init(GPIOB, &GPIO_InitStructure);       
         
         TIM_DeInit(TIM4);                                     //重新将Timer寄存器设置为缺省值
         TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);       //把TIM_TimeBaseInitStruct 中的每一个参数按缺省值填入
         TIM_TimeBaseStructure.TIM_Prescaler = 0x0;            // 不分频
         TIM_TimeBaseStructure.TIM_Period =0xFFFF;             //设定计数器自动重装值
         TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;//选择时钟分频:不分频
         TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上计数模式(当配置为中央对齐模式或者编码器模式时,此位只读                                                                                                                                                                                                                                               
         TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
         
         TIM_EncoderInterfaceConfig(TIM4,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//TI1和TI2的输入均在上升沿有效
                                                                                                                                 //选择模式 :两相计数(速度和方向)
         TIM_ICStructInit(&TIM_ICInitStructure);  
         TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //不分频
         TIM_ICInitStructure.TIM_ICFilter = 10;                //0011 对应8个事件输出一个跳变
         TIM_ICInit(TIM4,&TIM_ICInitStructure);
         
         TIM_SetCounter(TIM4,0);                               //设置计数器寄存器初始值为0
         TIM_Cmd(TIM4, ENABLE);  
}

/**************************************************************************
函数功能:定时器编码器模式
定时器   :TIM9
捕获通道:通道1 -- PE5
               通道2 -- PE6
**************************************************************************/
static void Encoder_Init_TIM9(void)
{
         TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
         TIM_ICInitTypeDef         TIM_ICInitStructure;
         GPIO_InitTypeDef          GPIO_InitStructure;

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);      
         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
       
         GPIO_PinAFConfig( GPIOE,GPIO_PinSource5,GPIO_AF_TIM9);          //定时器复用引脚
         GPIO_PinAFConfig( GPIOE,GPIO_PinSource6,GPIO_AF_TIM9);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;                         //端口配置
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                     //浮空输入
        GPIO_Init(GPIOE, &GPIO_InitStructure);       
         
         TIM_DeInit(TIM9);
         TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
         TIM_TimeBaseStructure.TIM_Prescaler = 0;                  // 不分频
         TIM_TimeBaseStructure.TIM_Period =0xFFFF;
         TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;    //选择时钟分频:不分频
         TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;//向上计数模式                                                                                                                                                                                                                       
         TIM_TimeBaseInit(TIM9,&TIM_TimeBaseStructure);
         
         TIM_EncoderInterfaceConfig(TIM9,TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//TI1和TI2的输入均在上升沿有效
                                                                                               
         TIM_ICStructInit(&TIM_ICInitStructure);
         TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
         TIM_ICInitStructure.TIM_ICFilter = 10;                   //0011 对应8个事件输出一个跳变
         TIM_ICInit(TIM9,&TIM_ICInitStructure);
         
         TIM_SetCounter(TIM9,0);
         TIM_Cmd(TIM9, ENABLE);
}

回复

使用道具 举报

发表于 2017-3-6 17:24:54 | 显示全部楼层
确认一下tim9的时钟是哪一个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-6 21:52:47 | 显示全部楼层
随风 发表于 2017-3-6 17:24
确认一下tim9的时钟是哪一个

APB2上的 ,最大定时器时钟是180M, 但是我分了一下频。还是不可以。
是不是这个编码器引脚要接上拉电阻呢。定时器4的PB6/7是IIC的SCL和SDA,是有上拉电阻,可以正常读出数值
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 18:30 , Processed in 0.062929 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表