OpenEdv-开源电子网

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

使用stm32f103定时器2的编码器模式,读出的脉冲数不对?

[复制链接]

40

主题

150

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6207
金钱
6207
注册时间
2015-7-18
在线时间
450 小时
发表于 2017-10-28 09:51:59 | 显示全部楼层 |阅读模式
1金钱
使用stm32f103的定时器2的编码器模式,通过串口打印读出的脉冲数,不是0就是我配置的4559,不知道哪里有问题?
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;   
//GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);
//PB6 ch1  A,PB7 ch2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能TIM4时钟
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_IPU;//PA6 PA7浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);                           

NVIC_Config(2);

TIM_DeInit(TIM2);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 1140*4-1;  //设定计数器重装值   TIMx_ARR = 359*4
TIM_TimeBaseStructure.TIM_Prescaler = 0; //TIM3时钟预分频值
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_Rising ,TIM_ICPolarity_Rising);//使用编码器模式3,上升下降都计数


TIM_ICStructInit(&TIM_ICInitStructure);//将结构体中的内容缺省输入
TIM_ICInitStructure.TIM_ICFilter = 8;  //选择输入比较滤波器
TIM_ICInit(TIM2, &TIM_ICInitStructure);//将TIM_ICInitStructure中的指定参数初始化TIM3

// TIM_ARRPreloadConfig(TIM4, ENABLE);//使能预装载
TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除TIM3的更新标志位
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//运行更新中断
//Reset counter
TIM2->CNT = 0;//

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




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-10-30 01:57:06 | 显示全部楼层
回复

使用道具 举报

40

主题

150

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6207
金钱
6207
注册时间
2015-7-18
在线时间
450 小时
 楼主| 发表于 2017-10-30 08:38:35 | 显示全部楼层

原子哥别光顶啊
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-9-9
在线时间
7 小时
发表于 2017-11-9 00:48:10 | 显示全部楼层
IO口要设置复用。
回复

使用道具 举报

40

主题

150

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6207
金钱
6207
注册时间
2015-7-18
在线时间
450 小时
 楼主| 发表于 2017-11-9 08:31:54 | 显示全部楼层
设置了
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-5-1
在线时间
12 小时
发表于 2019-7-26 10:00:02 | 显示全部楼层
帮顶,我也有同样问题
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2020-1-15
在线时间
21 小时
发表于 2020-5-20 14:55:21 | 显示全部楼层
请问大佬解决了吗,遇到了同样的问题
回复

使用道具 举报

40

主题

150

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6207
金钱
6207
注册时间
2015-7-18
在线时间
450 小时
 楼主| 发表于 2020-5-25 11:56:19 | 显示全部楼层
weiyouxiu 发表于 2020-5-20 14:55
请问大佬解决了吗,遇到了同样的问题

NVIC_InitTypeDef                                         NVIC_InitStructure;                                   //声明中断结构体     
                TIM_ICInitTypeDef TIM_ICInitStructure;
                RCC->APB1ENR|=1<<0;     //TIM2时钟使能
                RCC->APB2ENR|=1<<2;    //使能PORTA时钟
                GPIOA->CRL&=0XFFFFFF00;//PA0 PA1
                GPIOA->CRL|=0X00000044;//浮空输入
                /* 把定时器初始化为编码器模式 */
                TIM2->PSC = 0x0;//预分频器
                TIM2->ARR = 65534;//设定计数器自动重装值
                TIM2->CCMR1 |= 1<<0;          //输入模式,IC1FP1映射到TI1上
                TIM2->CCMR1 |= 1<<8;          //输入模式,IC2FP2映射到TI2上
                TIM2->CCER |= 0<<1;           //IC1不反向
                TIM2->CCER |= 0<<5;           //IC2不反向
                TIM2->SMCR |= 3<<0;                  //SMS='011' 所有的输入均在上升沿和下降沿有效
        //        TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12,
        //                             TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
                TIM_ICInitStructure.TIM_ICFilter = 0;  //选择输入比较滤波器
                TIM_ICInit(TIM2, &TIM_ICInitStructure);//将TIM_ICInitStructure中的指定参数初始化TIM3
                TIM2->CNT |=30000;
                TIM2->CR1 |= 0x01;    //CEN=1,使能定时器
               
                NVIC_InitStructure.NVIC_IRQChannel                                                                                 = TIM2_IRQn;                //设置TIM2中断通道
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority         = 0;                                                //抢占中断优先级设置为0
                NVIC_InitStructure.NVIC_IRQChannelSubPriority                                 = 0;                                                //响应中断优先级设置为0
                NVIC_InitStructure.NVIC_IRQChannelCmd                                                                 = ENABLE;                                //使能TIM2中断

                NVIC_Init(&NVIC_InitStructure);
然后配置了外部中断,在外部中断中读取脉冲数
我记得还有一个库函数的,暂时找不到了,只有这个寄存器的了
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2020-1-15
在线时间
21 小时
发表于 2020-5-26 11:36:18 | 显示全部楼层
追月 发表于 2020-5-25 11:56
NVIC_InitTypeDef                                         NVIC_InitStructure;                                   //声明中断结构体     
                TIM_ICInitTypeDef TIM_ICI ...

好的,谢谢你,我再试试
回复

使用道具 举报

40

主题

150

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6207
金钱
6207
注册时间
2015-7-18
在线时间
450 小时
 楼主| 发表于 2020-5-26 14:13:19 | 显示全部楼层
weiyouxiu 发表于 2020-5-26 11:36
好的,谢谢你,我再试试

嗯,我这程序我项目上实际用过,问题不大
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2020-1-29
在线时间
7 小时
发表于 2020-5-28 21:21:52 | 显示全部楼层
我要读取四个编码器电机,用到定时器2,3,4,5,只有定时器2 不行,同样的设置其他三个都可以,定时器2 有什么特殊吗
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-2-5
在线时间
12 小时
发表于 2021-4-19 20:34:55 | 显示全部楼层
heou 发表于 2020-5-28 21:21
我要读取四个编码器电机,用到定时器2,3,4,5,只有定时器2 不行,同样的设置其他三个都可以,定时器2 有什 ...

哥们,能给我发个例程参考下吗
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2021-6-23
在线时间
5 小时
发表于 2021-7-2 14:50:38 | 显示全部楼层
遇到了同样地问题,楼主有例程吗,找个对比一下
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2021-9-21
在线时间
19 小时
发表于 2021-11-9 22:17:51 | 显示全部楼层
请问楼主问题解决了吗,我也是同样的问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 20:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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