​5- GPIO操作

2023-10-29

本笔记是根据STM32F429单片机的,其他STM32单片机与此类似,基本上都一样的,会一款,其他的基本上没啥问题。本人也是刚学,有不足之处请下方评论。

目录

笔记1 GPIO操作

1.1 读-修改-写操作

常用操作:

位与,&:可实现目标字段的清零,而不影响其他字段。

一般格式:操作对象&=屏蔽字。

屏蔽字的目标字段设置为0,其他设置为1.

例如:将GPIOA端口的3号、10号引脚输出低电平,使用位与操作将GPIOA的ODR的3位和10位清零实现。

GPIOA->ODR&=~(1<<3 |1<<10);

其中,~(1<<3 |1<<10)是操作需要的屏蔽字,将1左移3位和1左移10位合并在一起,然后取反得到。

位或,|:可实现目标字段的置位,而不影响其他字段。

一般格式:操作对象 | =屏蔽字。

屏蔽字的目标字段设置为1,其他设置为0。

例如:将GPIOA端口的2号、8号引脚输出高电平,使用位或操作将GPIOA的ODR的2位和8位置位实现。

GPIOA->ODR|=(1<<2 |1<<8);

其中,(1<<2 |1<<8)是操作需要的屏蔽字,将1左移2位和1左移8位合并在一起得到。

异或,^:可实现目标字段的取反,而不影响其他字段。

一般格式:操作对象^=屏蔽字。

屏蔽字的目标字段设置为1,其他设置为0.

例如:将GPIOA端口的1号、11号和13号引脚的电平反转,使用异或操作将GPIOA的ODR的1位、11位和13位取反实现。

GPIOA->ODR^=(1<<1)| (1<<11) | (1<<13);

其中,(1<<1)| (1<<11) | (1<<13);是操作需要的屏蔽字,将1左移1位、1左移11位和1左移13位合并在一起得到。

1.2 GPIO结构原理

GPIO引脚的内部构造图如图所示,每个GPIO相互独立,包括输入驱动器、输出驱动器、上拉/下拉控制电路和5V耐压保护电路

每个通用 I/O 端口包括以下寄存器 :

  1. 4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)
  2. 2 个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)、
  3. 1 个 32 位置位/复位寄存器 (GPIOx_BSRR)、
  4. 1 个 32 位锁定寄存器 (GPIOx_LCKR) 和
  5. 2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。

每个GPIO有16个引脚,每个引脚都可以单独配置。

GPIO功能描述

根据应用需求,可通过软件将通用 I/O (GPIO) 端口对应的各个引脚位分别配置为多种模式:

● 输入浮空-上电默认模式

● 输入上拉

● 输入下拉

● 模拟功能

● 具有上拉或下拉功能的开漏输出

● 具有上拉或下拉功能的推挽输出

● 具有上拉或下拉功能的复用功能推挽

● 具有上拉或下拉功能的复用功能开漏




1.3 GPIO 输出配置

对 I/O 端口进行编程作为输出时:

●输出缓冲器被打开: 开漏模式和推挽模式

● 施密特触发器输入被打开

● 根据 GPIOx_PUPDR 寄存器中的值决定是否打开弱上拉电阻和下拉电阻

● 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

● 对输入数据寄存器的读访问可获取 I/O 状态

● 对输出数据寄存器的读访问可获取最后的写入值

推挽输出:

可以直接输出高电平和低电平。

开漏输出:

默认只可以输出低电平

输出高电平需要加上拉电阻拉高。



GPIO 复用功能配置

● 可将输出缓冲器配置为开漏或推挽

● 输出缓冲器由来自外设的信号驱 动(发送器使能和数据)

● 施密特触发器输入被打开

● 根据 GPIOx_PUPDR 寄存器中的值决定是否打开弱上拉电阻和下拉电阻

● 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

● 对输入数据寄存器的读访问可获取 I/O 状态
在这里插入图片描述
GPIO模拟配置

● 输出缓冲器被禁止。

