野火13:GPIO输入——按键检测

2023-11-04

 #include "stm32f10x.h"
#include "bsp_led.h"  
#include "bsp_key.h" 
int main(void)
{    
    /* LED端口初始化,跟上一节的LED一模一样,直接拿过来用 */
    LED_GPIO_Config();
    LED1_ON;

    /* 按键端口初始化 ,在上一节的基础上改了一点点东西而已*/
    Key_GPIO_Config();
    
    /* 轮询按键状态,若按键按下则反转LED 。强行做了一个按键检测和LED灯亮灭的关系函数。让检测到按下一次,灯状态反转一次。
    用的是 #define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态 这个函数,这个函数还没搞明白??让LED1端口(GPIOB)的ODR值(0001)与LED1的pin脚值(GPIO_Pin_5)取异或,结果再给ODR。

#define  LED1_TOGGLE         digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)                 异或运算:位相同则为0,位不同则为1;*/
    while(1)                            
    {       
        if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON  )
        {
            /*LED1反转*/
            LED1_TOGGLE;
        } 

        if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON  )
        {
            /*LED2反转*/
            LED2_TOGGLE;
        }        
    }
}
/*********************************************END OF FILE**********************/

bsp_key.c

 /* *函数名:Key_Scan
 * 描述  :检测是否有按键按下
 * 输入  :GPIOx:x 可以是 A,B,C,D或者 E
 *             GPIO_Pin:待读取的端口位     
 * 输出  :KEY_OFF(没按下按键)、KEY_ON(按下按键) */

uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{            
    /*检测是否有按键按下 */
    if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )  
    {     
        /*等待按键释放 */
        while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);   
        return     KEY_ON;     
    }
    else
        return KEY_OFF;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

野火13:GPIO输入——按键检测 的相关文章

  • 处理器指令周期执行时间

    我的猜测是 no operation 内在 ARM 指令应花费 1 168 MHz 来执行 前提是每个NOP在一个时钟周期内执行 我想通过文档验证这一点 有关处理器指令周期执行时间的信息是否有标准位置 我试图确定 STM32f407IGh6
  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • GCC - 如何停止链接 malloc?

    我正在努力将我的代码缩减到最小的骨架大小 我使用的是只有 32k 闪存的 STM32F0 需要很大一部分闪存用于数据存储 我的代码已经有大约 20k 闪存大小 其中一些是由于使用了 STM32 HAL 函数 我可以在以后需要时对其进行解释和
  • 优化 ARM Cortex M3 代码

    我有一个 C 函数 它尝试将帧缓冲区复制到 FSMC RAM 这些函数将游戏循环的帧速率降低至 10FPS 我想知道如何分析反汇编的函数 我应该计算每个指令周期吗 我想知道CPU把时间花在哪里 在哪个部分 我确信该算法也是一个问题 因为它的
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • rt-thread studio中新建5.02版本报错

    先吐槽一下 rt thread studio出现BUG真多 好多时间都是在找BUG 但里面用好多控件还是挺好用的 真是又爱又恨 所以一般使用功能不多的话还是用keil多一点 创建5 02版本工程之后直接进行编译 直接会报下面这个错误 资源
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • STM32F4 通过软复位跳转到引导加载程序,无需 BOOT0 和 BOOT1 引脚

    我问这个问题是因为可以在这里找到类似问题的答案 通过应用程序跳转到 STM32 中的引导加载程序 即从用户闪存在引导模式下使用引导 0 和引导 1 引脚 用户 JF002 JF002回答 当我想跳转到引导加载程序时 我在其中一个备份寄存器中
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后

