【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(假)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

动态规划练习五(子序列问题)

一、解题心得 首先子序列是不连续的&#xff0c;所以一定不会在 i - 1 位置去推 i 位置的 dp 值了&#xff0c;所以一般子序列问题是 O(n^2) 复杂度。但是可以通过哈希表等方式降成 O(n)。 以我带来的例题其实子序列问题可以分成两种&#xff1a; 1、以 i 位置为结尾&#x…

图像处理|膨胀操作

在图像处理领域&#xff0c;形态学操作是一种基于图像形状的操作&#xff0c;用于分析和处理图像中对象的几何结构。**膨胀操作&#xff08;Dilation&#xff09;**是形态学操作的一种&#xff0c;它能够扩展图像中白色区域&#xff08;前景&#xff09;或减少黑色区域&#xf…

汉图科技XP356DNL高速激光打印一体机综合性能测评

汉图科技XP356DNL高速激光打印一体机效率方面表现出色&#xff0c;支持A4纸型的高速打印&#xff0c;单面打印速度高达35页/分钟&#xff0c;自动双面打印速度可达32面/分钟&#xff0c;这样的速度在日常办公中能够极大地提高打印效率&#xff0c;减少等待时间&#xff0c;满足…

Unity + Firebase + GoogleSignIn 导入问题

我目前使用 Unity版本&#xff1a;2021.3.33f1 JDK版本为&#xff1a;1.8 Gradle 版本为&#xff1a;6.1.1 Firebase 版本: 9.6.0 Google Sign In 版本为&#xff1a; 1.0.1 问题1 &#xff1a;手机点击登录报错 apk转化成zip&#xff0c;解压&#xff0c;看到/lib/armeabi-v…

如何搭建 Vue.js 开源项目的 CI/CD 流水线

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

Elasticsarch:使用全文搜索在 ES|QL 中进行过滤 - 8.17

8.17 在 ES|QL 中引入了 match 和 qstr 函数&#xff0c;可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数&#xff0c;可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法&#xf…

ISP流程--去马赛克详解

前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知&#xff0c;彩色图像由一个个像元组成&#xff0c;每个像元又由红、绿、蓝&#xff08;RGB&#xff09;三通道构成。而相机传感器只能感知光的强度&#xff0c;无法直接感知光谱信息&#xff0c;即只有亮暗而没有颜色…

晨辉面试抽签和评分管理系统之七:面试成绩核算的三种方式

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

FastApi Swagger 序列化问题

问题 错误现象&#xff1a; fastapi的 swagger 界面无法正常打开控制台报错&#xff1a;raise PydanticInvalidForJsonSchema(fCannot generate a JsonSchema for {error_info}) 详细报错&#xff1a; File "d:\Envs\miniconda3\envs\xdagent\lib\site-packages\pydan…

Browser-Use Web UI:浏览器自动化与AI的完美结合

Browser-Use Web UI:浏览器自动化与AI的完美结合 前言简介一、克隆项目二、安装与环境配置1. Python版本要求2. 安装依赖3. 安装 Playwright4. 配置环境变量(非必要步骤)三、启动 WebUI四、配置1. Agent设置2. 大模型设置3. 浏览器相关设置4. 运行 Agent结语前言 Web UI是在…

秒懂虚拟化(三):桌面拟化、用户体验虚拟化、应用程序虚拟化全解析,通俗解读版

秒懂虚拟化&#xff08;二&#xff09;&#xff1a;服务器虚拟化、操作系统虚拟化、服务虚拟化全解析&#xff0c;通俗解读版-CSDN博客这篇文章学习了服务器虚拟化、操作系统虚拟化、服务器虚拟化&#xff0c;本节将继续学习桌面虚拟化、用户体验虚拟化、应用程序虚拟化。 1、…

UVM RAL Register Abstraction Layer:寄存器抽象层

topic 没有RAL的TB 有RAL的TB RAL介绍 summary

扬帆数据结构算法之舟,启航C++探索征途——LeetCode深度磨砺:顺序表技术精进实践

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 顺序表练习1.移除数组中指定的元素方法1&#xff08;顺序表&#xff09;方法2&#xff08;双指针&#xff09; 2.删除有序数组中的重复项…

【Linux网络编程】网络层 | IP协议 | 网段划分 | 私有IP和公有IP | NAT技术

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系…

Web基础之什么是HTTP协议

Q&#xff1a;什么是HTTP协议&#xff1f; 概念&#xff1a;Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点&#xff1a; 1&#xff0e;基于TCP协议&#xff1a;面向连接&#xff0c;安全 2&#xff0e;基…

小米路由器IPv6 功能使用指南

本文不限于多层路由使用IPv6 的情况&#xff0c;提供解决IPv6 无法获取的更硬核的方法&#xff0c;需要有ssh 工具。&#xff08;无安卓设备&#xff0c;测试环境win、mac、ios&#xff09; 首先明确一点&#xff0c;就是如果想让你的设备得到GUA 地址&#xff0c;即访问 6.i…

element plus 使用 upload 组件达到上传数量限制时隐藏上传按钮

最近在重构项目&#xff0c;使用了 element plus UI框架&#xff0c;有个功能是实现图片上传&#xff0c;且限制只能上传一张图片&#xff0c;结果&#xff0c;发现&#xff0c;可以限制只上传一张图片&#xff0c;但是上传按钮还在&#xff0c;如图&#xff1a; 解决办法&…

汽车基础软件AutoSAR自学攻略(三)-AutoSAR CP分层架构(2)

汽车基础软件AutoSAR自学攻略(三)-AutoSAR CP分层架构(2) 下面我们继续来介绍AutoSAR CP分层架构&#xff0c;下面的文字和图来自AutoSAR官网目前最新的标准R24-11的分层架构手册。该手册详细讲解了AutoSAR分层架构的设计&#xff0c;下面让我们来一起学习一下。 Introductio…

MBTiles 爬取,读取,数据转换,发布

MBTiles &#xff1a;https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md 1.MBTiles是什么 MBTiles是一个在SQLite 数据库存储瓦片地图数据的标准&#xff0c;该标准的目的是即时传输和使用数据。 作为一个容器格式&#xff0c;MBTiles可以存储任何瓦片数据,…

机器学习笔记合集

大家好&#xff0c;这里是好评笔记&#xff0c;公主 号&#xff1a;Goodnote。本笔记的任务是解读机器学习实践/面试过程中可能会用到的知识点&#xff0c;内容通俗易懂&#xff0c;入门、实习和校招轻松搞定。 笔记介绍 本笔记的任务是解读机器学习实践/面试过程中可能会用到…