GPIO工作原理

一、

4种输入模式:

  1. 输入浮空
  2. 输入上拉
  3. 输入下拉
  4. 模拟输入

4种输出模式:

  1. 开漏输出
  2. 开漏复用功能
  3. 推挽式输出
  4. 推挽式复用功能

3种最大翻转速度:

  1. -2MHZ
  2. -10MHz
  3. -50MHz

 

推挽输出:
    可以输出强高低电平,连接数字器件。

开漏输出:
    只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行.适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)

二、

每组GPIO端口的寄存器包括:

  1. 两个32位配置寄存器(GPIOx_CRL , GPIOx_CRH) ,
  2. 两个32位数据寄存器(GPIOx IDR和GPIOX_ODR),
  3. 一个32位置位/复位寄存器(GPIOx_ BSRR),
  4. 一个16位复位寄存器(GPIOX_ BRR),
  5. 一个32位锁定寄存器(GPIOx_LCKR)。

每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问)。

提示:CRL/CRH每四个位控制一个IO口,CRL控制标号0-7的口,CRH控制标号8-15的口。

 三、

 四、

#include "stm32f10x.h"

 void Delay(u32 count)
 {
   u32 i=0;
   for(;i<count;i++);
 }
 int main(void)
 {	
  GPIO_InitTypeDef  GPIO_InitStructure;
	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
  RCC_APB2Periph_GPIOE, ENABLE);	    //使能PB,PE端口时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;			    //LED0-->PB.5 端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);			     //初始化GPIOB.5
  GPIO_SetBits(GPIOB,GPIO_Pin_5);					//PB.5 输出高
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	            //LED1-->PE.5推挽输出
  GPIO_Init(GPIOE, &GPIO_InitStructure);	  	       //初始化GPIO
  GPIO_SetBits(GPIOE,GPIO_Pin_5); 			 //PE.5 输出高 	  
  while(1)
	{
	  GPIO_ResetBits(GPIOB,GPIO_Pin_5);//GPIO_ResetBits()输出低电平
	  GPIO_SetBits(GPIOE,GPIO_Pin_5);//GPIO_SetBits()输出高电平
		Delay(3000000);
		GPIO_SetBits(GPIOB,GPIO_Pin_5);
		GPIO_ResetBits(GPIOE,GPIO_Pin_5);
		Delay(6000000);
	}
 }

1. 首先使能对应IO的时钟 RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)使能时钟

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);        //使能PB,PE端口时钟

2.初始化IO口,调用 GPIO_Init(); 函数

 GPIO_Init(GPIOB, &GPIO_InitStructure);                 //初始化GPIOB.5

3.操作IO口,输出高低电平  

      GPIO_ResetBits(GPIOB,GPIO_Pin_5);//GPIO_ResetBits()输出低电平
      GPIO_SetBits(GPIOE,GPIO_Pin_5);//GPIO_SetBits()输出高电平

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值