历史上的今天
返回首页

历史上的今天

今天是:2025年05月13日(星期二)

正在发生

2018年05月13日 | stm32的引脚有两种用途

2018-05-13 来源:eefocus

stm32的引脚有两种用途:GPIO(general purpose io)和AFIO(alternate function io)

对于一些引脚(视芯片而定),这两种用途都没有,如在64脚产品中,OSC_IN/OSC_OUT与作为GPIO端口的PD0/PD1共用一样的引脚,而在100、144引脚产品中,这四个功能各有引脚与之对应,不互相冲突,所以OSC_IN/OSC_OUT既不作GPIO也不作AFIO,当然,这样的引脚不是讨论重点。

1、引脚的配置

不论是作GPIO还是做AFIO,都要对引脚进行配置。在固件库函数中,用GPIO_Init()函数对引脚进行配置,并不是说这个函数带了“GPIO”字样就是要当做GPIO来用,而是把它纳入GPIO的范畴来讨论。

所谓配置,就是引脚上的片上资源连接方式,如上拉电阻、密特触发等等。关于配置的问题,请见http://www.cnblogs.com/king-77024128/articles/1999395.html?1?3。理解了配置,也就能明白配置与模式的区别。

特别得,在下文中将会专门讨论一下输出配置中的推挽与开漏。

2、复用功能

复用功能有两种:没有重映像、重映像(包括部分重映像、完全重映像),使用引脚用作AFIO功能,同样需要对其进行配置。

 

这三句话来自参考手册,但我对第一句和注意有疑问,第三节讲。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。输入配置则与GPIO没有区别。

为什么输出模式有专门的复用模式而输入则没有呢。因为输出是由芯片内部电路驱动的,必须选择这个驱动来自哪一个外设,是GPIO还是复用此管脚的其他外设,也就是选择该管脚在内部是与哪个外设相连的,不说明这个就会发生信号的错乱。而输入则不同了,输入信号是由芯片外的信号驱动的,虽然该信号进入芯片内部后可能有不同的去向,但不需要对此进行配置,因为不会发生信号的冲突,最坏的情况就是多驱动了个寄存器而已。事实上,当将引脚作为GPIO输入时,相应的AFIO外设是处在关闭的状态,并不会耗电;当引脚作为AFIO的输入时,可能GPIO是读不进来的,这是我猜的,没有验证,能不能读进来无所谓的,不必纠结于此。

若选择了复用,则默认是没有重映像的,可以直接使用外设,不需要再软件做设置。

但若要重映射,则需要简单设置一下,

先要配置重映射后对应的管脚,可参看参考手册或数据手册引脚定义章节,开AFIO时钟,使能重映射。例如重映射USART1,全部代码如下:

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 

  /*对寄存器AFIO_EVCR,AFIO_MAPR和AFIO_EXTICRX进行读写操作前,即重映射和选择外部中断线前,应当首先打开AFIO的时钟*/

 

  /* Configure USART1 Tx (PA.09) as alternate function push-pull */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

    

  /* Configure USART1 Rx (PA.10) as input floating */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

这就完成了IO口的配置和重映射,下边再配置相关的外设(USART1)就可以使用了。

外部中断线也是可以映射的,并且需要开AFIO时钟,不用GPIO_PinRemap函数,用GPIO_EXTILineConfig重映射引脚到中断线。其实与其说是映射,不如说是选择,选择引脚连接到外部中断线。

重映射不是任意的,只能重映射到指定的管脚。

3、关于第二节讲到那个疑问,为甚么不能配置成模拟输入?模拟输入与浮空什么区别?

答案是可以配置成模拟输入,官方3.5版固件库例子和alientek例程都是将ADC输入引脚配置成GPIO_Mode_AIN

那么配置成浮空行么,还能ADC么?

     //例程

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

     //修改

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

实验证明,这两种配置都能实现ADC。那么USART的Tx应配置成GPIO_Mode_IN_FLOATING,如果配置成GPIO_Mode_AIN,还能接受数据么?金牛板实验结果是不能,ST不我欺也。总之:

可以将引脚配置成模拟输入,使用相应的复用功能;

浮空与模拟这两种配置是不同的。

关于第二节里那个“注意“,我也不知道是什么意思。我猜测是这样的:打开某外设,这个外设将某引脚当做输入,我们偏偏把这个引脚配置为GPIO输出,这样可以操作GPIO来”欺骗“这个外设,这种用法应该是很微妙的。

4、推挽与开漏

不仅仅stm32有这种配置,实际上,这两种已经广泛应用在很多场合。