● 施密特触发器输入停用,I/O 引脚的每个模拟输入的功耗变为零。施密特触发器的输出被 强制处理为恒定值 (0)。

● 弱上拉和下拉电阻被关闭。

● 对输入数据寄存器的读访问值为“0”。

**注意:在模拟配置中,**I/O 引脚不能为 5 V 容忍。

在这里插入图片描述

GPIO典型应用步骤

使用库函数实现GPIO的应用,一般需要以下几步:

(1)使能GPIO的时钟(非常重要),涉及以下文件:

头文件:stm32f4xx_rcc.h

源文件:stm32f4xx_rcc.c

使用的主要函数:

**RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)**

**RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState)**

**RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)**

**RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)**

**例如:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE)**

(2)设置对应于片上外设使用的GPIO工作模式。

确定GPIO输入模式

如果是输出要确定是推挽还是开漏输出

配置输出速度模式

输出时,内部上拉/下拉电阻要不要开

(3)如果使用复用功能,需要单独设置每一个GPIO引脚的复用功能。

(4)在应用程序中读取引脚状态、控制引脚输出状态或使用复用功能完成特定功能

1.4 GPIO 常用函数

1、读取电平函数:

1)、uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef\* GPIOx, uint16_t GPIO_Pin);

参数1:GPIO操作对象,

参数2:操作引脚。

作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。该函数每次只能获取一个引脚状态。

例如:

GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平

2)、 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。该函数获取GPIO的IO口状态

例如:

GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有IO口输入电平

2、读取输出电平数

1)、uint8_t GPIO_ReadOutputDataBit (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。

例如:

GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输出电平

2)、uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

作用:读取某组GPIO的输出电平。实际操作的是GPIO_ODR寄存器。

例如:

GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平

3、设置输出电平

函数

1)、void GPIO_SetBits(GPIO_TypeDef\* GPIOx, uint16_t GPIO_Pin);

*作用:设置某个IO口输出为高电平(1)。*实际操作BSRRL寄存器。该函数可同时设置多个引脚。

例如:

GPIO_SetBits(GPIOA, GPIO_Pin_5);//设置GPIOA.5输出高电平

2)、void GPIO_ResetBits(GPIO_TypeDef\* GPIOx, uint16_t GPIO_Pin);

*作用:设置某个IO口输出为低电平(0)。*实际操作的BSRRH寄存器。该函数可同时设置多个引脚。

3)、void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

作用:设置某个GPIO为特定电平,实际操作的是置位/复位寄存器。

例如:设置GPIOA 2号引脚为高电平。

GPIO_ WriteBit(GPIOA,GPIO_Pin_2,Bit_SET);

GPIOA 5号引脚为高电平。

GPIO_ WriteBit(GPIOA,GPIO_Pin_5,Bit_RESET);

该函数只能设置一个引脚状态。

4)、void GPIO_Write(GPIO_TypeDef\* GPIOx, uint16_t PortVal);

作用:设置某个GPIO所有引脚为特定电平,实际操作的输出数据寄存器。

参数2:16位的无符号数据,此数据每一位队形控制一个引脚的输出状态,0代表低电平,1代表高电平。

例如:设置GPIOA所有引脚为高电平

