STM32F103学习笔记(2.3)——读GPIO 按键

2023-05-16

为了读取引脚的高低电平,就需要将引脚配置成输入模式,并读取IDR寄存器。

目录

寄存器配置

端口配置低寄存器(GPIOx_CRL) (x=A..E)

端口输入数据寄存器(GPIOx_IDR) (x=A..E)

 按键点灯

寄存器代码

库函数代码


寄存器配置

端口配置低寄存器(GPIOx_CRL) (x=A..E)

 

 将按键连接到PA4引脚上,需要将GPIOA的第四个引脚配置成上拉模式,那就需要将CRL的第19位置1,16-18位置零

代码可以是这样:

GPIOA->CRL &= 0xFFF0FFFF;   //清空控制PA4的端口位
GPIOA->CRL |= 0x00080000;   //配置PA4位上拉/下拉输入

第1行对16-19位进行清零操作,因为由手册可知,CRL的上电复位值是0x4444 4444。

为了将PA4配置成上拉输入模式,需要在ODR寄存器里把PA4上拉代码可以是这样:

GPIOA->ODR |= 1<<4;     	//PA4配置为上拉输入
GPIOA->ODR |= 0x10;

在C语言中,这两句是等效的

端口输入数据寄存器(GPIOx_IDR) (x=A..E)

为了读出PA4的状态,需要用到IDR寄存器

IDR寄存器的第0位到第15位分别是PIN0到PIN15的引脚状态,1表示高电平,0表示低电平

读I/O口的代码可以是这样:

if(GPIOA->IDR &(1<<4))    //判断PA4是否是高电平
{
	//高电平执行
}else
{
    //低电平执行
}

 按键点灯

将一个按键接到PA4,一个LED接到PA0,实现按下按键,LED等亮起

按键一端接地,另一端接PA4

LED一端接VCC,串联一个限流电阻,再接到PA0

在主程序里循环判断PA4的状态,当按键被按下时,PA4接地,则是低电平,将PA0给低电平,LED灯就会亮起

代码可以是这样:

#include "stm32f10x.h" 

int main(void)
{ 
	RCC->APB2ENR |= 1<<2;    	//使能GPIOA的时钟
	GPIOA->CRL &= 0xFFF0FFF0;   //清空控制PA0和PA4的端口位
	GPIOA->CRL |= 0x00080001;   //配置PA0为通用推挽输出,速度为10M,PA4口为上下拉输入
	GPIOA->ODR |= 1<<4;     	//PA4配置为上拉输入
    GPIOA->ODR |= 1<<0;         //PA0初始输出高电平
 
	while(1)
	{
		if(GPIOA->IDR &(1<<4)) //判断是否按下
		{
			GPIOA->ODR |= (1<<0);      //PA0置1,LED亮起
		}else
		{
			GPIOA->ODR &= ~(1<<0);      //PA0置零,LED灯熄灭
		}
    }
}

 库函数的代码可以是这样:

#include "stm32f10x.h"                  // Device header