推挽,又叫做推拉,是个很形象的名字,一般是指两个三极管(MOS管)分别受两互补信号(或者一个信号,但是用互补对管)的控制,总是在一个三极管导通的时候另一个截止,这样的电路被称为推挽式(互补式):

这种电路在放大中通常被用作输出级,在STM32中,推挽配置就是这种,如图:

在相应位置1时,P-MOS导,通N-MOS截止,输出电压为VDD;在相应位置0时,N-MOS导通,P-MOS截止,输出电压为VSS,这就是所谓的推挽。是比较简单的。

而所谓的开漏(对三极管而言是开集,一样的原理),则要巧妙一些。所谓开漏电路概念中提到的“漏”就是指MOS FET的漏极。同理,开集电路中的“集”就是指三极管的集电极。开漏电路就是指以MOS FET的漏极为输出的电路。一般的用法是会在漏极外部的电路添加上拉电阻。完整的开漏电路应该由开漏器件和开漏上拉电阻组成。

对于stm32,开漏就是失能了P-MOS,这样,当相应位置1时,引脚实际上是处在了浮空的状态,而通过外接的上拉电阻,将其拉高。

这么做有如下的好处:

1、可以将多个开漏输出的引脚,连接到一条线上。形成“与逻辑”关系。当多个引脚任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。在我的文章“stm32模拟iic——引脚配置、代码”中,还会提到这个问题。
2、 可以利用改变上拉电源的电压,改变传输电平。这样我们就可以用低电平逻辑控制输出高电平逻辑了。想想当初认为stm32输出3.3v电压带不动IRF540,就直接断定要重新选型,是错误的想法,只要将推挽输出变为开漏,再加上上拉到5v的电阻,就能解决这个问题。

顺便一提,上拉电阻的阻值决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小。反之亦然。


推荐阅读

史海拾趣

Alpha Wire公司的发展小趣事

Alpha Wire公司是一家在电子行业中知名的制造商,专注于生产高性能电线、电缆和线束。虽然我无法提供准确的发展故事,但我可以向你介绍一些关于Alpha Wire公司的背景和其在行业中的重要性。

  1. 公司成立:Alpha Wire公司成立于1922年,总部位于美国新泽西州。创始人是一位名叫韦尔纳·布雷德的工程师,他创立了Alpha Wire公司,旨在为不同领域的电子设备提供高质量的电线和电缆。

  2. 技术创新:Alpha Wire公司在其发展历程中一直致力于技术创新和产品质量的提升。公司不断投资于研发,并采用最新的材料和生产工艺,以确保其产品在性能和可靠性方面处于行业领先地位。

  3. 产品线扩展:随着时间的推移,Alpha Wire公司不断扩展其产品线,以满足不断变化的市场需求。除了标准的电线和电缆产品外,公司还开发了各种特种电线和线束,如耐高温、耐化学腐蚀、防火等特性的产品,以满足不同行业和应用的需求。

  4. 全球市场拓展:Alpha Wire公司在其发展过程中不断拓展其市场份额,通过建立全球分销网络和合作伙伴关系,将其产品销往世界各地。公司不仅在北美市场占据重要地位,还在欧洲、亚洲和其他地区建立了业务和生产基地,以更好地服务全球客户。

  5. 质量和可靠性:作为一家具有悠久历史的公司,Alpha Wire始终将质量和可靠性视为其产品的核心竞争力。公司严格遵循国际标准和质量管理体系,对原材料进行严格筛选和检验,并采用先进的生产工艺和严格的质量控制程序,以确保产品的稳定性和一致性。

以上是关于Alpha Wire公司的一些基本信息,虽然我无法提供具体的发展故事,但希望这些信息能够帮助你了解该公司在电子行业中的重要性和影响力。

EDAL公司的发展小趣事

为了进一步巩固市场地位和提升技术实力,EDAL公司开始通过收购和合作的方式拓展业务。公司成功收购了几家在EDA领域具有领先地位的公司,获得了更多的技术专利和市场份额。此外,EDAL公司还与其他科技公司建立了战略合作关系,共同研发新技术、新产品,推动整个EDA行业的发展。

Chenmoun Enterprise Ltd公司的发展小趣事

Chenmoun Enterprise Ltd深知技术创新是企业发展的核心动力。因此,公司每年都会投入大量的资金用于研发新的电子产品和技术。通过不断的技术创新和产品升级,Chenmoun在行业内保持了领先地位,并实现了持续稳健的发展。

