网站主页模板 优帮云,沧县网站建设公司,百度搜索站长平台网站,域名可以绑定几个网站GPIO最简单的功能是输出高低电平#xff1b;GPIO还可以被设置为输入功能#xff0c;用于读取按键等输入信号#xff1b;也可以将GPIO复用成芯片上的其他外设的控制引脚。
STM32F407ZGT6有8组IO。分别为GPIOA~GPIOH#xff0c;除了GPIOH只有两个IO#xff0c;其余每组IO有…GPIO最简单的功能是输出高低电平GPIO还可以被设置为输入功能用于读取按键等输入信号也可以将GPIO复用成芯片上的其他外设的控制引脚。
STM32F407ZGT6有8组IO。分别为GPIOA~GPIOH除了GPIOH只有两个IO其余每组IO有16根引脚。 1编写代码步骤
1.看原理图确认要操作的引脚以及相关逻辑 2.GPIO初始化 申明结构体GPI0 InitiypeDef
时钟使能RCC AHBlPeriphclockCmd
配置结构体
调用初始化函数进行初始化 3.写逻辑代码
2GPIO工作模式
输入模式输出模式复用模拟
4种输入模式
1GPIO_Mode_IN_FLOATING 浮空输入
2GPIO_Mode_IPU 上拉输入
3GPIO_Mode_IPD 下拉输入
4GPIO_Mode_AIN 模拟输入
输出电流时不够会采用上下拉开漏输出不够时用上拉推挽输出强0或强1开漏...
输出速度
4种输出模式
5GPIO_Mode_Out_OD 开漏输出带上拉或者下拉
6GPIO_Mode_AF_OD 复用开漏输出带上拉或者下拉
7GPIO_Mode_Out_PP 推挽输出带上拉或者下拉在M4内核是支持的M3支持
8GPIO_Mode_AF_PP 复用推挽输出带上拉或者下拉在M4内核是支持的M3支持
4种最大输出速度
12MHZ (低速)
225MHZ (中速)
350MHZ (快速)
4100MHZ (高速)
3GPIO电路图 1.保护二极管 引脚上的这两个保护二极管可以将引脚外部过高或过低的电压进行钳位当引脚电压高于VDD_FT 时上方的二极管导通吸收这个高电压当引脚电压低于VSS 时下方的二极管导通防止不正常电压引入芯片导致芯片烧毁也叫钳位二极管。
2.上拉、下拉电阻 : 阻值大概在 30~50K 欧之间由寄存器控制。 没有干扰引脚的电压时即没有外部的上、下拉电压引脚的电平由引脚内部上、下拉决定开启 内部上拉电阻工作引脚电平为高开启内部下拉电阻工作则引脚电平为低。 STM32 的内部上拉是一种“弱上拉”这样的上拉电流很弱如果有要求大电流还是得外部上拉。 当配置成上拉模式即GPIO_PuPd_UP时IO端口内部通过上拉电阻连接到电源VDD。 当配置成下拉模式即GPIO_PuPd_DOWN时IO端口内部通过下拉电阻连接到电源VSS。 一般当检测信号发生时被检测信号接到电源的低电位如IO口通过按键接到VSS此时应该配置为上拉模式按键未按下时读取IO状态为高电平1按键按下时由于外部接到VSS此时读取IO状态为低电平0。 反之当检测信号发生时被检测信号接到电源的高电位如果IO口通过按键接到VDD此时应该配置为下拉模式。按键未按下时读取IO状态为低电平0按键按下时由于外部接到VDD此时读取IO状态为高电平1。 3.施密特触发器 : 施密特触发器可作为波形整形电路能将模拟信号波形整形为数字电路能够处理的方波波形而且 由于施密特触发器具有滞回特性所以可用于抗干扰以及在闭回路正回授/负回授配置中用于实 现多谐振荡器。 输入电压高于正向阈值电压输出为高 当输入电压低于负向阈值电压输出为低 当输入在正负向阈值电压之间输出不改变。 4.P-MOS 管和 N-MOS 管 : 控制 GPIO 的开漏输出和推挽输出两种模式。 开漏输出 输出端相当于三极管的集电极 要得到高电平状态需要上拉电阻才行。 推挽输出这两只对称的 MOS 管每次只有一只导通所以导通损耗小、效率高。
5.IO 口复用功能 :
一个 IO 口可以是通用的 IO 口功能还可以是其他外设的特殊功能引脚这就是 IO 口的复用功 能。
6.输入浮空 : 上拉/下拉电阻为断开状态施密特触发器打开输出被禁止。 IO 口的电平完全是由外部电路决定。如果 IO 引脚没有连接其他的设备引脚的电平是不可确定的。 7.输入上拉 : 上拉电阻导通施密特触发器打开输出被禁止。 内部上拉电阻的阻值较大是“弱上拉”不适合做电流型驱动。 8.输入下拉 : 下拉电阻导通施密特触发器打开输出被禁止。 内部下拉电阻的阻值较大所以不适合做电流型驱动。 9.模拟功能 : 上下拉电阻断开施密特触发器关闭双 MOS 管也关闭。 用于 ADC、 DAC、 MCO 这类操作模拟信号的外设。 10.开漏输出 : P-MOS 被“输出控制” 控制在截止状态只有 N-MOS 还受控制于输出寄存器 , 且上下拉电阻都断开 了可以看成浮空输入 从结果上看它只能输出低电平 Vss 或者高阻态 常用于 IIC 通讯IIC_SDA 或其它需要进行电平转换的场景 开漏输出模式下 P-MOS 一直在截止状态即不导通所以 P-MOS 管的栅极相当于一直接VDD。如果输出数据寄存器①的值为 0那么 IO 引脚的输出状态②为低电平 输出数据寄存器的逻辑 0 经过“输出控制” 的取反操作后输出逻辑 1 到 N-MOS 管的栅极这时 NMOS管就会导通使得 IO 引脚连接到 VSS即输出低电平。 如果输出数据寄存器的值为 1经过“输出控制”的取反操作后输出逻辑 0 到 N-MOS 管的栅极这时 N-MOS 管就会截止。 又因为 P-MOS 管是一直截止的使得 IO 引脚呈现高阻态即不输出低电平也不输出高电平。 因此要 IO 引脚输出高电平就必须接上拉电阻。 又由于 F1 系列的开漏输出模式下内部的上下拉电阻不可用所以只能通过接芯片外部上拉电阻的方式实现开漏输出模式下输出高电平。如果芯片外部不接上拉电阻那么开漏输出模式下IO 无法输出高电平。 在开漏输出模式下 施密特触发器是工作的所以 IO 口引脚的电平状态会被采集到输入数据寄存器中如果对输入数据寄存器进行读访问可以得到 IO 口的状态。也就是说开漏输出模式下我们可以读取 IO 引脚状态。
11.推挽输出 : 推挽输出模式 P-MOS 管和 N-MOS 管都用上。 结果上看它会输出低电平 VSS 或者高电平VDD。 如果输出数据寄存器①的值为 0经过“输出控制” 取反操作后输出逻辑 1 到 P-MOS管的栅极这时 P-MOS 管就会截止同时也会输出逻辑 1 到 N-MOS 管的栅极这时 NMOS 管就会导通使得 IO 引脚接到 VSS即输出低电平。 如果输出数据寄存器的值为 1 经过“输出控制” 取反操作后输出逻辑 0 到 N-MOS管的栅极这时 N-MOS 管就会截止同时也会输出逻辑 0 到 P-MOS 管的栅极这时 PMOS 管就会导通使得 IO 引脚接到 VDD即输出高电平。 当 IO 引脚在做高低电平切换时两个管子轮流导通一个负责灌电流一个负责拉电流使其负载能力和开关速度都有较大的提高。 拉电流数字电路输出高电平给负载提供的输出电流是从输出端流出的电流表征输出电流的 能力。 灌电流数字电路输出低电平时外部负载输入的电流是从输出端流入的电流表征输入电流的 能力。 施密特触发器也是打开的我们可以读取 IO 口的电平状态。 12.开漏式复用功能 : 一个 IO 口可以是多个外设的功能引脚选择作为其中一个选择复用功能时引脚的状态是由对应的外设控制而不是输出数据寄存器。 施密特触发器也是打开的我们可以读取 IO 口的电平状态同时外设可以读取 IO 口的信息。
13.推挽式复用功能 : GPIO初始化
#include led.h
#include stm32f4xx.h//代码步骤
/*
1.看原理图确认要操作的引脚以及相关逻辑
2.GPIO初始化1.申明结构体 GPIO_InitTypeDef2.时钟使能 RCC_AHBlPeriphClockCmd3.配置结构体4.调用初始化函数进行初始化3.写逻辑代码
*/void LED_Init(void)//初始化
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//时钟使能通电还是断电//开始配置F端口下的9号跟10号引脚。GPIO_InitStructure.GPIO_PinGPIO_Pin_9|GPIO_Pin_10; //PF9引脚GPIO_InitStructure.GPIO_Mode GPIO_Mode_OUT; //输出模式GPIO_InitStructure.GPIO_OTypeGPIO_OType_PP; //推挽输出GPIO_InitStructure.GPIO_PuPdGPIO_PuPd_NOPULL; //不进行上下拉GPIO_InitStructure.GPIO_SpeedGPIO_High_Speed; //引脚响应速度GPIO_Init(GPIOF, GPIO_InitStructure);GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10); //set 置位1 灯灭 写高电平
}