文章内容如下:
1)GPIO简介
GPIO 英文全名为 General Purpose Intput Output,中文译为 通用输入输出端口 。GPIO是芯片上的引脚,可通过软件来控制这些引脚的高低电平,从而实现与外部通信等功能。
Stm32-F407ZGT6芯片图:
以Stm32-F407ZGT6芯片为例,A、B、C、D四个区域共有144个引脚,这144个引脚中就有若干引脚是GPIO。
① 电源管脚: 引脚图中的 VDD、VSS、VREF+、VREF-、VSSA、VDDA 等都属于电源引脚;
② 晶振管脚:引脚图中的 PC14、PC15 和 OSC_IN、OSC_OUT 都属于晶振引脚;
③ 复位管脚: 引脚图中的 NRST 属于复位引脚;
④ 下载引脚:引脚图中的 PA13、PA14、PA15、PB3 和 PB4 属于 JTAG 或SW 下载引脚;
⑤ BOOT 引脚:引脚图中的 BOOT0 和 PB2(BOOT1)属于 BOOT 引脚;
⑥ GPIO管脚:引脚图中的 PA、PB、PC、PD 等均属于 GPIO 引脚。并且每一个端口都有 16 个引脚,比如 PA 端口,它有 PA0-PA15。其他的 PB、PC、PD 等端口是一样的。
STM32F407ZGT6管脚详细功能见 链接(提取码: 65uv)——EXCEL数据摘选自 P47-P59(提取码: 53dx)GPIO内部结构图:
①为2个保护二极管,当I/O口引脚处电势大于 V D D _ F T {V_{DD\_FT}} VDD_FT时,电流由I/O口引脚流入,流经a流出;当I/O口引脚处电势小于 V S S {V_{SS}} VSS时,电流由b流入,流经I/O口引脚流出;
②主要用于初始化时延时芯片工作,避免一初始化芯片就开始工作。如初始化时若低电平有效,则初始化时让I/O引脚连接高电平 V D D {V_{DD}} VDD,此时电势差为0,芯片不工作,用上上拉电阻a主要是起到能量消耗作用;高电平有效同理。②的作用主要通过编程实现,需用到端口上拉/下拉寄存器(GPIOx_PUPDR)(x=A…I/)GPIOx_PUPDR)(x=A…I/)寄存器:
⑥为输出数据寄存器(GPIOx_ODR) (x = A…I)
GPIOx_ODR (x = A…I)寄存器:
⑦为置位/复位寄存器(GPIOx_BSRR)(x=A…I)
GPIOx_BSRR(x=A…I):
端口模式寄存器(GPIOx_MODER)(x=A…I)
GPIO口有输入输出两种功能,在实际编程时首先要表示出来GPIO口是用来输入还是用来输出,这时候要用到端口模式寄存器(GPIOx_MODER)(x=A…I):
③是用来控制输出模式的,需要用到GPIO 端口输出类型寄存器(GPIOx_OTYPER)(x=A…I):
③的详细原理图如下:
④具有电压选择作用,输入模式下,I/O口进的电压(即TTL电平)实际上并不是一直稳定不变的,施密特触发器规定,高于1.8V为高电平转为数字信号1,低于1.8V为低电平转为数字信号0,最后放到输入数据寄存器⑤里:
2)寄存器版本点亮LED流程
步骤:
①初始化模式寄存器MODER;
②初始化输出类型寄存器OTYPER;
③初始化输出速度寄存器OSPEEDR;
④初始化上拉/下拉寄存器PUPDR;
⑤初始化置位复位寄存器和输出数据寄存器(BSRR和ODR)。
GPIO输出-使用寄存器点亮LED