寄存器编程之GPIO

1、什么是GPIO

GPIO是通用的输入输出端口的简介,是由软件可控制的引脚,STM32芯片的GPIO引脚可以和外部设备连接起来,实现和外部的通讯,控制和数据的采集。

2、结构图

保护二极管 

如果连接的外部设备是高于3.3v(VDD)或者是低于0v(VSS)的电压时,保护二极管开始起作用,可以实现对电压的保护功能,高于3.3v时,电流会流向二极管,不会进入到芯片的内部。但是如果电流过大,则会烧坏二极管,进而烧坏芯片

GPIO输入

GPIO输出

推挽输出:(由两个三极管受两路互补的信号控制,总是在一个导通时另一个截止。有:开关效率高、电流大、驱动能力强的优点)当输出1时,P-MOS导通,N-MOS关闭,输出高电平(电流输出到负载,叫灌电流,理解为推)。 当输出0时,P-MOS关闭,N-MOS导通,输出低电平(负载电流流向芯片,叫拉电流,理解为挽)。 

开漏输出:只能输出低电平,只能外接上拉电阻实现输出高电平。具有线与功能,一个为低,全部为低,多用于I2C和SMBUS总线。

3、寄存器映射点亮灯

#ifndef __STM32F10X_H
#define __STM32F10X_H
//外设的相关参数
//三条总线
//基地址
#define PERIPH_BASE          ((unsigned int )0x40000000)
#define APB1PERIPH_BASE      PERIPH_BASE
#define APB2PERIPH_BASE      (PERIPH_BASE+0x10000)
#define AHBPERIPH_BASE       (PERIPH_BASE+0x20000)

#define RCC_BASE       (AHBPERIPH_BASE+0x1000)
#define GPIOE_BASE	   (APB2PERIPH_BASE+0x1800)


#define RCC_APB2ENR    *(unsigned int *)(RCC_BASE+0x18)
#define GPIOE_CRL	   *(unsigned int *)(GPIOE_BASE+0x00)
#define GPIOE_ODR      *(unsigned int *)(GPIOE_BASE+0x0C)

 
#endif
#include "stm32f10x.h"

void delay(unsigned int i)
{
	for(;i>0;i--)
	{
	}
}
int main(void)
{
//	*(unsigned int *)0x40021018 |= (1<<6);
//	
//	*(unsigned int *)0x40011800 &= ~(0x0F<<(5*4));
//	*(unsigned int *)0x40011800 |= (3<<(5*4));
//	
//	while(1)
//	{
//		*(unsigned int *)0x4001180C |= (1<<5);
//		delay(0xFFFFF);
//		*(unsigned int *)0x4001180C &= ~(1<<5);
//		delay(0xFFFFF);
//	}
	
	
	//打开时钟
	RCC_APB2ENR |= (1<<6);
	GPIOE_CRL &=~(0x0F<<(4*5));
	GPIOE_CRL |= (3<<(5*4));
	//GPIOE_ODR |= (1<<5);
	while(1)
	{
		GPIOE_ODR |= (1<<5);
		delay(0xFFFFF);
		GPIOE_ODR &= ~(1<<5);
		delay(0xFFFFF);
		
		
	}
}

void SystemInit(void)   //为了欺骗编译器
{
	
}

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值