int main(void)
{
	GPIO_InitTypeDef	GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;		//上拉输入
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//输入状态时速度是没用的
	GPIO_Init(GPIOA , &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	//推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA , &GPIO_InitStructure);

    while(1)
	{
        if(GPIO_ReadInputDataBit(GPIOA , GPIO_Pin_4) == 0)
		{
			GPIO_ResetBit(GPIOA , GPIO_PIN_0);        //PA0给低电平
			//GPIO_WriteBit(GPIOA , GPIO_Pin_0 , Bit_RESET);        //和上一句等效
		}else
        {
            GPIO_SetBits(GPIOA , GPIO_Pin_0);        //PA0给高电平
        }
    }
}

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

STM32F103学习笔记(2.3)——读GPIO 按键 的相关文章

随机推荐

  • 谈谈自媒体的流量变现。

    我两天前发了一条广告 xff0c 关于按摩颈椎仪的广告 自媒体做广告这事 xff0c 有些读者不喜欢 xff0c 有些读者见惯不惯 xff0c 我觉得没关系 xff0c 今天不谈具体广告 xff0c 今天就这个引子 xff0c 谈谈我对自媒
  • 在Windows上安装Ubuntu子系统系统,报错WslRegisterDistribution failed with error: 0x8007019e

    在Windows应用商店安装Ubuntu系统 xff0c 报错WslRegisterDistribution failed with error 0x8007019e 1 报错内容 Installing span class token p
  • 生成器(建造者)模式

    文章目录 思考生成者模式1 生成器模式的本质2 何时选用生成器模式3 优缺点4 生成器模式的结构5 实现生成器模式构建对象的多种表示形式生成器模式链式构建对象 思考生成者模式 生成器模式就是将对象构建和对象内部构建分离 xff0c 将一个复
  • 基于AList实现网盘挂载和WebDAV本地挂载网盘

    AList AList是一个支持多种存储 xff0c 支持网页浏览和 WebDAV 的文件列表程序 xff0c 由 gin 和 Solidjs 驱动 AList官方文档 xff1a https alist nn ci AList官方GitH
  • 常用Windows快捷键大全

    0 简要 要将电脑玩的溜 xff0c 快捷键是必须要掌握的技能 xff0c 本文汇总了一些常用的快捷键 xff0c 相信加以练习 xff0c 一定能提高你的工作效率 笔者将常用快捷键分为四个系列 xff0c 如下所示 xff1a Win 系
  • Centos8安装MySql,完美解决

    本文使用yum安装mysql linux版本为 centos 8 参考 xff1a MySQL官网yum源 MySQL官网Linux yum安装Mysql CentOS 8 yum安装软件时 xff0c 提示无法从AppStream下载 c
  • aws亚马逊服务器Ubuntu18脚本一键重装系统为centos7

    这两天注册了aws xff0c 送了一年的最低配服务器嘛 但是可使用的系统就是有Ubuntu和Redhat 都试了试不太好用 今天就在网上看到了一键重装的脚本 就记录分享一下 先后执行下列两条命令就可以 xff1a apt get inst
  • 利用excel求特定条件下的最大/小值(maxif/minif)

    欢迎关注我的公众号 xff1a Smilecoc的杂货铺 在Excel中有sumif countif等函数可以实现求特定条件下数值的加总和计数 xff0c 那么如何在一个或多个条件下求出此时的最大值或者最小值呢 xff1f 其实sumif函
  • 时间序列(一):时间序列数据与时间序列预测模型

    时间序列系列文章 xff1a 时间序列 xff08 一 xff09 xff1a 时间序列数据与时间序列预测模型 时间序列 xff08 二 xff09 xff1a 时间序列平稳性检测 时间序列 xff08 三 xff09 xff1a ARIM
  • Windows下解压tar.gz压缩文件

    一 tar gz是什么文件 xff1f 以 tar gz为后缀的文件是一种压缩文件 xff0c 在Linux和macOS下常见 xff0c Linux和macOS都可以直接解压使用这种压缩文件 二 怎么解压tar gz 一些软件支持解压ta
  • Python安装模块(包/库)的方法

    这里写目录标题 通过pip安装正常在线安装pip命令补全更改下载镜像 离线包安装库的下载库的安装whl的安装 tar gz的安装源码安装 本地安装报错 xff08 依赖 xff09 Pycharm中安装手动安装终端命令行安装 Jupyter
  • win10 安装visual studio C++ build tools 【visualcppbuildtools_full.exe】提示安装包丢失 毁坏

    win10 安装visual studio C 43 43 build tools visualcppbuildtools full exe 提示安装包丢失 毁坏 1 问题 xff1a 安装visualcppbuildtools full
  • Excel:使用powerquery进行多表合并

    注 xff1a 本文原创为 xff1a https www cnblogs com fanyu2019 p 11175827 html 本文在原创的基础上添加修改了一点内容 目录 一 单工作簿多工作表合并二 多工作簿单工作表合并三 多工作簿
  • 利用Python调用outlook自动发送邮件

    欢迎关注我的公众号 xff0c 在这里有数据相关技术经验的优质原创文章 使用Python发送邮件有两种方式 xff0c 一种是使用smtp调用邮箱的smtp服务器 xff0c 另一种是直接调用程序直接发送邮件 而在outlook中我们一般是
  • 从 Tableau文件中获取数据方法汇总

    欢迎关注我的公众号 xff0c 在这里有数据相关技术经验的优质原创文章 在实际使用Tableau中经常会遇到需要从已有的tableau文件或仪表板中导出 提取 复制数据 xff0c 本篇文章整理了相关从Tableau文件中获取数据的方法 一
  • Excel中的数字转文本和文本转数字

    公式方法 xff1a 数字转文本 xff1a 61 TEXT A1 34 34 文本转数字 xff1a 直接乘以1即可 数字转文本 xff1a 61 A1 1 或者使用value函数 61 value 分列方法 xff1a 在数据工具 下选
  • vlookup查找匹配值超过255个字符显示#Value的解决办法

    错误原因 这一个错误的起源于在匹配字符串是否相等时出现 Value错误 xff0c 如下图黄色标注的部分 在Excel中提示的错误是 公式中所用的某个值是错误的数据类型 xff08 a value used in the formula i
  • HEXO部署博客内容到github报错

    今天在更新部署博客内容时出现了如下报错 xff1a 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 6
  • GO通过HTTP获取API的返回值(response)

    目录 net httpnet url net http span class token keyword import span span class token string 34 net http 34 span Go语言提供了HTTP
  • STM32F103学习笔记(2.3)——读GPIO 按键

    为了读取引脚的高低电平 xff0c 就需要将引脚配置成输入模式 xff0c 并读取IDR寄存器 目录 寄存器配置 端口配置低寄存器 GPIOx CRL x 61 A E 端口输入数据寄存器 GPIOx IDR x 61 A E 按键点灯 寄