【STM32-学习笔记-1-】GPIO

文章目录

  • GPIO
    • Ⅰ、GPIO函数
    • Ⅱ、GPIO_InitTypeDef结构体参数
      • ①、GPIO_Mode
      • ②、GPIO_Pin
      • ③、GPIO_Speed

GPIO

Ⅰ、GPIO函数

// 将指定的GPIO端口寄存器重置为默认值
void GPIO_DeInit(GPIO_TypeDef* GPIOx);// 将GPIO的备用功能寄存器重置为默认值
void GPIO_AFIODeInit(void);// 初始化GPIO端口,设置引脚的模式、速度、上拉/下拉等属性
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);// 初始化GPIO初始化结构体的默认值
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);// 读取指定GPIO端口的指定引脚的输入数据位
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);// 读取指定GPIO端口的所有引脚的输入数据
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);// 读取指定GPIO端口的指定引脚的输出数据位
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);// 读取指定GPIO端口的所有引脚的输出数据
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);// 将指定GPIO端口的指定引脚置位(设置为高电平)
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
// 将指定GPIO端口的指定引脚复位(设置为低电平)
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);// 为指定GPIO端口的指定引脚设置新的值(单个引脚)
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);// 为指定GPIO端口的所有引脚设置新的值(整个端口)
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);// 锁定指定GPIO端口的指定引脚配置,防止后续的更改
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);// 配置GPIO端口的事件输出功能
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);// 控制GPIO端口的事件输出使能或禁用
void GPIO_EventOutputCmd(FunctionalState NewState);// 配置GPIO端口的引脚重映射
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);// 配置外部中断(EXTI)线与GPIO端口引脚的关联
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);// 配置以太网(ETH)媒体接口与GPIO端口引脚的关联
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);

Ⅱ、GPIO_InitTypeDef结构体参数

①、GPIO_Mode

指定所选引脚的工作模式

  • 该参数可以是@ref GPIOMode_TypeDef

    • 枚举类型定义

      typedef enum
      {GPIO_Mode_AIN = 0x0,          /*!< 模拟输入模式 */GPIO_Mode_IN_FLOATING = 0x04, /*!< 浮空输入模式 */GPIO_Mode_IPD = 0x28,         /*!< 下拉输入模式 */GPIO_Mode_IPU = 0x48,         /*!< 上拉输入模式 */GPIO_Mode_Out_OD = 0x14,      /*!< 开漏输出模式 */GPIO_Mode_Out_PP = 0x10,      /*!< 推挽输出模式 */GPIO_Mode_AF_OD = 0x1C,       /*!< 复用开漏输出模式 */GPIO_Mode_AF_PP = 0x18        /*!< 复用推挽输出模式 */
      } GPIOMode_TypeDef;
      
      • GPIO_Mode_AIN模拟输入模式。引脚配置为模拟输入,用于读取模拟信号
      • GPIO_Mode_IN_FLOATING浮空输入模式。引脚配置为浮空输入,不连接内部上拉或下拉电阻
      • GPIO_Mode_IPD下拉输入模式。引脚配置为下拉输入,内部连接下拉电阻
      • GPIO_Mode_IPU上拉输入模式。引脚配置为上拉输入,内部连接上拉电阻。
      • GPIO_Mode_Out_OD开漏输出模式。引脚配置为开漏输出,可以驱动低电平,高电平需要外部上拉电阻
      • GPIO_Mode_Out_PP推挽输出模式。引脚配置为推挽输出,可以驱动高电平和低电平
      • GPIO_Mode_AF_OD复用开漏输出模式。引脚配置为复用功能的开漏输出
      • GPIO_Mode_AF_PP复用推挽输出模式。引脚配置为复用功能的推挽输出

      宏函数

      #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))
      
      • 描述:检查给定的模式是否为有效的GPIO模式
      • 参数MODE,代表GPIO模式
      • 功能:检查MODE是否等于预定义的GPIO模式中的任一个
      • 返回值:如果MODE有效,返回1(真),否则返回0(假)

②、GPIO_Pin

