EC11代码 旋转编码器

一、硬件部分

1、EC11硬件和时序

硬件不详细叙述,RC滤波一定要加,不然检测不准。

A为上升沿时,B为高电平。顺时针

A为下升沿时,B为低电平。顺时针

A为上升沿时,B为低电平。逆时针

A为下升沿时,B为高电平。逆时针

2、单片机接口

使用STM32 PA2(中断口),PA4(普通输入)。

二、软件部分

使用原子STM32F103寄存器模板。

1、GPIO初始化和宏定义

#define B_PORT   PAin(4)
#define A_PORT   PAin(2)

void KEY_Init(void)
{
	RCC->APB2ENR|=1<<2;     //使能PORTA时钟
	GPIOA->CRL&=0XFFF0F0FF;	//PA2,4设置成输入  
	GPIOA->CRL|=0X00080800;
}

2、中断初始化

void EXTIX_Init(void)
{
	KEY_Init();
	Ex_NVIC_Config(GPIO_A,2,FRTIR); //上升沿、下降沿都触发
	MY_NVIC_Init(2,3,EXTI2_IRQn,2);	//抢占2,子优先级3,组2
}

3、中断服务程序

char count=0;

void EXTI2_IRQHandler(void)
{
    /*初始化采样值,防止干扰while值的判断*/
    //char keytemp=0x55;    错误的
    static char keytemp=0x55;   //根据网友jwdeng1995  反馈指正  非常感谢
    /*keytemp&0X0F 表示只取末尾四位为有效值*/
    /*0x0F 表示采样四次IO为高电平  表示IO状态稳定在高电平*/
    /*0x00 表示采样四次IO为低电平  表示IO状态稳定在低电平*/
    while(((keytemp&0X0F)!=0x0F)&&((keytemp&0X0F)!=0x00))
    {
        /*间隔1us后采集*/
        delay_us(1);
        /*按键缓存器左移一位*/
        keytemp<<=1;
        /*当脉冲脚为高时 或称为A相*/
        if(A_PORT== 1)
        {
            /*按键缓存器末尾补1*/
            keytemp |= 0x01;
        }
    }
    /*引脚电平稳定状态后判断AB脉冲 判断方向正反 然后加减脉冲*/
    if(A_PORT==1)
    {
        if(B_PORT==1)
        {
            count++;    /*A上升沿时 B为高 顺时针*/
        }
        else
        {
            count--;    /*A上升沿时 B为低 逆时针*/
        }
    }
    else
    {
        if(B_PORT==0)
        {
            count++;    /*A下降沿时 B为低 顺时针*/
        }
        else
        {
            count--;    /*A下降沿时 B为高 逆时针*/
        }        
    }
	EXTI->PR=1<<2;  //清除LINE2上的中断标志位  
}

 

本文到此结束。

本人比较懒,如果有错误欢迎指正。

欢迎有共同兴趣爱好的人加群交流:QQ群:37244526

  • 9
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
EC11是一种常见的旋转编码器,适用于微控制器的输入设备。STM32是一系列32位ARM Cortex-M微控制器的型号。下面是关于EC11旋转编码器的STM32源码的简要说明。 首先,要使用EC11旋转编码器,我们需要将其连接到STM32微控制器的相应GPIO引脚。这通常涉及到连接旋转编码器的A相、B相和SW(按下旋转编码器)引脚到微控制器的GPIO引脚,并进行所需的外部中断或输入捕获配置。 接下来,我们可以编写STM32源码来读取EC11旋转编码器旋转和按键事件。首先,我们需要设置GPIO引脚的相关配置,如输入模式、中断触发方式等。 然后,我们可以使用STM32的外部中断或输入捕获模块来检测旋转编码器旋转事件。外部中断可以在旋转编码器的A相或B相引脚上触发,并且可以根据A相和B相的相位关系来判断旋转方向。另外,输入捕获模块可以用来测量旋转编码器旋转速度。 此外,我们还可以使用GPIO中断来检测EC11旋转编码器的按键事件。当按下旋转编码器的SW引脚时,相关的GPIO中断会被触发,我们可以在中断处理函数中处理按键事件。 根据具体的需求,我们可以编写处理旋转和按键事件的代码,例如更新显示、调整参数等。这些代码可以根据旋转编码器旋转方向增加或减少数值,或执行其他相关操作。 综上所述,通过合适的GPIO配置和适当的中断处理,我们可以编写STM32源码来实现对EC11旋转编码器的读取和响应。这样,我们就能够利用EC11旋转编码器为STM32微控制器提供旋转和按键输入功能。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值