OpenEdv-开源电子网

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

求用普通I/O口驱动EC11编码器的程序。

[复制链接]

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2017-6-29 16:13:22 | 显示全部楼层 |阅读模式
1金钱
求用普通I/O口驱动EC11编码器的程序。用定时器的太复杂了。

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

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
 楼主| 发表于 2017-6-30 09:49:45 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-7-1 01:21:52 | 显示全部楼层
没有,自己写了
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
 楼主| 发表于 2017-7-2 09:37:35 | 显示全部楼层
遗憾,没有人愿意帮忙。
那就再问一句:原来用在51,PIC,AVR单片机上的EC11编码器的程序可以移植到STM32吧?就是说不想用STM32的什么定时器之类的,就是用GOIO口,应该可以吧。
回复

使用道具 举报

16

主题

139

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1298
金钱
1298
注册时间
2016-10-18
在线时间
211 小时
发表于 2017-7-2 21:13:20 | 显示全部楼层
rjx007 发表于 2017-7-2 09:37
遗憾,没有人愿意帮忙。
那就再问一句:原来用在51,PIC,AVR单片机上的EC11编码器的程序可以移植到STM32吧 ...

可以的 不过有专门的定时器口可以接编码器
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
 楼主| 发表于 2017-7-3 14:39:26 | 显示全部楼层
本帖最后由 rjx007 于 2017-7-3 15:41 编辑

试了下面的程序,可以用,但是正反转数值都是加,不能减,不知何故?请求帮助。用定时器的觉得太复杂,新手不完全弄的懂。
#define ROTATE_A  PAin(2)
#define ROTATE_B  PAin(3)
s16 DATA=0;

void EXTI2_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line2) != RESET)
  {
   delay_us(500);//消抖
    if(ROTATE_A!=ROTATE_B)
     {
        DATA++;   
     }
        else DATA--;
    EXTI_ClearITPendingBit(EXTI_Line2);
  }
}
回复

使用道具 举报

13

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2019-8-9
在线时间
48 小时
发表于 2020-2-1 17:00:13 | 显示全部楼层
这个就是,但是代码我给改,一中断配置哪有点搞不清
源码,忘了在哪里找的,有点乱对不号
主要,三个中断口
我看看能用上了,随带告诉 我一下,哪个地方是不是我给改IO少了,
#include "exti.h"
#include "ec11.h"
#include "delay.h"
#include "usart.h"
u8 shu=0;
//ía2¿ÖD¶Ï3õê¼»ˉ3ìDò
//3õê¼»ˉPA0,PA13,PA15ÎaÖD¶Ïêäèë.

//ía2¿ÖD¶Ï3õê¼»ˉ3ìDò
void EXTIX_Init(void)
{
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//ía2¿ÖD¶Ïè«ÄüAFIOê±Öó

                 /************************3õê¼»ˉ°′¼üIOÄ£ê½*ÕaàïoüÖØòa**********************/
          /************************ÔúÕaàïEC11.CÎļt¶¨òåía2¿òy½Å½ó¿ú**********************/
         /************************ÔúÕaàïEC11.HÎļto궨òåáËòy½Åμıäá¿Ãû×Ö¡£¿éòÔÔúEC11.HÎļtÖD¸ü¸Ä**********************/
        knob_init();   
         /*************        ************************************/
    //GPIOA6 ÖD¶ÏÏß¼°ÖD¶Ï3õê¼»ˉÅäÖÃ
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource6);
          EXTI_InitStructure.EXTI_Line=EXTI_Line6;
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//éÏÑØ′¥·¢
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_Init(&EXTI_InitStructure);        //¸ù¾YEXTI_InitStruct2Îêy3õê¼»ˉEXTI¼Ä′æÆ÷
/***在这里怎么就一个IO的配置,我记的我没动过当初怎么运行的,我现在硬件作别的没法测试,*///////////////////
               
                NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; ///ê1Äü°′¼üËùÔúμÄía2¿ÖD¶Ïí¨μà
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //ÏèÕ¼óÅÏè¼¶4λ,1216¼¶
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;                //ÏèÕ¼óÅÏè¼¶0λ,′óóÅÏè¼¶4Î
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        //ê1Äüía2¿ÖD¶Ïí¨μà
          NVIC_Init(&NVIC_InitStructure);


}

//ÖD¶Ï·tÎñoˉêy
void EXTI9_5_IRQHandler(void)
{
         
        delay_ms(1);        //*************Ñóê±ÖØòa±ØDëÑóê±*******************
        if(kongzhi1_io==1)       
                {
                        if(kongzhi2_io == 1)
                        {
                                 shu++;
                                        if(shu >100)shu=100;
                                printf(" %d \r\n",shu);//′®¿úêä3ö
                                 
                                delay_ms(10);
                           }else{
                                                        shu--;
                                        if(shu <1)shu=0;
                                        printf(" %d \r\n",shu);//′&#174;&#191;úê&#228;3&#246;
                                 
                                 }
          }               
         EXTI_ClearITPendingBit(EXTI_Line6);    //&#199;&#229;3yLINE6±ê&#214;&#190;&#207;à
}

ec11 LED串口测试.rar

3.18 MB, 下载次数: 143

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 03:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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