打印
[STM32F1]

编码器配置

[复制链接]
695|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcx0324|  楼主 | 2016-12-13 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用的是103系列,将PA0和PA1作为编码器输入应用,目前出现的问题是配置后定时器2的寄存器一直为0没响应,但是将同样的配置给定时器1寄存器就能赋值,配置如下:
GPIO_InitTypeDef                         GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef          TIM2_TimeBaseStructure;
        TIM_ICInitTypeDef                         TIM2_ICInitStructure;  
        NVIC_InitTypeDef                          NVIC_InitStructure;        

        RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //使能TIM2时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
        /* Enable GPIOA, clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        //使能GPIOA时钟
       
        GPIO_StructInit(&GPIO_InitStructure);//将GPIO_InitStruct中的参数按缺省值输入
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0 | GPIO_Pin_1;     
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);                           

        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        TIM_DeInit(TIM2);
        TIM_TimeBaseStructInit(&TIM2_TimeBaseStructure);
        TIM2_TimeBaseStructure.TIM_Period = 360 * 4 -1;  //设定计数器重装值
        TIM2_TimeBaseStructure.TIM_Prescaler = 0;                 //TIM2时钟预分频值
        TIM2_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;//设置时钟分割 T_dts = T_ck_int       
        TIM2_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up; //TIM向上计数
        TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseStructure);              

       
        TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12,
                                                           TIM_ICPolarity_BothEdge ,
                                                           TIM_ICPolarity_BothEdge);//使用编码器模式3,上升下降都计数
        TIM_ICStructInit(&TIM2_ICInitStructure);                //将结构体中的内容缺省输入

        TIM2_ICInitStructure.TIM_ICFilter = 6;                  //选择输入比较滤波器
        TIM_ICInit(TIM2, &TIM2_ICInitStructure);                //将TIM_ICInitStructure中的指定参数初始化TIM2
       
        TIM_ClearFlag(TIM2, TIM_FLAG_Update);                //清除TIM2的更新标志位
        TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);        //运行更新中断
        //Reset counter
        TIM2->CNT = 0;

        TIM_Cmd(TIM2, ENABLE);   //启动TIM2定时器

实在找不出问题出在哪里,求助了
沙发
jcx0324|  楼主 | 2016-12-14 12:04 | 只看该作者
解决问题了,哈哈,上面大家可以参考

使用特权

评论回复
板凳
mmuuss586| | 2016-12-14 12:28 | 只看该作者
谢谢分享,呵呵

使用特权

评论回复
地板
LyCrystal| | 2016-12-14 13:34 | 只看该作者
谢谢分享

使用特权

评论回复
5
airwill| | 2016-12-14 19:28 | 只看该作者
基本上就是时钟, IO 方面的配置, F103 还少一个 IO 口外设配置功能, 更简单

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

133

帖子

1

粉丝