Eurosil Electronics Ltd公司的发展小趣事

随着技术的不断成熟,Eurosil开始将产品推向市场。公司凭借优质的产品和卓越的服务,逐渐在电子行业中树立了良好的品牌形象。同时,Eurosil积极拓展国际市场,与多家国际知名企业建立了合作关系,将产品销往全球各地。这一过程中,Eurosil不仅扩大了市场份额,也积累了丰富的国际经验。

Antenna Factor公司的发展小趣事

Antenna Factor公司始终注重产品质量和客户体验。他们建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格的把控。同时,公司还加强了对售后服务的管理和改进,确保客户在使用过程中能够得到及时、有效的支持。这些举措使得Antenna Factor公司的产品质量和品牌形象得到了显著提升。

Agilent Technologies公司的发展小趣事

为了进一步扩大市场份额,Antenna Factor公司积极寻求与各行各业的合作伙伴建立合作关系。他们与多家通信设备制造商、电信运营商以及互联网企业签订了战略合作协议,共同推动无线通信技术的发展和应用。这些合作不仅为公司带来了更多的商业机会,也提升了其在行业中的影响力。

问答坊 | AI 解惑

工程师凭什么创业?

工程师是中国最有智慧的力量,他们创造了中国一个又一个新的产品和新的服务。你看看你的手机,你看看你家里的电器,你看看你身边的所有时髦和不时髦的人,他们都在验证一个现象,中国工业发展迅猛,中国的工程师智慧惊人。一个做了20年研发工程师的 ...…

查看全部问答>

急!!!!!!!!!各位大侠请帮忙,GPRS 发送数据问题

我用wavecom 的gprs功能如可发送数据,指令是什么.我现在AT+CGATT这些指令都是成功的,就是不知道GPRS网络连通以后如何去发送数据.用什么指令去发,比如我要登录wwww.163.com我该用at指令如何操作,或者有相关的文档也可以提供一点,万分感激.…

查看全部问答>

winCE 中如何用C#实现串口通讯

winCE 中如何用C#实现串口通讯 (vs2003中) 请高手给个例子 …

查看全部问答>

求触摸屏驱动

最近要做触摸屏驱动,以前又没接触过,哪位大侠有触摸屏驱动方面的程序或源码给发一个,小弟万分感谢!!!! email:diahou1136@sina.com QQ:35937862 万分感谢万分感谢万分感谢万分感谢!!!!…

查看全部问答>

关于nRF24L01传输不稳定问题

论坛内的大虾们,你们好,小弟我最近在调试nRF24L01,但是有的时候在传输数据的时候,不好使,插拔几次电源,就有可能又恢复正常了。这是为什么啊? 小弟很是迷惑,还望哪位高手赐教....…

查看全部问答>

详解热转印制板法的技术

热转印制板所需要的硬件:1:一台用于产生高精度塑料碳粉阻焊层的打印输出设备,比如一台激光打印机或者一台复印机(复印机的话需要有复印原稿,原稿可以用喷墨打印机打印出来)。2:一个能用的电熨斗。3:一张不干胶贴纸的光滑底衬纸。3:一定量的 ...…

查看全部问答>

stm32野火开发板上做USB通信,用的CDC虚拟串口。

stm32野火开发板上做USB通信,用的CDC虚拟串口。 stm32端将ADC采集的数据通过USB传给电脑,传输速率理论上是12Mbps,上位机是从PC端的串口缓冲区拿数据,用C#编写的上位机将ADC采集的波形还原,也就是画图。 我就不明白,安装的驱动作用是?修改 ...…

查看全部问答>

两STM32通过SPI通信,主机接收中断,大家帮忙

主机发送,从机能中断接收。就是从机发送,主机中断接收,主机能进入中断,但是没接收到数据!!!大家帮帮忙!! 硬件连接: 主机                        & ...…

查看全部问答>

【晚十点群直播】关于FPGA的选型???

FPGA有不同的厂商,,每个厂商有不同的类型,, Xilinx 下面就有很多不同的种类,Altera下面也是,,, 关于FPGA的选型, 门的数量选择多少合适?   什么型号的比较合适,既不浪费太多的资源也不会出现资源不够的情况? (我觉得, ...…

查看全部问答>

UCLinux for stm32f7 discovery

本帖最后由 247153481 于 2015-9-7 17:17 编辑 我找了一下,把uboot UCLinux bsp  适合于stm32f7 网站在下面 http://www.emcraft.com/products/503#software Welcome to        ____ _  _   &n ...…

查看全部问答>