GPIO学习笔记功能框图及寄存器映射

这篇博客介绍了GPIO的基础知识,包括IO口的推挽输出和开漏输出特性,以及GPIO的输出操作如GPIOx_ODR和GPIOx_BSRR寄存器的使用。还提到了输入的GPIOx_IDR寄存器和肖特基触发器的作用。博主强调了阅读手册的重要性,并分享了学习单片机GPIO的体会。

GPIO-general purpose input output
是软件可以控制的引脚 1/0
推挽输出
(12之间为反相器)
IO口推挽输出:高电平推,低电平挽。一对MOS管控制,电流大,效率高25ma。
开漏输出

开漏输出:只能输出低电平。高电平需要外部电路上拉。好处是,如果需要驱动5V元器件。只需要把VDD改成5V就可以。具有“线与”功能,一个为0,都为0。
输入输出
输出:
GPIOx_ODR直接操作。
GPIOx_BSRR (bit set reset register)置位清除寄存器:高16位置1输出为0(清零),低16位置1输出1(置位),都置1 ,置位有效。目前觉得这个玩意就是脱了裤子放屁。可能以后会有用。上下拉有用(补)。
复用功能输出,来自片上外设。如USART_DR数据寄存器。

输入:
GPIOx_IDR输入数据寄存器:等同ODR,当输出寄存器输出时,数据可从输入寄存器看到。可监控。

肖特基触发器:门作用,输入高于2v置1,低于1.2v置0。ADC采集时不经过触发器了,直接模拟输入。同样模拟输出时也不经过MOS管直接输出,这个图上没画出来。

GPIO初始化顺序

  1. 选定GPIO
  2. 配置工作模式(CRL CRH)
  3. 控制输出电平高低(ODR,BRR,BSRR)

*认真看手册,不要偷懒

寄存器映射环节

// 用来存放STM32寄存器映射的代码

// 外设  perirhral

#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  GPIOB_BASE              (APB2PERIPH_BASE + 0x0C00)


#define  RCC_APB2ENR            *(unsigned int*)(RCC_BASE + 0x18) 
//星号是为了把数变成地址,能让计算机访问,有点后悔数据结构没好好学了
	
#define  GPIOB_CRL              *(unsigned int*)(GPIOB_BASE + 0x00)
#define  GPIOB_CRH              *(unsigned int*)(GPIOB_BASE + 0x04)
#define  GPIOB_ODR              *(unsigned int*)(GPIOB_BASE + 0x0C)
// 打开 GPIOB 端口的时钟
	RCC_APB2ENR  |=  ( (1) << 3 );
	
	// 配置IO口为输出 
	GPIOB_CRL &=  ~( (0x0f) << (4*0) ); //先清零,较为严谨
	GPIOB_CRL |=  ( (1) << (4*0) );
	
	// 控制 ODR 寄存器
	GPIOB_ODR &= ~(1<<0);
	//GPIOB_ODR |= (1<<0);

又重新学了一遍,感觉理解又加深了,单片机是个好玩的东西,希望能学好它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值