STMF103学习记录—GPIO

本文详细介绍了GPIO的8种工作方式,包括4种输入模式和4种输出模式,并解释了每种模式的特点。此外,还提供了GPIO端口寄存器的说明及初始化步骤,以及标准库函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GPIO工作方式(8种)

4种输入模式

  • 输入浮空
  • 输入上拉
  • 输入下拉
  • 模拟输入

4种输出模式

  • 开漏输出(由CPU写入输出数据)
  • 开漏复用功能(由外设写入输出数据)
  • 推挽式输出(由CPU写入输出数据)
  • 推挽式复用功能(由外设写入输出数据)

ps:开漏输出就是不输出电压低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力。无论哪种方式输出数据同时返回输入数据寄存器CPU可读到。

每组GPIO端口的寄存器

  • 两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)
  • 两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)
  • 一个32位置位/复位寄存器(GPIOx_BSRR)
  • 一个16位复位寄存器(GPIOx_BRR)
  • 一个32位锁定寄存器(GPIOx_LCKR)

初始化步骤

  1. 使能IO口时钟
  2. 初始化IO口模式
  3. 操作IO口

寄存器调用顺序

  1. RCC
  2. CRL(H)
  3. 输入IDR(配置上或下拉时通过同位ODR配置0位下拉,1为上拉)
  4. 输出ODR(可通过BSRR和BRR配置)

标准库函数使用

初始化GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

GPIOx为使用的端口组(如GPIOA)

GPIO_InitStruct有3个参数GPIO_Pin, GPIO_Speed,GPIO_Mode

GPIO_Pin为组内端口号(如GPIO_Pin_0)

GPIO_Speed为传输速度(GPIO_Speed_10MHz,GPIO_Speed_2MHz, GPIO_Speed_50MHz)

GPIO_Mode为端口模式:

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(推挽式复用功能)

读位数据GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

GPIOx为使用的端口组(如GPIOA)

GPIO_Pin为组内端口号(如GPIO_Pin_0)

读组数据GPIO_ReadInputData(GPIO_TypeDef* GPIOx)

GPIOx为使用的端口组(如GPIOA)

输出位置高GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

操作BSRR

GPIOx为使用的端口组(如GPIOA)

GPIO_Pin为组内端口号(如GPIO_Pin_0)

输出位置低GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

操作BRR

GPIOx为使用的端口组(如GPIOA)

GPIO_Pin为组内端口号(如GPIO_Pin_0)

时钟使能RCC_APB2(1)PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState                NewState)

RCC_APB2Periph使能的端口组(如RCC_APB2Periph_GPIOA)

NewState为使能状态(DISABLE不使能或ENABLE使能) 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值