STM32学习--5-2 旋转编码器计次

接线图

 

 按键按下,旋转编码器输出低电平

Encoder.c

#include "stm32f10x.h"                  // Device headerint16_t Encoder_Count;
void Encoder_init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); // 开启APB2Periph外设GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  // 开启APB2Periph外设AFIO时钟// 配置GPIOGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  // 中断输入设置为上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);// 配置EXTIGPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0); // 配置中断GPIOB、pin0GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1); // 配置中断GPIOB、pin1EXTI_InitTypeDef EXTI_InitStructure;  // 配置EXTI_InitStructure参数EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;  // 线14EXTI_InitStructure.EXTI_LineCmd = ENABLE;  // 开启EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 中断模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿触发EXTI_Init(&EXTI_InitStructure);// 配置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置2位响应优先级2位抢占NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel= EXTI0_IRQn; // 设置0NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 1; //设置抢占Preemption和响应优先级为1NVIC_InitStruct.NVIC_IRQChannelSubPriority= 1;NVIC_Init(&NVIC_InitStruct);NVIC_InitStruct.NVIC_IRQChannel= EXTI1_IRQn; // 设置1NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 1; //设置抢占Preemption和响应优先级为1NVIC_InitStruct.NVIC_IRQChannelSubPriority= 1;NVIC_Init(&NVIC_InitStruct);
}int16_t Encoder_Get(void)
{int16_t Temp;Temp = Encoder_Count;Encoder_Count = 0;return Temp;
}void EXTI0_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line0) == SET){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)  // 当pin0中断时,判断Pin1是否为低电平 默认低电平触发{Encoder_Count --;}EXTI_ClearITPendingBit(EXTI_Line0);}
}void EXTI1_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line1) == SET){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) == 0)  // 当pin1中断时,判断Pin0是否为低电平{Encoder_Count ++;}EXTI_ClearITPendingBit(EXTI_Line1);}
}

Encoder.h

#ifndef __ENCODER_H
#define __ENCODER_Hvoid Encoder_init(void);
int16_t Encoder_Get(void);#endif

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Encoder.h"int16_t Num;int main(void)
{	OLED_Init();Encoder_init();OLED_ShowString(1,3,"Num:");  // 字符串用双引号括起来while(1){Num += Encoder_Get();OLED_ShowSignedNum(1,7,Num,5);}
}

效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1562259.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【寻找one piece的算法之路】前缀和(一)

💐个人主页:初晴~ 📚相关专栏:寻找one piece的刷题之路 什么是前缀和? 主要是通过预先计算数组或矩阵的前缀和,来快速查询子数组或子矩阵的和。这种算法可以用空间换时间,提高查询效率。 概念…

leetcode 3217 从链表中移除在数组中的结点

1.题目要求: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums [1,2,3], head [1,2,3,4,5] 输出: [4,5] 解释: 移除数值…

PCL点云处理之求法向量

求法向量干什么?将点渲染成面 1、一个点垂直于一个曲线的切线叫法线 2、在点云中取一块区域,用最小二乘将区域中的点云拟合成一个面(贴合在曲面上的一个切面)在相近的区域计算出n个这样的面,用这个面求出法向量&#…

最新开源:智源BGE登顶Hugging Face月度榜!北大快手开源Pyramid Flow!Rhymes AI发布首款开源多模态AI模型Aria!

文章目录 1. 国产AI模型登顶全球TOP 1!智源BGE下载破亿成Hugging Face月榜冠军2. 北大&快手开源视频生成模型Pyramid Flow,1分钟生成5秒视频3. Rhymes AI发布首款开源多模态AI模型Aria,性能超越GPT-4o mini4. Mistral AI发布 Pixtral-12B…

华为 静态路由和bfd 侦测的实验

实验要求 sw1 上业务地址192.168.1.1/24 SW3 业务地址192.168.2.1/24 正常情况下走主链路,不正常的情况下走备份链路 2 配置 这是基本地址配置 开启了bfd 本端地址为 10.1.1.1 对端地址是10.1.1.2 关键是discrimination 分辨参数 …

【JavaScript】LeetCode:61-65

文章目录 61 课程表62 实现Trie(前缀树)63 全排列64 子集65 电话号码的字母组合 61 课程表 Map BFS拓扑排序:将有向无环图转为线性顺序。遍历prerequisites:1. 数组记录每个节点的入度,2. 哈希表记录依赖关系。n 6&a…

