STM32 GPIO的配置模式

        每次用到新型号的STM32片子,底层都会重新关注一番,就怕底层驱动,尤其是外设相连的GPIO出现问题,要么通信不通,要么电平不准;

        其实STM32  的GPIO配置就那么几种,但是时间长了,就忘,每次都得CSDN好几个,才能将信将疑的认为,GPIO 配置没问题,别人写的东西很好,但是自己又是一个偏执的脑门,有时候很难理解别人写的东西。于是,还是自己按自己的需求,再整理一番吧,留下记录,以后就看自己的笔记就好了(到时候看不懂自己写的,说明自己的脑子不行,写作水平也烂,哈哈。。。)

STM32各个GPIO口的配置特此记录一下:

GPIO_InitTypeDef GPIO_InitStructure;
 
GPIO_InitStructure.GPIO_Pin                 = PIN;
GPIO_InitStructure.GPIO_Mode             = MODE;
GPIO_InitStructure.GPIO_Speed           = SPEED;
GPIO_InitStruct.Pull                                  = GPIO_PULLUP;
 
GPIO_Init(PORT, &GPIO_InitStructure);
GPIO口主要有两大功能:输出和输入

因为在STM32中有很多端口重映射,GPIO口也经常重映射成各外设的输出口,因此输出中又分为两大类:

  1. 通用输出
  2. 复用功能映射;

这两种里面都包括两种模式:推挽输出和开漏输出。

输入功能则包括了四种模式:模拟输入、浮空输入、下拉输入、上拉输入。

 一、输出
 1.推挽输出(GPIO_Mode_Out_PP)
        推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务:在输出高电平时,P-MOS管导通;低电平时,N-MOS管导通。两个管子轮流导通,一个负责灌电流,一个负责拉电流。这是增加 了驱动能力,是片子内部的电路功能,没有借助外部电路的力量实现的输入输出,但是其驱动能力有限,不能当做功率输出,长距离的通信也不合适。高低电平功率驱动和长距离通信需要借助外部诸如MOS管、三极管等实现驱动加强。

        推挽输出的低电平为0v,高电平为3.3V。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

        串口功能输出引脚一般都配成这种模式;

 2.开漏输出(GPIO_Mode_Out_OD)
        输出低电平时,N-MOS管导通,使输出接地,若控制输出1(无法直接输出高电平),则既不输出高电平,也不输出低电平,为高阻态。正常使用时必须外接上拉电阻。

        低电平,就把自己接地,输出不了高电平,输出高阻态,由外部的上拉电阻或其他电路将IO电平啦上去,才能输出高电平,即高电平是外部电路提供 的,芯片不提供高电平,由外部的电路提供高电平驱动,可以增加驱动能力;推挽输出一般用于输出电平为0V和3.3V的场合,而开漏输出一般用于电平不匹配的场合,如需要输出5V,就需要在外部接一个上拉电阻,电源为5V。

        内外电路一组合,这种模式有点像推挽输出,只不过一个是纯芯片内部电路,一个是高电平需要借助外部力量。本质外在表现是一样的,输出、高电平、低电平。。。。
 

二、输入
1.模拟输入(GPIO_Mode_AIN)
        模拟输入模式关闭了施密特触发器,不接上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送至ADC模块,由ADC采集电压信号。所以使用ADC外设时,必须设置为模拟输入模式。常应用ADC模拟输入,或者低功耗下省电。

2.浮空输入模式(GPIO_Mode_IN_FLOATING)
在芯片内部既没有接上拉,也没有接下拉电阻。浮空输入状态下,IO的电平状态是不确定的,完全

由外部输入决定(输入达到条件就触发),如果在该引脚悬空的情况下,读取该端口的电平是不确

定的。这种模式用于标准的通信协议如I2C、USART的接收端。

3.下拉输入(GPIO_Mode_IPD)
        在默认状态下(GPIO引脚无输入),读取得的GPIO引脚数据为0,低电平。只接受高电平!

4.上拉输入(GPIO_Mode_IPU)
        在默认状态下(GPIO引脚无输入),读取得的GPIO引脚数据为1,高电平。只接受低电平!

复用功能映射,一般配置成这种模式,芯片默认将GPIO的输入输出模式、上下拉拉配置成所需要的模式了,不用特别关心,当然也有需要单独配置的,看手册吧 。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值