OpenEdv-开源电子网

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

ec11编码器计数通过串口打印出的值始终为0,大伙能帮忙看看嘛,下面是详细情况,急 急!感谢!

[复制链接]

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
发表于 2020-4-7 11:04:56 | 显示全部楼层 |阅读模式
//定时器8的编码器模式的配置,引脚PC6-A相  PC7-B相
#define TIM8_Encoder_Line_Number                                 200//编码器线数,一圈多少个脉冲
u32 TIM8_Count,TIM8_Circle_Count,TIM8_Encoder_Line_Multiple=2;//总计数、圈数计数、脉冲倍频系数(一圈脉冲数=TIM3_Encoder_Line_Number*TIM3_Encoder_Line_Multiple)
        //TIM8 CH1 CH2通道用来进行输入捕获  脉冲计数 调节占空比 (数码管显示通道和占空比)
        void TIM8_Cap_Init(void)
{
        GPIO_InitTypeDef    GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_ICInitTypeDef  TIM8_ICInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8|RCC_APB2Periph_GPIOC, ENABLE);
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        //KEY_Init();
         
        //通道一的配置
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
        GPIO_SetBits(GPIOC,GPIO_Pin_6);    // A通道先设置为高电平
       
        //通道二的配置
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
        GPIO_SetBits(GPIOC,GPIO_Pin_7);   //B通道先设置为高电平
       
       
        //初始化定时器8  TIM8
        TIM_TimeBaseStructure.TIM_Period=TIM8_Encoder_Line_Number*TIM8_Encoder_Line_Multiple-1;
        TIM_TimeBaseStructure.TIM_Prescaler=0;
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
        //TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//溢出多少次后进入中断
        TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);       
        TIM_ICStructInit(&TIM8_ICInitStructure);  
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
       
        TIM_DeInit(TIM8);
        TIM_EncoderInterfaceConfig(TIM8, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
        TIM_ICStructInit(&TIM8_ICInitStructure);
        TIM8_ICInitStructure.TIM_ICFilter=6;
        TIM_ICInit(TIM8,&TIM8_ICInitStructure);
        NVIC_InitStructure.NVIC_IRQChannel=TIM8_UP_IRQn;   //TIM8溢出中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
        TIM_ClearFlag(TIM8,TIM_FLAG_Update);
       // TIM_ITConfig(TIM8,TIM_IT_CC1|TIM_IT_CC2,ENABLE);
       TIM_ITConfig(TIM8,TIM_IT_Update,ENABLE);
       TIM8->CNT=0;
       TIM_Cmd(TIM8,ENABLE);   //使能定时器8  
}
//读取编码器的值的函数
u32 TIM8_Get_Encode(void)
{                                                                                                       
        return TIM8_Circle_Count*TIM8_Encoder_Line_Number*TIM8_Encoder_Line_Multiple+(TIM8->CNT);//获取编码器当前数值
}
//主函数
int main()
{
         
         //串口2
        SystemInit();         
        delay_init();                 //延时函数初始化       
        uart_init(9600);         //串口初始化为9600

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组           
        //LED_Init();                           //初始化与LED连接的硬件接口
        KEY_Init();       
        //SMG_Init();
        //camer_Init();
        //TIM4_PWM_Init(35999,1);     //pwm频率为1khz,周期为1ms
    //TIM5_Int_Init(1999,35999);   
        //switch_Init();
        //detect_Init();
        TIM8_Cap_Init();      
    //TIM1_Cap_Init(0xffff,71);     //定时器的计数频率为1Mhz

        ec11_Init();
        while(1)
{       
        u32  CurrentCount=TIM8_Get_Encode();
        printf("CurrentCount=%d\r\n",CurrentCount);       
}       
//这是串口调试打印的值,编码器左旋右旋都为0,示波器又能捕捉到左旋右旋的状态,这是什么情况呢?

串口打印的值

串口打印的值


         
       
                 
       
       

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

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-4-7 11:08:59 | 显示全部楼层
回复 支持 1 反对 0

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-4-8 11:25:18 | 显示全部楼层
mynameisqgj 发表于 2020-4-8 11:10
哪位大神能帮我指点下

我没有定时器8  改个定时器1的发到原帖子里面  你重新下参考下吧

直接查找替换就能用,你还是不细心吧

你的qq加不上
回复 支持 1 反对 0

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-7 11:06:08 | 显示全部楼层
大家帮帮忙,很急!!谢谢大家
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-7 11:32:53 | 显示全部楼层
nashui_sx 发表于 2020-4-7 11:08
http://www.openedv.com/forum.php?mod=viewthread&tid=301406&extra=

你好,我就是按着你这个来做的编码器计数,但是始终得不到计数值
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-7 11:48:06 | 显示全部楼层
nashui_sx 发表于 2020-4-7 11:08
http://www.openedv.com/forum.php?mod=viewthread&tid=301406&extra=

前辈方便聊下嘛?万分感谢
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-4-7 12:03:44 | 显示全部楼层

回帖奖励 +2 金钱

本帖最后由 nashui_sx 于 2020-4-7 12:21 编辑
mynameisqgj 发表于 2020-4-7 11:48
前辈方便聊下嘛?万分感谢

普通定时器你先尝试下弄出来,再换高级定时器  一步步来,没啥诀窍  我那个帖子的普通定时器肯定可以用  你把TIM3  全换TIM8应该就可以
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-7 16:52:52 | 显示全部楼层
nashui_sx 发表于 2020-4-7 12:03
普通定时器你先尝试下弄出来,再换高级定时器  一步步来,没啥诀窍  我那个帖子的普通定时器肯定可以用   ...

我试了一下午都没得效果,不知道这高级定时器是哪儿配置出了问题,还是读取不到计数
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-4-7 16:58:57 | 显示全部楼层
mynameisqgj 发表于 2020-4-7 16:52
我试了一下午都没得效果,不知道这高级定时器是哪儿配置出了问题,还是读取不到计数

不可能的吧  你查找替换成定时器1试试  是不是你的定时器8引脚外部占用干扰了
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-7 17:12:11 | 显示全部楼层
nashui_sx 发表于 2020-4-7 16:58
不可能的吧  你查找替换成定时器1试试  是不是你的定时器8引脚外部占用干扰了

仔细核对过,引脚没有重复利用的
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-7 17:13:35 | 显示全部楼层
mynameisqgj 发表于 2020-4-7 17:12
仔细核对过,引脚没有重复利用的

用定时器1来测试不太现实,我的定时器1已经被占用了
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-7 17:15:31 | 显示全部楼层
mynameisqgj 发表于 2020-4-7 17:13
用定时器1来测试不太现实,我的定时器1已经被占用了

能不能麻烦加个q细聊下?q1224608149,万分感谢
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-8 11:10:43 | 显示全部楼层
哪位大神能帮我指点下
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-8 13:09:25 | 显示全部楼层
nashui_sx 发表于 2020-4-8 11:25
我没有定时器8  改个定时器1的发到原帖子里面  你重新下参考下吧

直接查找替换就能用,你还是不细心吧 ...

前辈,我加你吧
回复 支持 反对

使用道具 举报

22

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2020-3-3
在线时间
85 小时
 楼主| 发表于 2020-4-9 13:47:07 | 显示全部楼层

问题会不会出在没有焊接外部的上拉电阻?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 02:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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