原理图初识之GPIO

GPIO:(General Purpose Input Output (通用输入/输出)简称为GPIO) 

使用方法大致为:

1、参考芯片手册,设置控制寄存器(将引脚设置为输入、输出或者中断模式)
2、如果是输出引脚,就是往数据寄存器写入高电平或者低电平。如果为输入引脚就是读取数据寄存器的状态(高电平还是低电平)
3、中断,打断cpu的操作,继而去做一部分事情

以上拿stm32举例:
   
   
注意:stm32的使用和51单片机不同,单片机接上晶振接上电源 直接就可以操作io口,但是stm32的时钟是
经过了倍频器放大频率的,然后再由锁相环输出稳定的时钟频率。
这么做的带来了很多好处,虽然stm32的外部时钟只有8Mhz ,经过倍频器后就可以得到好几种的时钟频率 给不同的外设提供不同的时钟频率。
所以stm32有很多总线,这些总线的频率是不同的,而且在使用前总线是关闭的,使用外设前必须打开其对应的总线,这样也是处于为stm32降低功耗的考虑。
配置方法:
对于stm32的GPIO口还需要注意的一点是,通过GPIO寄存器,可以把GPIO口配置成8种工作模式:
  • 浮空输入                                         
  • 带上拉电阻输入
  • 带下拉电阻输入
  • 模拟输入
  • 开漏输出
  • 推挽输出
  • 复用推挽输出
  • 复用开漏输出
其中前四种是输入状态:
带上拉电阻是指stm32内部已经结了上拉电阻,下拉同理;
浮空输入就是stm32内部什么都没接,需要自己外接上拉电阻;
模拟输入使用在AD转换的时候。
后四种是输出状态:
开漏输出是指可以输出低电平,但是如果要输出高电平需要上拉电阻;
推挽输出是指既可以输出高电平又可以输出低电平;
后面两个是打开IO的第二功能,IO口复用时需要配置成该状态。
操作寄存器
stm32的每个I/O口可以自由编程,单I/O口寄存器必须按32位字被访问。 stm32的每个I/O端口都由7个寄存器来控制:
  • 配置模式的2个32位端口配置寄存器CRL(低八位I/0口配置寄存器) 和 CRH ( 高八位I/0口配置寄存器 ),CRL和CRH控制着每个I/O口的模式和输出速率、
附图:
   
   
该寄存器的复位值为0X4444 4444 即配置端口为浮空输入模式,每个I/O口占用四位的配置位,高两位为CNF,设置输入输出模式。低两位为Mode,设置输出速率;
  • 2个32位的数据寄存器IDR和ODR,但都只用了低16位,只能以16位的形式读出。              ODR寄存器可以用来选择各I/O口输入模式下为电阻上拉(相应位置1)或是下拉方式;或者在输出模式下设置各I/O口的输出电平高低;

   
   
  • 1个32位的置位/复位寄存器BSRR;
  • 1个16位的复位寄存器BRR;
  • 1个32位的锁存寄存器LCKR;



下一步要将该GPIO的pin的时钟总线enable一下

上代码:
   
   

   
   
<span style="background-color: rgb(255, 255, 255);"><span style="color:#333333;">#include <stm32f10x_lib.h>	   
#include "system.h"		


//LED端口定义

#define LED0 PAout(4)// PA4

void Gpio_Init(void);		   

int main(void)
{				  
	Rcc_Init(9); //系统时钟设置
	Gpio_Init();		  	 //初始化与LED连接的硬件接口
	while(1)
	{
		LED0=0;
		delay(300000);	   //延时300ms
		LED0=1;
		delay(300000);
	}	 
}


void Gpio_Init(void)
{
	RCC->APB2ENR|=1<<2;    //使能PORTA时钟	   	 
	   	 
	GPIOA->CRL&=0XFFF0FFFF; 
	GPIOA->CRL|=0X00030000;//PA4 推挽输出   	 
        GPIOA->ODR|=1<<4;      //PA4 输出高
	  
}
</span></span>


以上参考网络资料··


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wireless_Link

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值