随机推荐

  • 【RuoYi-Vue-Plus】问题笔记 07 - V3.5.0 Redisson 报错 Unable to send PING command over channel

    文章目录 前言 参考目录 问题说明 问题解决方法 前言 最近找了一下终于解决了 Redisson 的 RedisTimeoutException 报错问题 在此记录一下 参考目录 Redisson Issues 3273 Redisson
  • 浩辰CAD 2021:深度升级,全面提升用户体验!

    在全球新冠疫情背景下 全球经济发展速度明显减缓 国内国外的市场竞争更加激烈 各企业对于提升数字化 网络化 智能化发展水平的需求也愈发迫切 这就需要企业配备更加全面和系统化的数字化设计平台 提高创新研发能力和市场竞争力 快速响应市场需求 把握
  • UnityVR--机械臂场景4-礼物和圣诞树

    本文场景中被抓取的物体是礼物 使用机械臂抓取礼物 将礼物放置在圣诞树的某个位置 来装饰圣诞树 1 礼物的设置 礼物必须具备Collider和Rigidbody 因为需要手爪放开后 礼物会自由掉落的效果 还要将礼物设置为 Goods 的标签
  • 十句话,不黄不色,但很经典~~~~~~~~~~

    1 如果钱还宽裕 别养二奶 偷偷养几个贫困山区的学生 别让人家知道你是谁 要不然见面了多尴尬 多不好意思 但是你心里一定会觉得舒坦 比包二奶提心吊胆的要好得多 如果真想包也可以包一个 好事坏事一起做 人吗 本来就复杂 2 遇到夜里摆地摊的
  • 浅谈 C/C++ 的条件编译

    1 条件编译的时机 我们都知道vscode其实是一个编辑器 你要在上面跑C或者C 你需要配置编译器 拿编译器是怎样吧一个文本文件变成一个可执行文件的呢 那必然是经历以下这四步 预处理 宏替换 头文件的展开 去注释 条件编译 编译 将预处理后
  • go语言-数组指针

    1 数组指针 1 数组指针与指针数组 这俩概念原本在c语言中就是一个绕口令般的存在 尽管从类型角度来看两者并没什么相似的地方 但是在go语言中对这两个类型的设定做出了一些不同的规定 首先交代一下基本概念 数组指针 指的是一个指针 只不过这个
  • RPC的详解和使用

    目录 一 基础介绍 1 1 为什么需要RPC 1 2 RPC介绍 二 RPC通信实现原理 2 2 RPC调用过程 三 RPC框架的安装和使用 PHP 3 1 php目前流行的RPC框架有哪些 3 2 Hprose框架的使用案例 项目开发比较
  • Could not build wheels for mmcv-full, which is required to install pyproject.toml-based projects

    Could not build wheels for mmcv full which is required to install pyproject toml based projects 先安装mim 注意事项 需要降低mmcv版本 p
  • mbedTLS常用结构体

    ECP密钥对mbedtls ecp keypair brief ECP key pair structure A generic key pair that could be used for ECDSA fixed ECDH etc no
  • windows2016安装.netFramework 3.5

    2016服务器默认安装的是4 6 2的 net但是有时候我们经常会需要用到3 5版本 但是2016又不能像以前的版本一样直接下载安装 这里介绍2个办法进行安装 1 使用服务器安装工具安装 打开服务器管理器 选择添加角色和功能 下一步 选择第
  • 分布式深度学习技术-AllReduce

    如果只想了解核心思想 只需要关注红色字体部分即可了解AllReduce和Ring AllReduce算法的核心思想 Hello I am Yuichiro Ueno I participated in a summer internship
  • qt 自定义信号与槽

    在qt中 信号与槽 发送方和接收方都是可以自定义的 这里作为实验 我们定义两个类 一个是老师 一个是学生 当下课的时候 老师作为发送方发送信号 该下课了 作为接收方的学生则提供槽函数 回复老师 该干饭了 qt提供的机制令c 程序在其中可以较
  • 100天精通Python(基础篇)——第3天:变量

    文章目录 一 变量是什么 有什么作用 二 变量的定义格式是 三 变量的特征是 四 print语句如何输出多分内容 五 示例代码 一 变量是什么 有什么作用 变量就是在程序运行时 记录数据用的 二 变量的定义格式是 变量名 变量值 x 10
  • 基于51单片机的大气压检测系统

    一 硬件方案 本设计主要通过气压传感器BMP180获得当前位置的温度和大气压值 并通过LCD1602显示 并根据测量值与设置好的阀值进行对比进而控制蜂鸣器与LED灯进行提示使用者 主要由51单片机 最小系统 LCD1602液晶显示模块 BM
  • 计算机原理--进程管理之进程同步

    进程管理之进程同步 为什么需要进程间的同步 进程间同步的原则 线程同步 为什么需要进程间的同步 生产者 消费者问题 哲学家进餐问题 根源问题是 彼此之间没有通信 如果生产者通知消费者我已经完成意见生产 哲学家向旁边哲学家说我要进餐了 对竞争
  • 当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题?

    作者 阿里云容器平台高级技术专家 曾凡松 逐灵 本文主要介绍阿里巴巴在大规模生产环境中落地 Kubernetes 的过程中 在集群规模上遇到的典型问题以及对应的解决方案 内容包含对 etcd kube apiserver kube cont
  • mysql 数字to char_mysql数字tochar

    例如 指定一个字段的类型为 INT 6 就可以保证所包含数字少于 6 个的值从 二 字符串类型 MySQL 提供了 8 个基本的字符串类型 分别 CHAR VARCHAR 查看当前安装的 MySQL 所支持的字符集 show charset
  • 数字电路设计之Xilinx全局时钟网络的使用

    为了实现同步电路设计 Xilinx使用了一种时钟分配树 其实感觉就是多个H组成的时钟网络 这样就可以使得每个时钟的延时都一样 为了使用Xilinx的全局时钟 可以使用全局时钟原语 IBUFGP U1 I clk in O clk out 全
  • [394]chrome浏览器的options参数

    1 背景 在使用selenium浏览器渲染技术 爬取网站信息时 默认情况下就是一个普通的纯净的chrome浏览器 而我们平时在使用浏览器时 经常就添加一些插件 扩展 代理之类的应用 相对应的 当我们用chrome浏览器爬取网站时 可能需要对
  • 野火13:GPIO输入——按键检测

    include stm32f10x h include bsp led h include bsp key h int main void LED端口初始化 跟上一节的LED一模一样 直接拿过来用 LED GPIO Config LED1