指定要配置的GPIO引脚

  • 该参数可以是@ref GPIO_pins_define的任意值:

    • 宏定义解释:

      这些宏定义用于选择特定的GPIO引脚。每个宏定义一个特定的引脚,值为该引脚对应的位掩码

      • GPIO_Pin_0GPIO_Pin_15
        • 描述:分别表示选择GPIO的第0引脚到第15引脚。每个宏定义的值是该引脚对应的位掩码,例如 GPIO_Pin_0 的值为 0x0001,表示第0位被设置为1,其他位为0
      • GPIO_Pin_All
        • 描述:表示选择所有GPIO引脚。值为 0xFFFF,表示所有16位都被设置为1

      宏函数:

      1. IS_GPIO_PIN(PIN)
        • 描述:检查给定的引脚选择是否有效
        • 参数PIN,代表GPIO引脚选择
        • 功能:检查PIN是否为有效的引脚选择。具体来说,检查PIN是否为0到0xFFFF之间的值,且不为0
        • 返回值:如果PIN有效,返回1(真),否则返回0(假)
      2. IS_GET_GPIO_PIN(PIN)
        • 描述:检查给定的引脚选择是否为单个引脚
        • 参数PIN,代表GPIO引脚选择
        • 功能:检查PIN是否等于预定义的单个引脚选择宏中的任一个
        • 返回值:如果PIN为单个引脚,返回1(真),否则返回0(假)

      表格:

      宏定义描述
      GPIO_Pin_0~GPIO_Pin_150x0001~0x8000选择第0~15引脚
      GPIO_Pin_All0xFFFF选择所有引脚
      宏函数描述
      IS_GPIO_PIN(PIN)检查PIN是否为有效的GPIO引脚选择
      IS_GET_GPIO_PIN(PIN)检查PIN是否为单个GPIO引脚选择

③、GPIO_Speed

指定所选引脚的速度

  • 该参数可以是@ref GPIOSpeed_TypeDef

    • 枚举类型定义

      typedef enum
      { GPIO_Speed_10MHz = 1, /*!< 输出最大频率为10MHz */GPIO_Speed_2MHz,      /*!< 输出最大频率为2MHz */GPIO_Speed_50MHz      /*!< 输出最大频率为50MHz */
      } GPIOSpeed_TypeDef;
      
      • GPIO_Speed_10MHz:输出最大频率为10MHz。适用于需要较高速度但不是最高速度的场景
      • GPIO_Speed_2MHz:输出最大频率为2MHz。适用于速度要求较低的场景,可以减少功耗
      • GPIO_Speed_50MHz:输出最大频率为50MHz。适用于需要最高速度的场景,确保数据传输的高效性

      宏函数

      #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \((SPEED) == GPIO_Speed_50MHz))
      
      • 描述:检查给定的频率设置是否有效
      • 参数SPEED,代表GPIO的输出频率设置
      • 功能:检查SPEED是否等于预定义的频率设置中的任一个
      • 返回值:如果SPEED有效,返回1(真),否则返回0(假)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode热题100-合并两个有序链表【JavaScript讲解】

题目&#xff1a; 题解&#xff1a; 我们目前已经知道两条链表都是有序链表&#xff0c;我们就可以通过迭代的方法实现上述问题。当list1和list2都不是空链表时&#xff0c;判断list1和list2哪个头节点的值更小&#xff0c;将较小的值添加到结果里&#xff0c;被添加到结果里的…

关于2025年信息技术行业的几点思考

2024年对每一位信息技术从业者而言&#xff0c;无疑是一个充满挑战的年份&#xff0c;尤其在公司层面&#xff0c;需求的减少尤为显著。外包企业几乎面临倒闭的边缘。面对经济周期的调整&#xff0c;无论是公司还是个人&#xff0c;都难以完全避免受到其影响。以下是我对企业和…

Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】

挑战&#xff1a;捕获大型水生哺乳动物&#xff08;如鲸鱼&#xff09;的数据&#xff0c;搭建全彩3D模型&#xff0c;用于水生野生动物的法医鉴定、研究和保护工作。 解决方案&#xff1a;Artec Eva、Artec Space Spider、Artec Leo、Artec Ray、Artec Studio、CT scans 效果&…

HBuilderX打包ios保姆式教程

1、登录苹果开发者后台并登录已认证开发者账号ID Sign In - Apple 2、创建标识符&#xff08;App ID&#xff09;、证书&#xff0c;描述文件 3、首先创建标识符&#xff0c;用于新建App应用 3-1、App的话直接选择第一个App IDs&#xff0c;点击右上角继续 3-2、选择App&#x…

Android DataBinding 结合 ViewModel的使用

Android DataBinding 结合 ViewModel的使用 一、build.gradle引入对应的依赖 在build.gradle&#xff08;app模块&#xff09;里引入依赖&#xff0c;然后Sync Now一下&#xff1a; android {​viewBinding {enabled true}dataBinding {enabled true}} 完整的build.gradle代…

动植物基因表达调控

1&#xff0c; on and off状态 以及表达的量 2&#xff0c; 基因调控的生物学影响&#xff1f; 超过400多种细胞类型&#xff0c;数目上37万亿 不是所有的基因都表达 为什么多核真核细胞需要基因调控&#xff1f; 单个细胞往多个细胞逐渐进化的过程&#xff0c;形成复杂的…

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)

