当前位置: 首页 > article >正文

【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.kler.cn/a/500501.html

相关文章:

  • 微信小程序——创建滑动颜色条
  • CTFshow—文件包含
  • 3298. 统计重新排列后包含另一个字符串的子字符串数目 II
  • Autoencoder(李宏毅)机器学习 2023 Spring HW8 (Boss Baseline)
  • CSS响应式
  • spring boot 集成 knife4j
  • 2024年有哪些人工智能书籍推荐?
  • Facebook 隐私变革之路:回顾与展望
  • 04:同步与互斥
  • 【教程】Unity 本地化多语种 | Localization 工具组
  • 【PDF转Word】 PDF在线转word文档 好用!优质网站资源推荐
  • Java 实现 Elasticsearch 查询当前索引全部数据
  • OOM排查思路
  • 蓝桥杯历届真题 #食堂(C++,Java)
  • 探讨人工智能机器人学之路径规划与导航:A*算法、Dijkstra算法等路径规划方法
  • 《零基础Go语言算法实战》【题目 2-12】Go 语言接口的工作原理
  • 冒泡排序基础与实现
  • 微服务的配置共享
  • C# OpenCV机器视觉:波形相似度
  • 深入解析 Spring AI 系列:剖析OpenAI接口接入组件
  • 3 前端: Web开发相关概念 、HTML语法、CSS语法
  • 解锁人工智能的核心:人工神经网络全面解析
  • 计算机网络——网络层-IP地址
  • 初学stm32 --- ADC模拟/数字转换器工作原理