OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7946|回复: 6

STM32F407定时器驱动EC11编码器 无法计数求指导

[复制链接]

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2015-4-5
在线时间
18 小时
发表于 2016-5-27 15:54:08 | 显示全部楼层 |阅读模式
1金钱
定时器配置代码如下

[mw_shl_code=applescript,true]void EC11_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_ICInitTypeDef TIM_ICInitStructure;   
       
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);                                                                                                                                                                                                                        //使能TIM4时钟         
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;                                                                                                                                                                        //EC11A MOD B A
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                                                                                                                                                                                                                                                        //普通输入模式
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;                                                                                                                                                                                                                                         //定时器4中断
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;                                                                                                                                                                                        //抢占优先级1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;                                                                                                                                                                                                                        //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                                                                                                                                                                                         //中断使能
  NVIC_Init(&NVIC_InitStructure);
       
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
        TIM_TimeBaseStructure.TIM_Period = 1333;                                                                                                                                                                                                                                                                  //设定计数器重装值   
        TIM_TimeBaseStructure.TIM_Prescaler = 0;                                                                                                                                                                                                                                                                         //TIM4时钟预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;                                                                                                                                                                                                                //设置时钟分割 T_dts = T_ck_int   
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                                                                                                                                                                                         //TIM向上计数
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
       
        TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising ,TIM_ICPolarity_Rising);        //使用编码器模式3
        TIM_ICStructInit(&TIM_ICInitStructure);                                                                                                                                                                                                                                                                                //将结构体中的内容缺省输入
        TIM_ICInitStructure.TIM_ICFilter = 1;                                                                                                                                                                                                                                                                                  //选择输入比较滤波器
        TIM_ICInit(TIM4, &TIM_ICInitStructure);                                                                                                                                                                                                                                                                                //将TIM_ICInitStructure中的指定参数初始化TIM3

        ;

        TIM_ClearFlag(TIM4, TIM_FLAG_Update);                                                                                                                                                                                                                                                                                        //清除TIM3的更新标志位
        TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);                                                                                                                                                                                                                                                                //开启TIM3更新标志使能

        TIM_SetCounter(TIM4,0);                                                                                                                                                                                                                                                                                                                                                //

        TIM_Cmd(TIM4, ENABLE);                                                                                                                                                                                                                                                                                                                                           //启动TIM3定时器
}[/mw_shl_code]

使用的是定时器TIM4 CH1 CH2   

[mw_shl_code=applescript,true]int main(void)
{
//  u8 i;
        u32 n_Counter;
        delay_init(168);
       
        KEY_Init();
        EC11_Init();
       
    while (1)
    {
//                        i=KEY_Scan(1);
                        n_Counter = TIM_GetCounter(TIM4);
                        n_Counter =n_Counter;
                        delay_ms(500);
    }
}[/mw_shl_code]

循环读取计数器的值,但是没有变化
示波器能看到输入引脚的波形   波形没问题  
原理图如下
求各位大神解答
321.png

最佳答案

查看完整内容[请看2#楼]

我是这么做的1. GPIO用AF,OD或者PP(这两个我在用的时候并没有发现有什么区别,或者我忘了。。。。) 2.GPIO 复用为TIM4 3. 我在用TIM4有点未知的问题,你可以试试有没有
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2015-11-4
在线时间
51 小时
发表于 2016-5-27 15:54:09 | 显示全部楼层
我是这么做的1. GPIO用AF,OD或者PP(这两个我在用的时候并没有发现有什么区别,或者我忘了。。。。) 2.GPIO 复用为TIM4 3. 我在用TIM4有点未知的问题,你可以试试有没有
回复

使用道具 举报

0

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2015-6-21
在线时间
52 小时
发表于 2016-5-28 05:23:13 | 显示全部楼层
我都不想仔细看楼主的内容,首先可以想象一下芯片的速度是多少,而那个脉冲编码器您以最快的速度抡圆了扭每秒钟能旋转出多少脉冲呢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-5-28 20:20:12 | 显示全部楼层
帮顶
回复

使用道具 举报

12

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2015-11-4
在线时间
51 小时
发表于 2016-5-30 10:12:38 | 显示全部楼层
我说的是在你程序里没有看见的,我的做法如上
回复

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2015-4-5
在线时间
18 小时
 楼主| 发表于 2016-7-4 21:47:12 | 显示全部楼层
北京蜈蚣 发表于 2016-5-28 05:23
我都不想仔细看楼主的内容,首先可以想象一下芯片的速度是多少,而那个脉冲编码器您以最快的速度抡圆了扭每秒 ...

您的意思是我用这个办法读脉冲浪费了么。
回复

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2015-4-5
在线时间
18 小时
 楼主| 发表于 2016-7-4 22:27:48 | 显示全部楼层
夜愿晨城 发表于 2016-5-27 15:54
我是这么做的1. GPIO用AF,OD或者PP(这两个我在用的时候并没有发现有什么区别,或者我忘了。。。。) 2.GPI ...

的确是没有开启复用。。。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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