文章目录

一.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

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 GPIO输出

发表回复