对于单片机而言,gpio引脚配置是最基本的,也是最重要的,因为所有的(信号)输入和(控制)输出都是通过这些配置起作用的。这里就不得不提到单片机的复用功能af(alternate function),这篇文章我们说一说复用功能。
stm32fxx系列单片机的gpio可以配置为浮空输入(input floating)、上拉输入(input pull-up)、下拉输入(input pull-down)、模拟输入(analog)、开漏输出(output open-drain)、推挽输出(ouput push-pull)、复用开漏输出(alternate function open-drain)、复用推挽输出(alternate function push-pull)等8种模式。
先说明一下开漏输出和推挽输出的区别。
stm32fxx系列单片机的输出电路由两个mos管,分别是p-mos和n-mos。
在开漏输出模式下,p-mos管不工作,只有n-mos管工作。若输入数据寄存器的值为0,则n-mos导通,io口输出低电平;若输出数据寄存器的值为1,则n-mos截止;由于p-mos不工作,此时io口既不是高电平,也不是低电平,这种状态被称为高阻态。
stm32f1xx io口基本结构
在推挽输出模式下,若输出数据寄存器的值为0,则n-mos导通,p-mos截止,io口输出低电平;若输出数据寄存器的值为1,则n-mos截止,p-mos导通,io口输出高电平。
上面提到了stm32fxx系列单片机还有复用开漏输出和复用推挽输出,它们和上面讲到的(通用)开漏输出和(普通)推挽输出有什么区别?
这就涉及到引脚复用的功能。
使用过单片机的工程师都了解,stm32fxx内部集成了很多的外设控制器,比如usart、spi、can等,这些外设控制器,也需要通过引脚与外设连接。复用功能就是相对于单片机的引脚而言,所谓“复用功能”,是指单片机的引脚既可以作为普通gpio使用,也可以作为内部外设控制的引脚使用。
比如看stm32f103xx 单片机的pa5引脚,如下图:
首先,pa5可以作为普通gpio使用;其次,如果作为外设的引脚,它也可以作为spi1的时钟(spi1_sck)使用、dac的输出通道2(dac_out2)或者作为adc的输入通道5(adc12_in5)。pa5支持三种外设(spi1,dac,adc)在同一时刻只能选择其中一种,选择的方法是开启响应外设的时钟,并使其它外设的时钟保持关闭状态。如果pa5被配置为复用功能,但是没有开启它支持任何外设的时钟,它的输出是不确定的。
复用推挽输出和通用推挽输出在输出时都用到了n-mos和p-mos,其输出电路是相同的,区别在于控制输出的信号来源:普通推挽输出控制mos管的信号来自输出数据寄存器,而复用推挽输出的控制信号来自单片机的内置外设控制器。
复用开漏输出和普通开漏输出是一样的道理。
下面两张图,分别是普通gpio输出的引脚配置图(其输出信号来自输出数据寄存器)和复用功能的引脚配置图(其输出信号来自芯片内置的外设控制器)。
虽然复用模式的控制信号来自内置的外设控制器,但是单片机依然可以读取相应的数据。在复用推挽输出模式下,单片机可以通过输出数据寄存器(output data register)的数据获取上次输出的值,在复用开漏输出模式下,单片机可以通过读取输入数据寄存器(input data register)的值来获取引脚的状态。
引脚的重映射(remap)
在stm32fxx单片机上,为了是不同器件封装的外设io口功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上,目的是为了让工程师更好安排引脚走向和功能,每一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其他的端口。简而言之,就是管脚不够用的条件下,把这个外设功能映射到另外一个管脚去使用。
以串口3为例
上图中,remap对应的io就是可以重映射到的io,default就是该io默认可复用的功能。上图中可以看到,串口3可以重映射到pc10和pc11引脚,也就是说如果pb10,pb11引脚不好用的时候,或者被占用了,就可以用pc10和pc11实现串口3的功能。
映射也分为部分重映射和完全重映射
-部分重映射:功能外设的部分引脚重新映射,还有一部分引脚是原来的默认引脚
-完全重映射:功能外设的所有引脚都重新映射。
引脚重映射配置过程(串口3为例):
使能gpio时钟(重映射后的io);
rcc_apb2periphclockcmd(rcc_apb2periph_gpiob,enable);使能功能外设时钟(例如串口3);
rcc_apb2periphclockcmd(rcc_apb2periph_usart3,enable);使能afio时钟。重映射必须使能afio时钟:
rcc_apb2periphclockcmd(rcc_apb2periph_afio,enable);开启重映射。
** rcc_pinremapconfig(gpio_remap_usart3,enable);**注意以下要点:
1)对于复用的输入功能,配置必须为上拉/下拉或者浮空;
2)对于复用输出功能,配置必须为复用功能输出模式(推挽,开漏)。
对于双向复用功能,必须配置为复用功能输出模式(推挽或者开漏),此时输入驱动器配置为浮空输入模式。
如果将一端口配置成复用输出功能,会将引脚和输入寄存器断开,并和片上外设的输出信号连接,
如果软件将一gpio 口配置为复用输出功能,但外设没有被激活,它的输出将不确定。
要正常使用gpio 复用功能,分三步来配置:
第一步,位寄存器配置;
第二步,开启对应的外设时钟;
第三步,激活该端口。
二、端口重映射
优点:优化电路设计;扩展功能,减少外设芯片资源;
双轮差速底盘三灰度循迹功能的实现
GM7130/7230在汽车电子方面的应用
基于GaAs IPD的K波段滤波器芯片的设计资料分析总结
医药零售数字化转型服务商药极客完成千万种子轮融资
2019年3月印度线上市场智能机品牌销量TOP5
STM32端口复用和端口重映射?什么是端口复用重映射?
靠追踪肌肉识别表情的耳机
苏州将落地推进自动驾驶的规模化商用
小米云服务图片智能转 PDF 功能即将上线
基于ANSYS的流体流动状态分析
360、小米、格力、联想纷纷进军泛在电力物联网!
Linux进程的内存消耗和泄漏详解
如何解决汽车内电磁骚扰的问题
5G建设提速:发展空间更为广阔
豪威科技发布汽车专用集成电路(ASIC)
WIPO公布与苹果AR/VR相关的新专利,可根据会话环境智能转录
一块弯曲的墨水屏?北京DASUNG大上科技发布全球首款25.3英寸曲面墨水屏显示器Paperlike U
安森美半导体扩展图像传感器阵容 包括高端监控的商业及军事应用
苹果供应链神话褪色 国产手机背后的中国力量强势崛起
“韩国年内最大IPO”上市,首日股价翻倍!