STM32 GPIO输出
文章目录
一.GPIO基本结构
在stm32中,所有GPIO外设都是挂载在APB2总线上的,GPIO是以GPIOA,GPIOB….的方式命名字的,GPIO的外设有16个引脚,命名方式是PA0-PA15.
GPIO由寄存器和驱动器构成的,寄存器是存储器,内核可以从APB2上的寄存器身上进行读写,假如寄存器写1对应的引脚就会输出高电平。寄存器只能负责存储功能,所以需要驱动器来增强加大驱动能力。
二.GPIO的I/O端口位的基本结构
保护二极管的作用是用来保护电路,如果输入电压>3.3v,从VDD走,保护电路,若电压<0v,从VSS走。起的作用就是一个保护的作用。
开/关的作用是为了避免引脚悬空导致引脚的输入数据不确定,在这个地方就可以上拉下拉电阻,上拉电阻时可以保证引脚的高电平。
TTL肖特基触发器,对出入电压整形,
输入电压大于某一高阈值,就是是高电平,
如果小于某一低阈值,就是低电平。
高阈值和低阈值之间有一段空隙,这样可以有效避免因为信号波动造成的输出抖动现象。
经过触发器整形的波形可以进入输入数据寄存器,再对此进行读取就可以知道输入的电平。
输出控制
开漏输出,p-mos无效,n-mos在工作。
数据寄存器为1时下管断开,这时输出相当于断开,也就是高阻模式。
数据寄存器为0时,下管导通,输出直接接到VSS,输出低电平。这种模式下只有低电平有驱动能力,高电平没有驱动能力。这个模式可以作为通信协议的驱动方式,比如I2C,在多机通信下,这个模式可以避免各个设备间的互相干扰。可该模式还可用于输出5v的电平信号(连接一个5v的电压(有这么个方法但是我不知道更具体的了)),可兼容5v的设备,这是开漏输出的主要用途。
推挽输出,p-mos和n-mos均有效。
数据寄存器为1时(上管导通,下管断开,输出直接接到VDD)-> 输出高电平。
数据寄存器为0时(上管断开,下管导通,输出直接到VSS)-> 输出低电平。
此模式下,高低电平均有较强的驱动能力,故推挽输出也可以叫强推输出模式,此时STM32对IO口有绝对的控制权,高低电平都由STM32说了算 。
三.点亮LED灯
点亮LED灯的三个步骤
1.使用RCC开启GPIO的时钟,
2.使用GPIO_Init函数来初始化GPIO,
3.使用输入或输出的函数来控制GPIO口。
#include "stm32f10x.h"
void Delay(u32 count)
{
u32 i=0;
for(;i<count;i++);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 配置时钟,使能IO口时钟,使能PA,PD端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
//初始化IO参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.8
//将GPIOA的8端口设为1
GPIO_SetBits(GPIOA,GPIO_Pin_8);
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
Delay(3000000);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
Delay(3000000);
}
}
作者:m0_70125185