关于端口的复用和重映射功能的一点分享

2019-07-21 07:43发布

新手发帖,不明白规则,有问题请大家指正。

初学STM32的同学很容易被端口复用和重映射这两个概念搞混(尤其是第一次接触单片机的,比如我),都学到了定时器篇,才反过头来看这两个概念,发现还是有点混淆,于是翻了翻官方的资料,又回过头来看了看原子对这两个概念的解释,发一点分享给大家,希望可以帮到初学者。

主要参考来自于STM32103ZET6数据手册、STM32中文参考手册和原子的STM32F1开发指南(库函数版)4.4端口复用和重映射。

1、首先看数据手册的引脚说明(以PA7为例)
可以看到表头主功能是作为IO口使用,备用功能分成了两个部分,一个是默认(也就是我们现在说的复用功能,其实我觉得翻译成备用功能的默认功能会不会好一点,当然是比较罗嗦了,但是对新手来说不容易混淆),另一个则是重映射。那为什么要划分这两个备用功能?有什么区别呢?需要参考我们的STM32中文参考手册。


2、STM32中文参考手册对于复用功能和重映射功能的定义
(参考STM32中文参考手册8.1.4和8.1.5章节,这里我直接拷贝了)
8.1.4复用功能(AF)
使用默认复用功能前必须对端口位配置寄存器编程。
● 对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部驱动
注意: 也可以通过软件来模拟复用功能输入引脚,这种模拟可以通过对GPIO控制器编程来实现。此时,端口应当被设置为复用功能输出模式。显然,这时相应的引脚不再由外部驱动,而是通过GPIO控制器由软件来驱动。
● 对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。
● 对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。
如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。
如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。
8.1.5 软件重新映射I/O复用功能
为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成(参考AFIO寄存器描述)。这时,复用功能就不再映射到它们的原始引脚上了


这里可以看到重映射功能是将复用功能重新映射到其他引脚,所以可以近似的理解为复用功能为IO口的第二功能,重映射功能为复用功能的第二功能。需要注意的是,当对复用功能的IO口设置了相应的重映射配置,此时复用功能就不再映射到原来的引脚了,所以我们看到原子的例程使用重映射功能的配置步骤一般是:先使能IO口的时钟和复用功能的时钟,接着使能辅助功能时钟,开启重映射,最后要配置重映射后的IO口。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
lvkanger
1楼-- · 2019-07-21 11:52
很不错的帖子,学习了!谢谢楼主的分享!
lijing150123
2楼-- · 2019-07-21 14:18
lvkanger 发表于 2017-1-24 09:14
很不错的帖子,学习了!谢谢楼主的分享!

新手请多指教
jack_yu
3楼-- · 2019-07-21 16:40
谢谢分亨。收藏了
644374874@qq.co
4楼-- · 2019-07-21 21:36
楼主可以的,很专业的分析
Morgan
5楼-- · 2019-07-22 03:31
 精彩回答 2  元偷偷看……
Morgan
6楼-- · 2019-07-22 03:37
谢楼主分享!

一周热门 更多>