STM32 GPIO实现与外部通讯、控制以及数据采集方案介绍

电子说

1.2w人已加入

描述

GPIO是什么

GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
STM32芯片的GPIO被分成很多组,每组有16个引脚,如型号为STM32F103ZET6型号的芯片有GPIOA、GPIOB、GPIOC至GPIOG共7组GPIO,芯片一共144个引脚,其中GPIO就占了一大部分,所有的GPlO引脚都有基本的输入输出功能。
最基本的输出功能是由STM32控制引脚输出高、低电平,实现开关控制,如把GPIO引脚接入到LED灯,那就可以控制LED灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。
最基本的输入功能是检测外部输入电平,如把GPIO引脚连接到按键,通过电平高低区分按键是否被按下。

GPIO

点亮PB0 LED:

GPIO

GPIO功能框图

每个GPI/O端口有两个32位配置寄存器(GPIOX-CRL,GPIOx-CRH),两个32位数据寄存器(GPIOxIDR和GPIOX-ODR),一个32位置位/复位寄存器(GPIOx-BSRR),一个16位复位寄存器(GPIOx-BRR)和一个32位锁定寄存器(GPIOX-LCKR).
根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式:

输入浮空

输入上拉

输入下拉

模拟输入

开漏输出

推挽式输出

推挽式复用功能

开漏复用功能

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

GPIO

图上除了I/O引脚我们能在芯片外部看到,其余部分都在芯片内部

1:保护模块:当I/O引脚输入正电压大于VDD,电流就会流向VDD不会流进芯片内部,从而保护电路(远大于VDD时二极管会烧坏,因此不能将引脚直接接电极,要用电机驱动),反之输入负电压超过VSS时,电流就会从VSS往外流。

2:推挽、开漏或关闭:用以下两个寄存器配置,每4个位控制一个GPIO,配置输入输出的各种模式(右上的上拉下拉开关也是用这个寄存器设置的:10)。

GPIO

简化电路图:

GPIO

当INT输入为1,取反后为0,上方的Ug

当INT输入为0,取反后为1,上方的Ug=Us,VDD3.3V电流流向Ug,VDD与OUT断开;下方的Ug>Us,GND与OUT导通,OUT电流流向GND。

可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由VSS决定。

推挽结构指两个三极管受两路互补的信号控制,总是在一个导通的时候另外一个截止,优点开关效率效率高,电流大,驱动能力强。

输出高电平时,电流输出到负载,叫灌电流,可以理解成推,输出低电平时,负载电流流向芯片,叫拉电流,即挽。

GPIO

开漏输出一般只能输出低电平,想输出高电平要另外加上拉电阻,而且此时NMOS处于截止状态(当INT为1时)

输出高电平时,VDD如果是3.3V,OUT就输出3.3V,VDD如果是5V,OUT就输出5V

只能输出低电平,不能输出高电平。

如果要输出高电平,则需要外接上拉。

开漏输出具有"线与"功能,一个为低,全部为低,多用于I2C和SMBUS总线。

3:输出数据寄存器:用以下寄存器配置,可以直接设置ODR,也可以先设置BSRR,最后ODR会被更改。

GPIO

(右上的上拉下拉开关也是用这个BSRR寄存器设置的)

4:复用功能输出:用外设输出时(例如串口),第3部分就没用了。

5:输入数据寄存器:读出引脚数据

GPIO

6:复用功能输入:外设引脚输入。

7:模拟输入:ADC采集,不经过肖特基触发器

GPIO输出初始化顺序

1、选定具体的GPIO
2、配置GPIO工作模式(CRL和CRH寄存器)
3、控制GPIO输出高低电平(ODR,BRR和BSRR)

点亮B0 LED

GPIO


编辑:hfy

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分