STM32 学习笔记5 – GPIO 输出

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

01. GPIO 简介

  • GPIO(General Purpose Input Output)通用输入输出口
  • 可配置为 8 种输入输出模式
  • 引脚电平:0V~3.3V,部分引脚可容忍 5V
  • 输出模式下可控制端口输出高低电平,用以驱动 LED、控制蜂鸣器、模拟通信协议输出时序等
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC 电压采集、模拟通信协议接收数据等

每个 GPI/O 端口有两个 32 位配置寄存器 (GPIOx_CRL,GPIOx_CRH),两个 32 位数据寄存器 (GPIOx_IDR 和 GPIOx_ODR),一个 32 位置位 / 复位寄存器(GPIOx_BSRR),一个 16 位复位寄存器(GPIOx_BRR) 和一个 32 位锁定寄存器(GPIOx_LCKR)。
根据数据手册中列出的每个 I/O 端口的特定硬件特征, GPIO 端口的每个位可以由软件分别配置成多种模式。

  • 输入浮空
  • 输入上拉
  • 输入下拉
  • 模拟输入
  • 开漏输出
  • 推挽式输出
  • 推挽式复用功能
  • 开漏复用功能

每个 I/O 端口位可以自由编程,然而 I/0 端口寄存器必须按 32 位字被访问 (不允许半字或字节访问)。GPIOx_BSRR 和 GPIOx_BRR 寄存器允许对任何 GPIO 寄存器的读 / 更改的独立访问;这样,在读和更改访问之间产生 IRQ 时不会发生危险。

02. GPIO 基本结构

系统结构

图片[1]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

基本结构

图片[2]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

03. GPIO 位结构

I/O 端口位的基本结构

图片[3]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

5 伏兼容 I/O 端口位的基本结构

图片[4]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

04. GPIO 模式

通过配置 GPIO 的端口配置寄存器,端口可以配置成以下 8 种模式

图片[5]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

4 种输入模式

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

4 种输出模式

  • 开漏输出
  • 开漏复用功能
  • 推挽式输出
  • 推挽式复用功能

3 种最大翻转速度:

  • 最大输出速度为 2MHz
  • 最大输出速度为 10MHz
  • 最大输出速度为 50MHz

4.1 输入浮空

浮空输入模式下,I/O 端口的电平信号直接进入输入数据寄存器。也就是说,I/O 的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。所以在要读取外部信号时通常配置 IO 口为浮空输入模式。
图片[6]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

4.2 输入上拉

上拉输入模式下,I/O 端口的电平信号直接进入输入数据寄存器。但是在 I/O 端口悬空(在无信号输入)的情况下,输入端的电平可以保持在高电平;并且在 I/O 端口输入为低电平的时候,输入端的电平为低电平。

图片[7]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

4.3 输入下拉

下拉输入模式下,IO 口工作方式刚好和上拉模式相反。I/O 端口的电平信号直接进入输入数据寄存器。但是在 I/O 端口悬空(在无信号输入)的情况下,输入端的电平可以保持在低电平;并且在 I/O 端口输入为高电平的时候,输入端为高电平。
图片[8]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

4.4 模拟输入

模拟输入模式下,I/O 端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如 ADC 模块等等。

图片[9]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

4.5 开漏输出

开漏输出模式下,通过设置位设置 / 清除寄存器或者输出数据寄存器的值,控制 MOS 管的导通。这里要注意 N-MOS 管,当设置输出的值为高电平的时候,N-MOS 管处于关闭状态,此时 I/O 端口的电平就不会由输出的高低电平决定,而是由 I/O 端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS 管处于开启状态,此时 I/O 端口的电平就是低电平。同时,I/O 端口的电平也可以通过输入电路进行读取;注意,I/O 端口的电平不一定是输出的电平。通常使用开漏输出时外部要加一个上拉电阻。

图片[10]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

4.6 开漏复用功能

开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让 CPU 直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

图片[11]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

4.7 推挽式输出

推挽输出模式下,通过设置位设置 / 清除寄存器或者输出数据寄存器的值,控制 P-MOS 管和 N-MOS 管的导通来控制 IO 口输出高电平还是低电平。这里要注意 P-MOS 管和 N-MOS 管,当设置输出的值为 1 的时候,P-MOS 管处于开启状态,N-MOS 管处于关闭状态,此时 I/O 端口的电平就由 P-MOS 管决定为高电平;当设置输出的值为 0 的时候,P-MOS 管处于关闭状态,N-MOS 管处于开启状态,此时 I/O 端口的电平就由 N-MOS 管决定为低电平。同时,I/O 端口的电平也可以通过输入电路进行读取;注意,此时 I/O 端口的电平一定是输出的电平。

图片[12]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

4.8 推挽式复用功能

推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让 CPU 直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

图片[13]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

05. LED 和蜂鸣器简介

  • LED:发光二极管,正向通电点亮,反向通电不亮
  • 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
  • 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
    图片[14]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

硬件电路
图片[15]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

06. 面包板

图片[16]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

面包板描述

图片[17]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

面包板使用示例

图片[18]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

图片[19]-STM32 学习笔记5 – GPIO 输出-爱写代码的小医生

07. 附录

参考: 【STM32】江科大 STM32 学习笔记汇总

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容