2024年度漏洞态势分析报告&#xff0c;需要访问自取即可!(PDF版本),大家有什么好的也可以发一下看看

acwing-3194 最大的矩形

acwing-3194 最大的矩形 这个题程序设计课上有讲过&#xff0c; 平民算法&#xff0c;时间复杂度在 O ( n 2 ) O(n^2) O(n2) // // Created by HUAWEI on 2024/10/28. // #include<iostream>using namespace std;const int Max_size 1e4 20;int N; int h[Max_size];…

【数据结构】树的定义

在计算机科学中&#xff0c;树&#xff08;Tree&#xff09;是一种重要的基础数据结构&#xff0c;广泛应用于许多领域&#xff0c;如文件系统的目录结构、数据库的索引、编译器的语法树、人工智能的决策树等。理解树的基本概念和术语&#xff0c;对于学习计算机科学及其相关技…

三个shell脚本

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 测试结果&#xff1a; 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 3、编写个shell脚本将/usr/local 日录…

读书笔记--共享服务中心建设原则

最近阅读了《企业IT架构转型之道》记录和思考如下&#xff0c;供大家学习参考。随着企业的数字化转型推进&#xff0c;很多企业开始从原来的SPA模式应用转变为平台技术应用&#xff0c;比如阿里巴巴的共享服务中心&#xff0c;传统企业的统一认证的share服务等等。可以说&#…

【Ubuntu与Linux操作系统:五、文件与目录管理】

第5章 磁盘存储管理 5.1 Linux磁盘存储概述 磁盘存储是Linux系统存储数据的重要组件&#xff0c;它通过分区和文件系统组织和管理数据。Linux支持多种文件系统&#xff0c;如ext4、xfs和btrfs&#xff0c;并以块的形式管理存储设备。 1. 分区与文件系统&#xff1a; 分区&am…

DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议

文章目录 Pre概述业务流程需求分析的困境统一语言建模事件风暴会议什么是事件风暴&#xff08;Event Storming&#xff09;事件风暴会议 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对…

【C语言系列】函数递归

函数递归 一、递归是什么&#xff1f;1.1尾递归 二、递归的限制条件三、递归举例3.1举例一&#xff1a;求n的阶乘3.2举例二&#xff1a;顺序打印一个整数的每一位 四、递归与迭代4.1举例三&#xff1a;求第n个斐波那契数 五、拓展学习青蛙跳台问题 一、递归是什么&#xff1f; …

css盒子水平垂直居中

目录 1采用flex弹性布局&#xff1a; 2子绝父相margin&#xff1a;负值&#xff1a; 3.子绝父相margin:auto&#xff1a; 4子绝父相transform&#xff1a; 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接&#xff1a;文字水平垂直居中-CSDN博客 以下为盒子…

攻防世界 Web_php_wrong_nginx_config

​ 打开题目地址&#xff0c;显示为登录页面。尝试用御剑扫描一下&#xff0c;发现了admin页面&#xff0c;点进去显示如下 点开控制台&#xff0c;发现如下 isLogin参数为0。尝试抓包并该islogin参数为1&#xff0c;返回依旧不变。 再扫描&#xff0c;发现robots.txt&#xff…

YOLOv10-1.1部分代码阅读笔记-plotting.py

plotting.py ultralytics\utils\plotting.py 目录 plotting.py 1.所需的库和模块 2.class Colors: 3.class Annotator: 4.def plot_labels(boxes, cls, names(), save_dirPath(""), on_plotNone): 5.def save_one_box(xyxy, im, filePath("im.jpg&qu…

HTML5实现好看的端午节网页源码

HTML5实现好看的端午节网页源码 前言一、设计来源1.1 网站首页界面1.2 登录注册界面1.3 端午节由来界面1.4 端午节习俗界面1.5 端午节文化界面1.6 端午节美食界面1.7 端午节故事界面1.8 端午节民谣界面1.9 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 H…

net-http-transport 引发的句柄数(协程)泄漏问题

Reference 关于 Golang 中 http.Response.Body 未读取导致连接复用问题的一点研究https://manishrjain.com/must-close-golang-http-responsehttps://www.reddit.com/r/golang/comments/13fphyz/til_go_response_body_must_be_closed_even_if_you/?rdt35002https://medium.co…

关于husky8.0 与 4.0的配置

husky的场景使用很多&#xff0c;一般大多场景是在配置git commit 命令拦截hook, 校验 commit-msg 格式规范。以下环境默认&#xff1a;git > 2.27.0, node >14 1、安装huskey8.0.1 npm install --save-dev husky8.0.1 2、初始化配置文件 在package.json scripts 属性…