[STM32F1] 关于GPIO引脚复用的疑问

[复制链接]
3973|10
 楼主| wjiwji_2205 发表于 2016-9-27 11:09 | 显示全部楼层 |阅读模式
初学STM32F103系列单片机,看了参考手册中关于GPIO的部分内容,心中有一个疑问不得其解,希望懂的朋友能帮忙解释一下!我的疑问是:GPIO引脚的外设时钟一旦启用,GPIO引脚就连接到相应的外设引脚上,由于好多引脚是复用的,即可以与多个外设连接,比如PA1引脚可以作为USART2/ADC/TIM5/TIM2外设引脚使用,根据手册中关于使用的描述,在同一时刻只能启用其中一个外设,也就是说在使用USART2时不能同时使用TIM2(如果不进行重映射的话),那么如果同时要使用USART2和TIM2(在PA0~PA3四个引脚上重合)时,该如何?通过搜索,其中有一篇**讲到,有两种解决办法,一、将USART2全部重映射到PD口上,代价是FSMC不能使用;二、TIM2重映射到其他引脚,代价是其他引脚上的其他外设不能使用。我的疑问是,如果必须这样的话,那么如果我启用ADC时钟,由于ADC有16个通道,对应16个引脚,如上面的PA1,那么意味着所有这16引脚上的其他外设(受影响外设有SPI1、USART2、DAC1、DAC2、TIM2、TIM3、TIM5、TIM8,尤其是DAC由于和ADC一样无法重映射,就没有办法一起使用了)均不能使用或选择所谓的分时复用,如此一来,如果不进行重映射的话,那么片上的外设和引脚资源的使用将受到极大的限制,不知道,是我理解的不对,还是这个片子就是这个样子,所以有此一问,还请知道的帮忙解释一下。
另外还有一个小小的问题问下:如果某外设时钟启用,比方说上面的USART2,那么USART2相关的外设(TX,RX,CTS,RTS等)自动的与相应的GPIO引脚连接,这个是怎么实现的,GPIO引脚是被动连接的吗(似乎是的)?
长的帅怪我落 发表于 2016-9-27 11:49 | 显示全部楼层
老实说,这种疑问我也有,但是没深入 研究过,我认为不重映射,鱼和熊掌不可兼得吧
yichunshan 发表于 2016-9-27 12:34 | 显示全部楼层
开启AD时钟,只是AD功能的一个前提,并不意味着AD引脚就使能,更不意味着所有ADC引脚只能作为AD使用。还要对ADC寄存器配置、IO引脚配置,最终才能确定一个AD引脚输入

评论

有道理  发表于 2016-9-27 15:42
icecut 发表于 2016-9-27 14:33 | 显示全部楼层
你可以试试分时复用...改一下配置寄存器.

如果一个功能占用了.那就不能用其他功能了....你的两只眼睛也不能一只看东一只看西是吧?
如果必须,就换 io 多的封装
 楼主| wjiwji_2205 发表于 2016-9-27 15:25 | 显示全部楼层
我用的是STM32F103VET6,除了ADC和DAC外,其他的都还好安排,就是这两个要同时工作,不晓得怎么弄
xmshao 发表于 2016-9-27 15:45 | 显示全部楼层
开启外设 还得配置相应管脚的复用功能才算。

In output mode (MODE[1:0] > 00):
00: General purpose output push-pull
01: General purpose output Open-drain
10: Alternate function output Push-pull
11: Alternate function output Open-drain
 楼主| wjiwji_2205 发表于 2016-9-27 16:12 | 显示全部楼层
这个我知道,问题是不管配置引脚与否,一旦USART2启用,如果不对TIM2进行重映射的话,TIM2是不能同时使用的,当然了,如果仅作为普通GPIO,是没有问题的,只是不能用作其他外设引脚。
考虑一下,如果一个项目中同时用到ADC,DAC,USART1,USART2,TIM2,USB,SDIO,SPI,I2C外设,有些必须一直工作,不能分时复用的情况比如USART1,USART2,USB等,那么规划这些引脚资源都郁闷死了
 楼主| wjiwji_2205 发表于 2016-9-28 08:04 | 显示全部楼层
知道的朋友进来说一下嘛!
逍遥李 发表于 2016-9-28 09:04 | 显示全部楼层
wjiwji_2205 发表于 2016-9-27 16:12
这个我知道,问题是不管配置引脚与否,一旦USART2启用,如果不对TIM2进行重映射的话,TIM2是不能同时使用的 ...

这个应该只能选更多引脚封装了,芯片设计考虑的是通用性,所以复用会很多
xmshao 发表于 2016-9-28 15:12 | 显示全部楼层
疑问是,如果必须这样的话,那么如果我启用ADC时钟,由于ADC有16个通道,对应16个引脚,如上面的PA1,那么意味着所有这16引脚上的其他外设(受影响外设有SPI1、USART2、DAC1、DAC2、TIM2、TIM3、TIM5、TIM8,尤其是DAC由于和ADC一样无法重映射,就没有办法一起使用了)
===如果你只用到PA1做ADC,其它引脚完全可以该做什么做什么,跟ADC没矛盾的。

要不你使用STM32CubeMx图形化工具配置下吧,很直观的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部