找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2839|回复: 2
收起左侧

STM32单片机之GPIO概述

[复制链接]
ID:763998 发表于 2020-6-18 17:31 | 显示全部楼层 |阅读模式

GPIO的概述

2.1.1 什么是GPIO?GPIO的作用?

              GPIO:通用输入输出控制器。

              GPIO的作用:芯片用来控制或采集外部器件的相关信息

2.1.2 GPIO的特征

<1>输入状态:浮空、上拉/下拉、模拟

<2>输出状态:推挽或开漏 + 上拉、下拉

<3>将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入)

<4>从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据

<5>置位和复位寄存器 (GPIOx_BSRR),对 GPIOx_ODR 具有按位写权限

<6>模拟功能

<7>复用功能输入 /输出选择寄存器(一个 I/O 最多可具有 16 个复用功能)

<8>输入数据寄存器 (GPIOx_IDR) 每隔 1 个 AHB1 时钟周期捕获一次 I/O 引脚的数据。

<9>所有 GPIO 引脚都具有内部弱上拉及下拉电阻,可根据 GPIOx_PUPDR 寄存器中的值来打开 /关闭。

2.1.3 GPIO 功能描述

  •      输入浮空
  •      输入上拉
  •      输入下拉
  •      模拟功能
  •      具有上拉或下拉功能的开漏输出
  •      具有上拉或下拉功能的推挽输出
  •      具有上拉或下拉功能的复用功能推挽

8) 具有上拉或下拉功能的复用功能开漏

注意:每个 I/O 端口位均可自由编程,但 I/O 端口寄存器必须按 32 位字、半字或字节进行访问

2.1.4 5V容忍原理

2.1.5 I/O 引脚复用器和映射

              微控制器 I/O 引脚通过一个复用器连接到板载外设 /模块,该复用器一次仅允许一个外设的复用功能 (AF) 连接到 I/O 引脚

<1>完成复位后,所有 I/O 都会连接到系统的复用功能 0 (AF0)。

<2>外设的复用功能映射到 AF1 至 AF13。

<3>Cortex?-M4F EVENTOUT 映射到 AF15

2.2 GPIO的框架

2.2.1 输入配置

● 输出缓冲器被关闭

● 施密特触发器输入被打开

● 根据 GPIOx_PUPDR 寄存器中的值决定是否打开上拉和下拉电阻

● 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

● 对输入数据寄存器的读访问可获取 I/O 状态

2.2.2 输出配置

              

● 输出缓冲器被打开:

开漏模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1 ”会使端口保持高组态 (Hi-Z)( P-MOS 始终不激活)。

推挽模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1 ”可激活P-MOS。

● 施密特触发器输入被打开

● 根据 GPIOx_PUPDR 寄存器中的值决定是否打开弱上拉电阻和下拉电阻

● 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

● 对输入数据寄存器的读访问可获取 I/O 状态

●对输出数据寄存器的读访问可获取最后的写入值

2.2.3 复用功能

● 可将输出缓冲器配置为开漏或推挽

● 输出缓冲器由来自外设的信号驱动(发送器使能和数据)

● 施密特触发器输入被打开

● 根据 GPIOx_PUPDR 寄存器中的值决定是否打开弱上拉电阻和下拉电阻

● 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

● 对输入数据寄存器的读访问可获取 I/O 状态

复用与通用的对比:

2.2.4 模拟功能

● 输出缓冲器被禁止。

● 施密特触发器输入停用, I/O 引脚的每个模拟输入的功耗变为零。施密特触发器的输出被

强制处理为恒定值 (0)。

● 弱上拉和下拉电阻被关闭。

● 对输入数据寄存器的读访问值为“0”。

2.3 GPIO相关寄存器

2.3.1 GPIO寄存器

              每个IO口有10个寄存器控制

4 个 32 位配置寄存器

GPIOx_MODER

GPIOx_OTYPER

GPIOx_OSPEEDR

GPIOx_PUPDR

2 个 32 位数据寄存器

GPIOx_IDR

GPIOx_ODR

1 个 32 位置位 /复位寄存器

GPIOx_BSRR

1 个 32 位锁定寄存器

GPIOx_LCKR

2 个 32 位复用功能选择寄存器

GPIOx_AFRL

GPIOx_AFRH

2.3.2 寄存器相关缩写

              

2.4 软件设计

2.4.1 LED灯

              1.开时钟

              2.初始化GPIO

              3.点亮灯

2.4.2 蜂鸣器

1.开时钟

              2.初始化GPIO

              3.开启蜂鸣器

2.4.3 按键

1.开时钟

              2.初始化GPIO

              3.按键识别

                            延时消抖

                            松手检测

2.5 补充

2.5.1 IO口与端口

GPIO口以分组形式存在,每组(端口)有16个IO口。

                            I/O口:某个具体引脚

                            端口:16个I/O口组成

2.5.2 变量与寄存器的异同

                            相同点:

变量与寄存器都向内存申请空间,可以存储数据,都有相应地址。

                            不同点:

变量地址随时变化,寄存器地址永远固定;

变量可以存储浮点类型数据,寄存器不能存储浮点类型数据。

2.5.3 各类电平

              CMOS电平:

3.3V              逻辑1

0.0V              逻辑0

              TTL电平:

                            5.0V              逻辑1

                            0.0V              逻辑0

              485/232电平:

                            -15V~-3V              逻辑1

                            3V~15V              逻辑0

              差分信号:

                            定义:有两条线,通过两条线的电压差作为逻辑0/1。

                            好处:传输距离很远。衰减一致,保证逻辑。

2.5.4 问答

<1>为什么使用模块化编程?

1.降低代码冗余度,提高代码的利用率

2.便于阅读和维护

<2>为什么使用条件编译?

1.为了使代码更加灵活

<3>头文件使用条件编译的作用?

  • 防止头文件重复引入

<4>注释的作用?

  • 提高代码的阅读性

<5>头文件一般有什么东西?

  • 头文件
  • 函数声明
  • 变量声明
  • 变量(不建议)

<6>按键按下为什么要延时消抖?

              按键按下瞬间,按键从一个稳定状态变化到另一个稳定状态之间,有一个不稳定的过程,延时是为了越过不稳定状态存在的时间,一般为10ms

<7>按键如何保持一次性?

              松手检测:设置一个静态标志位,用于松手检测。

<8>知识领悟

寄存器是编程人员的编程接口,对于MCU而言,不管你如何封装,一切配置,终究归于寄存器配置;而操作寄存器的本质是对操作地址。


以上的Word格式文档51黑下载地址:

2.STM32-GPIO.docx (1.5 MB, 下载次数: 15)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:384904 发表于 2020-6-19 00:17 | 显示全部楼层
好东西,非常想要
回复

使用道具 举报

ID:763998 发表于 2020-6-19 15:53 | 显示全部楼层
peterliuh 发表于 2020-6-19 00:17
好东西,非常想要

哈哈哈,感觉写的一般般,不敢当。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表