OpenEdv-开源电子网

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

STM32F407ZG TIM5编码器模式求助

[复制链接]

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2016-8-12
在线时间
40 小时
发表于 2016-8-31 19:57:49 | 显示全部楼层 |阅读模式
1金钱
参照着TIM3改的程序(且TIM3是正常工作的),但是改出的TIM5不正常,以下是修改的程序,麻烦大家帮我看看哪里不对了。

int main(void)
{
        u32 oldcnt5;
        uart_init(115200);
        delay_init(84);
        Encoder_Init();
        while(1)
        {
                delay_ms(10000);
                if(oldcnt5!=TIM5->CNT)
                 {
                         oldcnt5=TIM5->CNT;
                         printf("encoder5:%d\r\n",oldcnt5);
                        TIM5->CNT=0;                         
                         printf("\r\n");
              }
      }
}

void Encoder_Init(void)
{
        GPIO_InitTypeDef         GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_ICInitTypeDef        TIM_ICInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM5);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP ;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

       
        TIM_TimeBaseStructure.TIM_Period = 60000;
        TIM_TimeBaseStructure.TIM_Prescaler = 0;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
       

        TIM_EncoderInterfaceConfig(TIM5, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
        TIM_ICStructInit(&TIM_ICInitStructure);
        TIM_ICInitStructure.TIM_ICFilter = 6;
        TIM_ICInit(TIM5, &TIM_ICInitStructure);
        TIM_ClearFlag(TIM5, TIM_FLAG_Update);  
        TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);
        TIM5->CNT = 0;
        TIM_Cmd(TIM5, ENABLE);
}

最佳答案

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

正确程序应该是这样的: GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; // ENC2 init RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //GPIO_StructInit(&GPIO_InitStructure); /* Configure PA.06,07 as e ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2016-8-12
在线时间
40 小时
 楼主| 发表于 2016-8-31 19:57:50 | 显示全部楼层
正确程序应该是这样的:
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;       
        TIM_ICInitTypeDef        TIM_ICInitStructure;
// ENC2 init
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

        //GPIO_StructInit(&GPIO_InitStructure);
        /* Configure PA.06,07 as encoder input */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);


        GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM5);

        /* Enable the TIM3 Update Interrupt */
        //  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        //  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        //  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        //  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        //  NVIC_Init(&NVIC_InitStructure);

        /* Timer configuration in Encoder mode */
        //TIM_DeInit(TIM3);
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

        TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // No prescaling
        TIM_TimeBaseStructure.TIM_Period = 60000;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);

        TIM_EncoderInterfaceConfig(TIM5, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
        TIM_ICStructInit(&TIM_ICInitStructure);
        TIM_ICInitStructure.TIM_ICFilter = 0;
        TIM_ICInit(TIM5, &TIM_ICInitStructure);

        // Clear all pending interrupts
        TIM_ClearFlag(TIM5, TIM_FLAG_Update);
        TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);

        TIM_Cmd(TIM5, ENABLE);
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2016-8-31 21:12:56 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2016-8-12
在线时间
40 小时
 楼主| 发表于 2016-9-1 13:39:11 | 显示全部楼层
帖子别被沉
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2016-10-7
在线时间
11 小时
发表于 2016-10-7 17:12:11 | 显示全部楼层
我也是,不能正常工作
回复

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
发表于 2016-11-22 22:02:53 | 显示全部楼层
楼主正常了么?
回复

使用道具 举报

0

主题

17

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2016-4-3
在线时间
74 小时
发表于 2016-11-23 22:09:43 | 显示全部楼层
我有点疑问,程序我也写出来了,编码器脉冲频率低的时候挺准的,但是编码器脉冲频率高时完全就检测不到了
回复

使用道具 举报

0

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2017-4-20
在线时间
36 小时
发表于 2017-4-20 14:03:32 | 显示全部楼层
我用正确的改了改还是不行....
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-11-4
在线时间
29 小时
发表于 2017-4-24 20:25:25 | 显示全部楼层
lookatmenow 发表于 2017-4-20 14:03
我用正确的改了改还是不行....

最近我也在搞这个,能不能分享一下正确的程序我qq907161614,跪谢
回复

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
发表于 2017-8-15 21:27:50 | 显示全部楼层
我TIM5编码器模式的更新中断有点问题,我想让编码器转一次,在中断里面计数一次,经过试验后编码器转 一圈后,中断里面计数一下子计数三次。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-6 09:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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