基于深度学习的细粒度图像分析综述【翻译】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 基础信息0 摘要1 INTRODUCTION2 识别与检索 RECOGNITION VS. RETRIEVAL3 问题和…

牛客SQL练习详解 06:综合练习

牛客SQL练习详解 06:综合练习 SQL34 统计复旦用户8月练题情况SQL35 浙大不同难度题目的正确率SQL39 21年8月份练题总数 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧! SQL34 统…

Python100道新手练习题(附答案)

基础语法 1.打印 “Hello, World!” print("Hello, World!")2.定义一个变量并打印其值 message "Hello, Python!" print(message)3.定义两个整数变量并计算它们的和 a 5 b 3 sum a b print(sum)4.使用条件语句判断一个数是否为正数 num 10 if n…

初知C++:AVL树

文章目录 初知C:AVL树1.AVL树的概念2.AVL树的是实现2.1.AVL树的结构2.2.AVL树的插入2.3.旋转2.4.AVL树的查找2.5.AVL树平衡检测 初知C:AVL树 1.AVL树的概念 • AVL树是最先发明的自平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性…

node.js服务器基础

node.js的事件循环 node.js是基于事件驱动的,通常在代码中注册想要等待的事件,设定好回调函数,当事件触发的时候就会调用回调函数。如果node.js没有要处理的事件了,那整个就结束了;事件里面可以继续插入事件,如果有事…

低代码开发技术:驱动MES系统创新与制造业数字化转型的融合之路

低代码开发与生产管理MES系统的融合,是当今制造业数字化转型的一个重要趋势。以下是对这一融合现象的详细分析: 一、低代码开发的概念与特点 低代码开发是一种通过图形化界面和预构建模块来简化应用程序开发过程的方法。它允许开发人员使用拖放组件和最…

接口多继承与子类继承多接口时的冲突问题,方法冲突与变量冲突.....

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

JavaScript 第7章:字符串处理

第7章:字符串处理 在 JavaScript 中,字符串是一个非常常用的数据类型,用于表示文本信息。JavaScript 提供了许多内置的方法来处理字符串,包括操作、搜索、替换和格式化等。 一、字符串操作方法 1. charAt charAt(index) 方法返…

支票欺诈检测AI系统

这是我们 LLM Makerspace 活动的记录摘要,我们使用经过微调的 LLM 构建了一个支票欺诈检测和解释 AI 系统。 那么,支票到底是什么?它们本质上是一种汇款,你将金额写在一张纸上并将其交给某人。它被视为法定货币和服务付款。作为一…

光明乳业乳品四厂勇闯TPM世界级奖终审,开创中国乳品行业新纪元

近日,中国乳品行业的标志性事件在光明乳业乳品四厂隆重上演,该厂迎来了TPM(全面生产维护)世界级奖项的终审评审,这不仅是光明乳业发展历程中的重大突破,也是中国乳品行业首次冲击该领域最高荣誉——TPM世界…

华为面试就这?00后直接拿下20K的offer...

先说一下我的情况,某不知名211本计算机毕业,之前在深圳那边做了大约半年多少儿编程老师,之后内部平调回长沙这边,回来之后发现有点难,这边可能是业绩难做,虚假承诺很厉害,要给那些家长虚假承诺去…

mac 桌面版docker no space left on device

报错信息 docker pull镜像时报: failed to register layer: Error processing tar file(exit status 1): write /home/admin/oceanbase_bak/bin/observer: no space left on device 解决 增加 docker 虚拟磁盘大小。 调整完点击重启即可。

Etsy店铺总是被封?看看这些替代平台!

对于创意商家而言,Etsy是一个充满机遇的电商平台。然而,Etsy平台政策过于苛刻,许多卖家的店铺频繁遭遇封禁,辛苦建立的客户基础瞬间化为乌有。本文将为您介绍几个值得一试的Etsy替代平台,帮助您分散经营风险&#xff0…

匹配全国地址的正则表达式工具类

正则表达式,匹配全国五级地址工具类,可以直接放在项目中使用~ 1级:国 (可忽略不填) 2级:**省、**自治区、**直辖市、**特别行政区、(四个直辖市可忽略不填) 3级:**市、**…