GPIO学习笔记

此次是一个系列,只要我在学就会不断更新关于32其他功能笔记。

有时间的朋友可以尝试自己写,自己的笔记自己用的顺手。

没有时间自己写的朋友也可以收藏我的看看。

学习心得:我在学习STM32过程中发现整个体系十分庞大,不做笔记很容易前面学后面忘,基本上第一遍可以懂也记得,但是学到后面忘记越多,看说明书回忆又太麻烦,别人的笔记get不到自己的点。认真学32,哪怕听的很明白,一遍也是远远不够的。

STM32F1xx官方资料:《STM32中文参考手册V10》-第8章通用和复用功能IO(GPIO和AFIO )
芯片数据手册。

GPIO

作用:负责采集外部器件的信息或者控制外部器件工作,即输入输出

GPIO基本结构

端口电路

更正:此图TTL肖特基触发器是错误的,按照英文手册上面应该是 施密特触发器 (Schmitt trigger)

施密特触发器在本电路中的作用是脉冲波的整形

施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形。

数字系统中,矩形脉冲在传输中经常发生波形畸变,出现上升沿和下降沿不理想的情况,可用施密特触发器整形后,获得较理想的矩形脉冲。(使数字信号变标准)

GPIO输入模式

浮空输入(数字量)(GPIO_Mode_IN_FLOATING

特征:可读取引脚电平,若引脚悬空,则电平不确定

上拉输入(数字量)(GPIO_Mode_IPU

特征:可读取引脚电平,内部连接上拉电阻,悬空时默认高电平

下拉输入(数字量)(GPIO_Mode_IPD

特征:可读取引脚电平,内部连接下拉电阻,悬空时默认低电平

这两个开关,开上闭下是上拉、开下闭上是下拉,闭上闭下是浮空。

模拟输入(模拟量)(GPIO_Mode_AIN

特征:GPIO无效,引脚直接接入内部ADC

  1. 输出缓冲器被禁止;
  2. 禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置’0’
  3. 弱上拉和下拉电阻被禁止;
  4. 读取输入数据寄存器时数值为’0’

GPIO输出模式

推挽输出(数字量)(GPIO_Mode_Out_OD

特征:可输出引脚电平,高电平接VDD,低电平接VSS

开漏输出(数字量)(GPIO_Mode_Out_OD

特征:可输出引脚电平,高电平为高阻态,低电平接VSS

MOS开关电路,当PMOS导通时候就是推挽输出,PMOS导通输出高电平、NMOS导通输出低电平 

当PMOS不导通时候是开漏输出,PMOS关闭,就只能通过NMOS输出低电平或者选择不输出。

当不输出时,在VDD处直接接5V电源(上图VDD),便可实现5V输出(而非3.3V输出)。

推挽复用功能(数字量)(GPIO_Mode_AF_PP

特征:由片上外设控制,高电平为高阻态,低电平接VSS

开漏复用功能(数字量)(GPIO_Mode_AF_OD

特征:由片上外设控制,高电平接VDD,低电平接VSS

  //开启时钟操作

void XXX_Init(void)
{
  
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    //选择开启GPIOA的时钟
															
	GPIO_InitTypeDef GPIO_InitStructure;
    //定义结构体变量

	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    //配置输入输出模式,八种模式选择

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
    //选择端口,可以同时初始化一个或者多个。

	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //GPIO速度,赋值为50MHz

	GPIO_Init(GPIOB, &GPIO_InitStructure);
   //将赋值后的构体变量传递给GPIO_Init函数
   //函数内部会自动根据结构体的参数配置相应寄存器
   //实现GPIOA的初始化
	
	
}

GPIO复用功能

复用即重新映射I/O功能,将端口的权柄交个片上设备控制。

使用默认复用功能前必须对端口位配置寄存器编程。
  1. 对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部 驱动。(注意: 也可以通过软件来模拟复用功能输入引脚,这种模拟可以通过对GPIO控制器编程来实现。此时,端口应当被设置为复用功能输出模式。显然,这时相应的引脚不再由外部驱动,而是通过GPIO控制器由软件来驱动。)
  2. 对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)
  3. 对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被 配置成浮空输入模式。

GPIO外部中断

所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。

GPIO锁定机制

锁定机制允许冻结 IO 配置。当在一个端口位上执行了锁定 (LOCK) 程序,在下一次复位之前,将
不能再更改端口位的配置。
​​​​​​​

注意

  • 但是当你配置输入模式时候是不能有额外输出的
  • 当你配置输出模式时候是可以同时输入滴(出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
  1. 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
  2. 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。

推荐以及参考博文GPIO输入输出讲解的十分细致

关于HAL库使用GPIO口,可以看一下这篇 HAL库使用GPIO

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值