GPIO_Write(GPIOA,0xffff

这两个函数不常用,也是用来设置IO口输出电平。

4、反转引脚状态

1void GPIO \_ToggleBits(GPIO_TypeDef\* GPIOx, uint16_t GPIO_Pin);

作用:将GPIO引脚状态反转。使用位异或操作输出数据寄存器。

例如:设置GPIOA的3、5号引脚状态反转。

GPIO \_ToggleBits(GPIOA,GPIO_Pin_3\| GPIO_Pin_5)

5、复用功能设置函数

void GPIO_PinAFConfig(GPIO_TypeDef\* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);

作用:将GPIO的某个引脚设置为特定的复用功能。操作的是复用功能低位寄存器或复用功能高位寄存器。

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

​5- GPIO操作 的相关文章

  • 宽带共享上网常见经典的问题

    1 共享宽带可以做什么 有什么好处 现在很多地方都开通了宽带网络 和过去的普通MODEM拨号上网相比 网络速度大大提高 而浏览网页 上网聊天这些一般的应用需要的网络带宽并不高 如果只是让一台计算机使用一条宽带连接 绝大部分网络带宽都被白白浪
  • HUAWEI CLOUD Stack 私有云解决方案(HCS)

    HUAWEI CLOUD Stack 私有云解决 HCS 注明 本文介绍的版本为HUAWEI CLOUD Stack 6 5 也叫华为云Stack或HCS 在华为6 5版本以前的名字是FusionCloud 6 3 最近更新的8 0版本不会
  • c语言软件放c盘还是d盘,一般软件应当安装到C盘还是D盘?

    软件安装始终会试占用空间越来越大 1 大多数软件运行时都会产生临时文件 日志文件等 长期使用后会使磁盘空间变小 2 另外机器上将会安装多少软件 其实你自己也不清楚 在使用一段时间后 你会时不时的安装些新软件 这样动态的增加软件数量 也会逐渐
  • 将dataframe里的两列元素一个作为key一个作为value转换成字典

    前面转发别人的内容 df 为dataframe对象 包含 word count 两列数据 方法一 result dic df groupby word count apply list to dict 对于同一个key对应多个value 则
  • Python的多进程实现

    原文链接 https www liaoxuefeng com wiki 1016959663602400 1017628290184064 要让Python程序实现多进程 multiprocessing 我们先了解操作系统的相关知识 Uni
  • medium_socnet靶机打靶过程和思考

    0x0内容简介 这是一个中等难度的靶机 比较的综合 因为其内部还有几个docker虚拟机 从而可以对内网部分有初步的涉及 比如内网信息收集 内网穿透 简单的横向移动等等 建议使用VirtualBox打开靶机 如果使用vm打开 会有无法预料的

随机推荐

  • 从C#中的ArrayList和List的区别说起

    引擎 Unity5 5 1 IDE VS2015 最近公司招人 自己整理了一套试题 题里设了几个坑 因为是招初级程序 关于ArrayList和List的区别的这道题 基本都翻了 原因很简单 这道题在所有网上能找到的Unity程序面试题中都有
  • ValueError: ('No requirements found', '# Horizon Core Requirements')的调试解决方法

    我在一台不能访问外网的CentOS6上从源码安装Openstack horizon grizzly版本的时候 碰到了如下的错误 root xxx horizon python setup py install running install
  • JS局部坐标和全局坐标的转换

    properties player cc Node background cc Node 将点击的点touchPoint 转化为player的父对象的相对节点 可以用来比较player坐标和点击坐标的相对位置 世界坐标 转化为 相对坐标 t
  • 小程序的数据接口

    微信小程序的数据请求 常用的数据请求方式 JS原生实现 第一种 let xhr new XMLHttpRequest xhr open xhr send 第二种 fetch 支持promise fetch 接口地址 then functio
  • 进制转化(c 语言实现)

    部分进制转化 c 语言实现 文章目录 二进制转化为其他进制数 十进制数转化为二进制数 一 二进制转化为其他进制数 因为我们要将二进制数转化为其他进制数 所以第一步就是要确保输入的值为二进制数 主要 是判断每一位数 要不是 1 要不是 0就可
  • Python数据分析与挖掘——交叉验证法

    交叉验证 Cross Validation 简写为CV 主要用于建模应用中 例如PCR 主成分回归 PLS 偏最小二乘 回归建模中 交叉验证是在机器学习建立模型和验证模型参数时常用的办法 交叉验证 顾名思义 就是重复的使用数据 把得到的样本
  • Java BeanUtils对象复制工具类及方法

    1 BeanUtils copyProperties Object source Object target 用法 讲source的属性值复制到target 属性为null时也会进行复制 需求 排除null值进行复制 public clas
  • Linux基本命令(三) 权限管理命令

    权限管理命令 chown 命令名称 chown 命令英文原意 change file ownership 命令所在路径 bin chown 执行权限 所有用户 语法 chown 用户 文件或目录 功能描述 改变文件或目录的所有者 范例 ch
  • FAPI专题-3:5G nFAPI接口 - 中文规范-3- 协议栈、消息格式

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https mp csdn net mp blog creation editor 117590399 目录 第2章 nFAPI接口详解 2
  • 我的创作纪念日——看看我是如何一步一步发展的?

    关于我的创作纪念日 一 机缘 二 收获 三 日常 四 成就 五 憧憬 六 结尾 博主 拉莫帅 博文 127篇 原创 125篇 转载 2篇 总阅读量 337155 粉丝量 91 感谢大家一直以来对我的支持 以及关注 本人是一名从事移动开发人员
  • 一文看尽 27 篇 CVPR2021 2D 目标检测论文

    6月25日 CVPR 2021 大会结束 共接收了 7039 篇有效投稿 最终有 1366 篇被接收为 poster 295 篇被接收为 oral 其中录用率大致为 23 6 略高于去年的 22 1 CVPR 2021 全部接收论文列表 h
  • 一道关于C++虚函数和多继承的面试题

    问题 假设有两个基类A和B 它们有一个相同签名的虚函数void foo 但是拥有不同的实现 现在要求创建一个新类C 它同时继承A和B 也有相同的签名的函数void foo 并能分别对A和B中的foo函数进行重写 overwrite 已知条件
  • CTF Linux 命令执行常规bypass

    截断符 常见的RCE的形式是给一个ping的命令执行 只需要输入ip 然后返回ping ip的输出信息 常见的用来截断的符号 windows或linux下 command1 command2 先执行command1后执行command2 c
  • MySQL 卸载重装出现的问题:MySQL Server Instance Configuration Wizard 未响应

    问题 安装了MySQL用了一段时间后卸载了 再重装的时候 总会显示 MySQL Server Instance Configuration Wizard未响应 解决办法 Win7系统中 以管理员的权限登录系统 将C盘的ProgramData
  • 2020-08-28生活记录

    今天在无意之间发现一个大神上传的技术类的PDF书籍和学习资料 满满的干货现在放出链接地址 雨夜的博客
  • 买服务器操作系统怎么选择,买服务器操作系统怎么选择

    买服务器操作系统怎么选择 内容精选 换一换 提供预装操作系统 应用环境和各类软件的优质第三方镜像 无需配置 可一键部署 满足建站 应用开发 可视化管理等个性化需求 市场镜像经过服务商和华为云的严格测试 可保证镜像内容的安全性 市场镜像主要有
  • 【python】操作Excel和word模块

    一 Excel操作操作模块 xls和 xlsx使用的两种不同的模块 xls xlrd 常用函数 python操作excel主要用到xlrd和xlwt这两个库 即xlrd是读excel xlwt是写excel的库 data xlrd open
  • 混合双向无线传输装置助力智能工厂建设

    智能制造的出现 将为各制造企业解决现有问题 实现创新驱动转型提供了一条全新的发展思路和技术途径 智能工厂建设作为智能制造发展的载体 是当前制造业的发展愿景 也是正在积极努力的重点方向 但对于如何建设与企业战略规划一致且符合企业自身实际应用需
  • ES数据库学

    一 es数据库简介 1 简介 es数据库的英文全称为ElsticSearch 是位于Elastic Stack核心的分布式搜索和分析引擎 是一个由Apache开源的高扩展 全文检索和分析引擎 NoSQL数据库功能 的系统 它可以准实地快速存
  • ​5- GPIO操作

    本笔记是根据STM32F429单片机的 其他STM32单片机与此类似 基本上都一样的 会一款 其他的基本上没啥问题 本人也是刚学 有不足之处请下方评论 目录 笔记1 GPIO操作 1 1 读 修改 写操作 常用操作 位与 可实现目标字段的清