你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

编码器应用问题

[复制链接]
jcx0324 提问时间:2016-12-10 16:55 /
型号为103系列,将PA0和PA1作为编码器的两个输入通道(定时器通道1和通道2), 配置代码如下:

    GPIO_InitTypeDef             GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef      TIM_TimeBaseStructure;
    TIM_ICInitTypeDef             TIM_ICInitStructure;  
    NVIC_InitTypeDef              NVIC_InitStructure;     

    RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    //使能TIM2时钟
    /* 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_AF_PP;
    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(&TIM_TimeBaseStructure);
    TIM_TimeBaseStructure.TIM_Period = 360 * 4 -1;  //设定计数器重装值
    TIM_TimeBaseStructure.TIM_Prescaler = 0;         //TIM2时钟预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;//设置时钟分割 T_dts = T_ck_int   
    TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up; //TIM向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);              

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

    TIM_ICInitStructure.TIM_ICFilter = 6;          //选择输入比较滤波器
    TIM_ICInit(TIM2, &TIM_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定时器


结果是定时器2的寄存器值全为0,  定时器2也无法开启,  单独将定时器2作为普通定时器用则正常, 求帮忙找下原因啊
收藏 4 评论13 发布时间:2016-12-10 16:55

举报

13个回答
jackten 回答时间:2016-12-10 19:10:23
谢谢分享                              
斜阳 回答时间:2016-12-11 09:57:31
mark一下,
jcx0324 回答时间:2016-12-12 08:47:04
是有问题求助............
队长shiwo 回答时间:2017-1-25 09:09:51
编码器回的是脉冲信号的吧

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

wtliu 回答时间:2017-1-25 09:50:45
先看看编码器的输入脉冲是否正常

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

cldym 回答时间:2017-1-25 10:24:51
mark一下,
无薪税绵 回答时间:2017-1-25 11:15:21
感觉是编码器没有输出脉冲信号,
建议楼主接示波器测试一下。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

五哥1 回答时间:2017-1-25 11:50:14
用CUBEMX设置生成一下,和这个进行对比

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

yb0121 回答时间:2017-1-25 13:25:15
上示波器看波形先

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zoomdy 回答时间:2017-1-25 15:44:35
建议先用逻辑分析仪抓取波形,确认硬件没有问题

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zbber 回答时间:2017-1-25 16:51:54
先看看编码器的输入脉冲是否正常
peter001 回答时间:2017-1-25 19:44:04
顶一下
watershade 回答时间:2017-1-28 00:23:19
我用cube试过,没有问题。没详细看寄存器的配置。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版