原理图初识之GPIO

来源:互联网 发布:ps切片淘宝上传有缝隙 编辑:程序博客网 时间:2024/04/30 07:46

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)// PA4void Gpio_Init(void);   int main(void){  Rcc_Init(9); //系统时钟设置Gpio_Init();   //初始化与LED连接的硬件接口while(1){LED0=0;delay(300000);   //延时300msLED0=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>


以上参考网络资料··


0 0
原创粉丝点击