首先介绍一下接口类型
接口就是芯片之间的连接方式。单片机通过GPIO与各种模块相连接,传输数据、信号。接口类型可分为以下几种:
1、普通GPIO接口
通常只有一个引脚,只负责输出、输入高低电平。
比如输出高低电平控制LED、蜂鸣器;作为按键输入引脚判断按键是否被按下。
2、协议类GPIO接口
一条或多条数据线根据某种协议传输数据,引脚仍是输出输入高低电平,但是输出输入是根据协议决定的,比如IIC协议,只有在时钟线低电平的时候,数据线才能进行高低电平转换,时钟线为高电平的时候,数据线必须保持电平不变(起始信号、结束信号除外)。
这种情况一般是用来传输比较复杂的数据,比如与各种传感器、LCD等连接。
常见的协议有IIC、SPI、CAN、FSMC等。
3、内存接口
比如与Nor Flash、SDRAM、DDR、网卡DM9000等连接。
这类接口有地址总线、数据总线、读数据、写数据和片选信号。
4、模拟接口
之前三种接口GPIO的输入输出的都是高低电平,电平信号不是0就是1。
模拟接口GPIO输入输出是不确定的。简单理解就是输入输出的是模拟信号,是可以连续变化的,能输出0-Vmax之间的任意值。
2. GPIO简介
GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口 通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 并且F4系列是基于Cortex-M4内核
GPIO的复用:
STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 共用的。也就是说,一个引脚可以有很多作用,但是默认为IO口,如果想使用一个 GPIO内置外设的功能引脚,就需要GPIO的复用,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。 比如说串口 就是GPIO复用为串口
3. GPIO的工作模式
1、4种输入模式
(1)GPIO_Mode_IN_FLOATING 浮空输入
(2)GPIO_Mode_IPU 上拉输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_AIN 模拟输入
2、4种输出模式
(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
3、4种最大输出速度
(1)2MHZ (低速)
(2)25MHZ (中速)
(3)50MHZ (快速)
(4)100MHZ (高速)
关于他们的定义,都在 stm32f4xx_gpio.h 中,都为结构体形式的定义
4.GPIO框图剖析
我们所用到的每一个GPIO其内部结构都是这样,分别对应着GPIO的八种模式 这里我们简单的介绍下:
-
保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入,当引脚电压高于VDD_FT时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁
-
上拉、下拉电阻:控制引脚默认状态的电压,开启上拉的时候引脚默认电压为高电平,开启下拉的时候引脚默认电压为低电平
-
TTL施密特触发器:基本原理是当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;IO口信号经过触发器后,模拟信号转化为0和1的数字信号 也就是高低电平 并且是TTL电平协议 这也是为什么STM32是TT