首页 > 其他分享 >旋转编码器中断方式实现计数

旋转编码器中断方式实现计数

时间:2023-09-09 21:33:48浏览次数:32  
标签:编码器 HAL Struct PIN 中断 EncoderNum 计数 Init GPIO

旋转编码器正转两路信号相位关系

旋转编码器反转两路信号相位关系

↓↓↓↓利用中断方式实现编码器计数↓↓↓↓↓

int32_t EncoderNum=0;
/*初始化PA0,PA1,PA4,打开EXTI中断*/
void Encoder_GPIO_Init(void )
{
    /*PA0=S1,PA1=S2,PA4=KEY*/
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_Init_Struct;
    GPIO_Init_Struct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4;
    GPIO_Init_Struct.Mode = GPIO_MODE_IT_FALLING;
    GPIO_Init_Struct.Pull = GPIO_NOPULL;
    GPIO_Init_Struct.Speed = GPIO_SPEED_FREQ_MEDIUM;
    HAL_GPIO_Init(GPIOA,&GPIO_Init_Struct);
    
    /*设置中断优先级,并使能中断*/
    HAL_NVIC_SetPriority(EXTI0_IRQn,3,3);
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);
    HAL_NVIC_SetPriority(EXTI1_IRQn,3,3);
    HAL_NVIC_EnableIRQ(EXTI1_IRQn);
    HAL_NVIC_SetPriority(EXTI4_IRQn,2,3);
    HAL_NVIC_EnableIRQ(EXTI4_IRQn);

}

/*EXTI中断回调函数*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == GPIO_PIN_0)
    {
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==0)EncoderNum++;
        printf("EncoderNum=%d\n",EncoderNum);
    }
    if(GPIO_Pin == GPIO_PIN_1)
    {
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)EncoderNum--;
        printf("EncoderNum=%d\n",EncoderNum);
    }
    if(GPIO_Pin == GPIO_PIN_4)
    {
        EncoderNum=0;
        printf("EncoderNum=%d\n",EncoderNum);
    }

}

编码器正转与反转两路信号相位不同,由此实现计数值增减,KEY信号归零计数值,结果如下图

标签:编码器,HAL,Struct,PIN,中断,EncoderNum,计数,Init,GPIO
From: https://www.cnblogs.com/Yannnnnn/p/17690181.html

相关文章

  • EXTI外部中断配置
    1.初始化用来产生中断的GPIO    本次实验采用按键产生中断,通过按键按下使得对应的GPIO产生外部中断,初始化代码如下://按键引脚初始化voidKEY_Config(void){ GPIO_InitTypeDefGPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitS......
  • 论文阅读_变分自编码器_VAE
    英文名称:Auto-EncodingVariationalBayes中文名称:自编码变分贝叶斯论文地址:http://arxiv.org/abs/1312.6114时间:2013作者:DiederikP.Kingma,阿姆斯特丹大学引用量:248401读后感VAE变分自编码(VariationalAutoencoder)是一种生成模型,它结合了自编码器和概率图模......
  • 中断
       ......
  • 多摩川编码器协议理解与自做经历-(2)
    1,前言:上一期介绍了多摩川协议里面的数据介绍,这期我们将使用实物多摩川编码器通过485和逻辑分析仪,来实操了解多摩川协议纸上得来终觉浅,绝知此事要躬行。 我先介绍一下我用到的实物。多摩川编码器,伺服驱动器,梦源逻辑分析仪。通过伺服驱动器,看一下了解多摩川编码器和驱动器的......
  • Solution Set - 组合计数
    CF40ENumberTableLink&Submission.显然\(n,m\)奇偶性不同时无解。奇偶性相同时,假设有一行全为空,剩下每行至少一个有空,则除这些位置外没有限制的位置都可以随便填,这些位置一定有唯一可行方案。又因为\(k\lt\max(n,m)\),所以一定有一行或一列为空。假设是一行,如果有其它行全......
  • 自编码器:数据降维和特征提取的新方法
    文章目录自编码器的原理编码过程解码过程自编码器的应用数据降维特征提取拓展应用总结......
  • Lnton羚通AI云算力平台在OpenCV-Python中如何创建计数器
    CVUI之计数器cvui::counter()为一个整型或者double值渲染一个计数器,可以点击向上或向下增加或减少值。PythonCPP原型参数theWhere:画布theX:绘制的XtheY:绘制的YtheValue:值theStep:间隔theFormat:格式化的值或数字。例如,%d或%.2f。theFontScale:字体大小theInsideColo......
  • 中断处理的现场保存——PSW
    来源:《操作系统精髓与设计原理(第九版)》附录cPSW一般包含conditioncods+其他状态信息(如中断使能、内核/用户状态)。conditioncods,计算结果:正、负、0、溢出,条件分支测试的一部分。 ......
  • 优雅的对旋转编码器消抖(EC11,正交)
    环境:STM32SDK:Arduino(烧录了Arduino的bootloader)旋转编码器:EC11此处只处理正交编码器的A,B。在网上随意找的一个截图事宜,观看此图后,默认各位了解EC11的工作逻辑。  消抖的核心思路:A脚设置为上升下降沿均会进中断,下降上升一个变换周期,判断这个周期的A脚,B脚的始末状......
  • 1-5可编程定时器/计数器 8253 实验
    EXTRNInitKeyDisplay:NEAR,Display8A:NEARIO8259_0EQU0250HIO8259_1EQU0251HCOM_ADDREQU0263HT2_ADDREQU0262H_STACKSEGMENTSTACKDW100DUP(?)_STACKENDS_DATASEGMENTWORDPUBLIC'DATA'BUFFERDB8DUP(?)CounterDB?ReDisplayFlagDB......