STM32学习笔记--GPIO工作原理

目录:

    • 一、GPIO工作原理
    • 二、GPIO相关寄存器配置

一、GPIO工作原理

  STM32F103RCT6共有64个引脚,其中有51个引脚可作为IO口使用,即共有51个4组(16*3+3)IO口,使用时可以通过芯片参考手册查询IO口的具体功能。

  STM32的IO内部结构如下图所示:

STM32学习笔记--GPIO工作原理_第1张图片
  STM32的IO口共有8种工作模式,四种输出模式和四种输入模式。

(一)GPIO输入工作模式

  STM32的GPIO口共有四种输入模式:

    浮空输入、上拉输入、下拉输入、模拟输入。

  1. 浮空输入
    STM32学习笔记--GPIO工作原理_第2张图片
      浮空输入模式下,上拉和下拉电阻不导通,施密特触发器打开;输入信号延1->2->3输入到输入数据寄存器,CPU读取输入数据寄存器中的值从而读取到输入的高低电平。

  2. 上拉输入
    STM32学习笔记--GPIO工作原理_第3张图片
      上拉输入模式下,上拉电阻(30~50k)导通,其他与浮空输入一样。
      上拉电阻就是把不确定的信号通过一个电阻钳位在高电平,即将输入电平拉高;此电阻还起到限流的作用。

  3. 下拉输入
    STM32学习笔记--GPIO工作原理_第4张图片
      下拉输入模式下,下拉电阻(30~50k)导通,其他与浮空输入一样。
      下拉电阻就是把不确定的信号通过一个电阻钳位在低电平,即将输入电平拉低;此电阻还起到限流的作用。

拉电阻相关知识可参考:STM32学习笔记之关于上拉电阻、上拉电阻的接法和使用

  1. 模拟输入
    STM32学习笔记--GPIO工作原理_第5张图片
      模拟输入模式下,上下拉电阻和施密特触发器都不导通,输入信号经模拟输入通道输入。

(二)GPIO输出工作模式

  STM32的GPIO口共有四种输出模式:
    开漏输出、开漏复用输出、推挽输出、推挽复用输出。

  1. 开漏输出
    STM32学习笔记--GPIO工作原理_第6张图片
      开漏输出模式下,CPU往位设置/清除寄存器写入数据,映射到输出数据寄存器,然后输入到输出控制电路,若设置输出信号为1,N-MOS管会截止,IO口输出的电平由外部的拉电阻决定,若设置输出信号为0,N-MOS管会导通,将输入信号拉低到VSS,IO口将输出低电平。
      开漏输出模式下,CPU可以通过输入电路读取输出的信号,但是在设置输出为1的情况下,IO口输出由外部拉电阻确定,所以读取到的不一定是想要输出的数据。
  2. 开漏复用输出
    STM32学习笔记--GPIO工作原理_第7张图片
      开漏复用输出模式工作原理基本与开漏输出模式一样,只是信号来源不同,开漏模式下信号来自CPU,需要经过位设置/清楚寄存器和输出数据寄存器;开露服用模式下信号来自片上外设。
  3. 推挽输出
    STM32学习笔记--GPIO工作原理_第8张图片
      推挽输出模式下,输出信号来自于CPU,若设置输出信号为1,N-MOS管截止,P-MOS管导通,将输出信号拉高到VDD,IO口将输出高电平;若设置输出信号为0,P-MOS截止,N-MOS导通,将输出信号拉低到VSS,IO口将输出低电平。
  4. 推挽复用输出
    STM32学习笔记--GPIO工作原理_第9张图片
      推挽复用模式下,输出信号来自于片上外设,其他与推挽输出模式一样。
  5. 推挽输出与开漏输出的区别
     (1)推挽输出可以输出强高强低电平,连接数字器件。
     (2)开漏输出只可以输出强低电平,高电平得靠外部拉电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合做电流型的驱动,其吸收电流的能力相对较强。
  6. 一般模式下,输出信来自于CPU,复用模式下,输出信号来自于片上外设。

GPIO口8中工作模式参考资料:stm32I/O的8种工作模式具体含义是什么?

二、GPIO相关寄存器配置

  STM32的每一组IO口都包括七个寄存器:STM32学习笔记--GPIO工作原理_第10张图片
  通过配置这七个寄存器,可以控制一组(16个)GPIO口。
(一)端口配置低寄存器(GPIOx_CRL)
  GPIOx_CRL是32位的寄存器,每4个位控制一个IO口,CRL控制标号为0-7的8个IO口。具体配置方式如下图:
STM32学习笔记--GPIO工作原理_第11张图片
STM32学习笔记--GPIO工作原理_第12张图片
(二)端口配置高寄存器(GPIOx_CRH)
  GPIOx_CRH是32位的寄存器,每4个位控制一个IO口,CRH控制标号为8-15的8个IO口。配置方式与CRL一样,只是控制的IO口不一样。

(三)端口输入数据寄存器(GPIOx_IDR)
  GPIOx_IDR是32位的寄存器,只用到了它的低16位(一组16个IO口),每个位控制该组IO的一个IO口,对应的是IO口的输入电平。
STM32学习笔记--GPIO工作原理_第13张图片
(四)端口输出数据寄存器(GPIOx_ODR)
  GPIOx_ODR是32位的寄存器,只用到了它的低16位(一组16个IO口),与IDR寄存器相反,ODR控制的是IO口的输出电平,每个位控制一个IO口输出高电平或者低电平。
STM32学习笔记--GPIO工作原理_第14张图片
  若CRL/CRH中配置为输入模式,即输入模式下,可通过配置ODR的最低位来设置输入上拉下拉模式:
STM32学习笔记--GPIO工作原理_第15张图片
(五)端口位设置/清除寄存器(GPIOx_BSRR)
  GPIOx_BSRR是32位的寄存器,对位设置/清除寄存器BSRR进行设置从而间接的对数据输出寄存器ODR进行设置;BSRR寄存器低16位对应位设置为1,那么IO口输出为高电平,对应位设置为0,IO口将不产生任何影响;高16位的作用与低19位相反。
STM32学习笔记--GPIO工作原理_第16张图片
(六)端口位清除寄存器(GPIOx_BRR)
STM32学习笔记--GPIO工作原理_第17张图片
(七)端口复用
 端口复用是指一些端口可以作为IO口,也可以作为一些外设的引脚;这样可以最大限度的利用端口资源。 STM32的大部分端口都具有复用功能。
STM32学习笔记--GPIO工作原理_第18张图片
(七)端口重映射功能
  端口重映射就是可以把某些功能引脚映射到其他引脚,这样可以方便布线。比如说串口1的默认引脚是PA9,PA10,我们可以通过配置重映射将它映射到PB6,PB7。
STM32学习笔记--GPIO工作原理_第19张图片

你可能感兴趣的:(单片机,STM32,嵌入式,单片机,stm32,gpio,嵌入式)