stm32学习(1)——GPIO

  1. 引脚说明
  2. 基本结构
  3. 工作方式
  4. 相关寄存器

**

一、引脚说明(以正点原子精英版所用stm32f103zet6为例)

**
在这里插入图片描述
STM32F103ZET6:

  1. 一共有7组IO口——GPIOA~GPIOG
  2. 每组IO口有16个IO——PA0~PA15…PG0~PG15
  3. 一共有7X16=112个IO口

这是一个ZET6芯片IO口的数量位置分布,在不同的芯片IO口数量也不同

**

二、基本结构

**
在这里插入图片描述
先把这张图放在这里

**

三、工作方式

**
输入模式4种:

  1. 输入浮空
  2. 输入上拉
  3. 输入下拉
  4. 模拟输入

输出模式4种:

  1. 开漏输出
  2. 开漏复用功能
  3. 推挽式输出
  4. 推挽式复用功能

输入浮空模式:
在这里插入图片描述
IO端口的状态传到施密特触发器,经过施密特触发器处理进入输入数据寄存器,由CPU读取输入数据寄存器得到这个引脚的状态。
需要注意的是:在输入浮空下引脚的状态仅有外部所加的电平有关,具有不确定性。

输入上拉模式:
在这里插入图片描述
相当于在浮空输入的基础上加了一个上拉电阻,因为在浮空输入模式且未加外部电压的情况下下IO口的电平状态是不确定的,加上拉电阻,就把不确定的电平钳制在了高电平,所以在上拉输入模式下,默认IO口的状态为高电平。

输入下拉模式:
在这里插入图片描述
与上拉模式唯一的不同是输入下拉模式中加的是下拉电阻,将不确定的状态钳制在了低电平。
输入上拉与输入下拉模式一个最常见的应用就是在读取按键状态上。如果按键是低电平有效,那么需要接上拉电阻,默认状态就是高电平,只有在按键被按下的时候才是低电平的有效状态,松开立刻回到高电平状态。

模拟输入模式:
在这里插入图片描述
将外部读取到的模拟信号传入到外设模块AD/DA上完成模数转换。

开漏输出模式:
在这里插入图片描述
当CPU写入一个电平值时,经过前两个寄存器到达输出控制电路,写入高电平1时,M-MOS管截止,IO口状态不由写入的值决定,仅有外部上下拉电阻决定,写入低电平0时,N-MOS管导通,整条线路被拉低到VSS,IO口输出低电平。
总的来说,在开漏输出下,写高无效,写低有效。

开漏复用输出模式:
在这里插入图片描述
与开漏输出唯一的区别在于控制信号的来源不同,开漏输出的来源是内部CPU,而开漏复用的来源来自外设模块。

推挽输出模式
在这里插入图片描述
与开漏输出类似,当写入高电平1时,P-MOS管导通,N-MOS管截止,整条线路就处在VDD高电平,IO口输出高电平。当写入低电平0时,P-MOS管截止,N-MOS管导通,整条线路被拉低到VSS,IO口输出低电平。
推挽输出输出强高低电平。

推挽复用输出:
在这里插入图片描述
和开漏与开漏复用的对比类似,也是来源与推挽输出不同。

**

四、相关寄存器

**
每组IO口由7个寄存器控制,它们是:
两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH)
两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR)
一个32位置位/ 复位寄存器(GPIOx_BSRR)
一个16位复位寄存器(GPIOx_BRR)
一个32位锁定寄存器(GPIOx_LCKR)

GPIOx_CRL :端口配置低寄存器
在这里插入图片描述
GPIOx_CRH:端口配置高寄存器
在这里插入图片描述
GPIOx_IDR:端口输入寄存器
在这里插入图片描述
GPIOx_ODR:端口输出寄存器
在这里插入图片描述
GPIOx_BSRR:端口位设置/清除寄存器
在这里插入图片描述
GPIOx_BRR :端口位清除寄存器
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lqj11/article/details/106227536