IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32 GPIO功能概述(一) -> 正文阅读

[嵌入式]STM32 GPIO功能概述(一)

图片来自 成电应电科协

一. GPIO定义

GPIO是通用输入/输出(General Purpose l/O)的简称,主要用于工业现场需要用到数字量输入/输出的场合,例如:

  1. 输出功能:继电器、LED、蜂鸣器等的控制
  2. 输入功能:传感器状态、高低电平等信息的读取
  3. 复用功能:片内外设的对外接口
  4. 时序模拟:模拟SPI、12C和UART等常用接口的时序

二. GPIO的特性

  1. 多种工作模式: 输出/输入/复用/模拟
  2. 灵活的复用模式
  3. 5V电压容限
  4. 外部中断功能

三. 端口和引脚

两个概念

端口(PORT)

独立的外设子模块,包括多个引脚,通过多个硬件寄存器控制引脚GPIO模块由端口GPIOA、GPIOB、GPIOC等多个独立的子模块构成
例如:端口GPIOA包括PAO~PA15这16个引脚,通过10个硬件寄存器控制引脚工作

引脚(PIN)

对应微控制器的一个管脚,归属于端口,由端口寄存器的对应位控制
PAO对应STM32F411RET6芯片的14脚,属于端口GPIOA,输出电平由端口GPIOA的输出数据寄存器GPIOA_ODR的第0位决定
在这里插入图片描述总结:一个端口默认包含16个引脚,但是不同型号的STM32微控制器所包含的端口数量及各端口包含的引脚数量各不相同,具体信息可以查询芯片的数据手册

在这里插入图片描述

四. GPIO模块的电路结构

在这里插入图片描述

五. GPIO工作模式

在这里插入图片描述

1. GPIO工作模式——输入模式

请添加图片描述
①输出驱动器关闭

②施密特触发器打开,

③可以获取引脚状态通过寄存器使能上/下拉电阻:浮空/上拉/下拉输入

④引脚电平状态将存入输入数据寄存器

2. GPIO工作模式——输出模式

请添加图片描述①输出驱动器打开

②施密特触发器打开

③通过寄存器使能上拉/下拉电阻

④通过输入数据寄存器获取引脚状态

GPIO工作模式——输出模式——推挽输出

在这里插入图片描述

GPIO工作模式——输出模式——开漏输出

在这里插入图片描述

3. GPIO工作模式——模拟模式

在这里插入图片描述
在这里插入图片描述

4. GPIO工作模式——复用模式

在这里插入图片描述

①输出驱动器打开

②施密特触发器打开

③通过寄存器使能上拉/下拉电阻

④通过输入数据寄存器获取引脚状态

六. 端口寄存器

请添加图片描述
每一个端口都包括这10个寄存器,其中x表示端口号,取值从A~K

模式寄存器GPIOx_MODER

请添加图片描述

输出类型寄存器GPIOx_OTYPER

请添加图片描述

输出速度寄存器GPIOx_OSPEEDR

在这里插入图片描述

上拉/下拉寄存器GPIOx_PUPDR

在这里插入图片描述

输入数据寄存器GPIOx_IDR

在这里插入图片描述

输出数据寄存器GPIOx_ODR

在这里插入图片描述

注意事项: 输出数据寄存器GPIOx_ODR

  1. 设置某一个引脚的输出电平时,只修改该引脚对应的位,而不要修改其他的位
  2. 设置输出数据寄存器的某一个位为1,并不代表该位对应的引脚一定输出高电平。 有可能该引脚在外围电路的作用下拉到了低电平。 因此应该通过读取输入数据寄存器GPIOx_IDR来获取引脚的真实电平情况

置位/复位寄存器GPIOx_BSRR

在这里插入图片描述

使用举例

在这里插入图片描述

结论: 设置多个引脚输出高/低电平时,使用置位/复位寄存器更加简单

七. 利用指针访问单个寄存器

寄存器地址

在这里插入图片描述

地址转换方法

在这里插入图片描述

地址转换过程

在这里插入图片描述

指针基类型

请添加图片描述

演示例程

驱动指示灯

  1. 例程目标
    基于寄存器的程序开发方式
  2. 例程内容
    控制开发板的用户指示灯LD2连续闪烁

新建工程

在这里插入图片描述

注: 选择自己使用的芯片型号

在这里插入图片描述

编程代码

在这里插入图片描述

程序编译,下载

在这里插入图片描述

八. 利用结构体指针访问寄存器组

寄存器组

请添加图片描述

tepedef 定义别名

在这里插入图片描述

__IOunint32_tGPIO_TypeDef
更能突出变量的硬件特性更能表明数据类型所占的位数代替结构体模板

区别

在这里插入图片描述

寄存器组定义

在这里插入图片描述

芯片头文件

在这里插入图片描述

编程代码

在这里插入图片描述在这里插入图片描述在这里插入图片描述

GPIOx->BSRR|=1<<5; // 01 左移 5 位,即低16位控制对应5引脚写入1;此次操作实现配置端口5输出高电平

GPIOC->MODER|=1<<(5*2); // 01 左移 5 * 2=10位,即配置位11、10置为01;此次操作实现配置端口5为输出模式

while(delay–) //就是Delay 这个数不断的递减。当Delay==0 时,循环结束。

在这里插入图片描述

简化寄存器配置过程

在这里插入图片描述

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:33:13  更:2021-10-18 17:34:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:53:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码