打印
[应用相关]

引脚重映射问题

[复制链接]
8756|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 george3023 于 2010-4-26 17:16 编辑

我在进行引脚重映射的时候发现这样两个问题:
1.引脚被重映射后还能不能作为GPIO使用?
2.引脚被重映射后还能不能作为其他的复用功能使用?
比方说,我设置TIM2_REMAP为10,这样CH1映射到PA0,CH2映射到PA1,CH3映射到PB10,CH4映射到PB11,实际上我用不了4个通道,假设我仅用到CH2、CH3、CH4,那么我可不可以将PA0作为GPIO口使用,甚至我能不能将PA0作为ADC123_IN0使用?
主要是第二个问题比较担心,请各位加以指点,谢谢。

重映射1.JPG (43.02 KB )

重映射1.JPG

重映射2.JPG (74.91 KB )

重映射2.JPG
沙发
香水城| | 2010-4-26 17:35 | 只看该作者
1)不能;
2)不做复用功能的脚可以做GPIO使用,只要不配置为复用输出即可,但不能作为其它复用功能。

使用特权

评论回复
板凳
george3023|  楼主 | 2010-4-26 18:02 | 只看该作者
1)不能;
2)不做复用功能的脚可以做GPIO使用,只要不配置为复用输出即可,但不能作为其它复用功能。
香水城 发表于 2010-4-26 17:35

版主的意思是说初始化TIM2相关寄存器时没有将PA0设置为复用功能,PA0还可以作为GPIO口使用,但是不能在初始化ADC时将PA0作为ADC_IN0使用是吧。
我刚才做了个试验,没有初始化为重映射的复用功能时,GPIO是可以使用的,还想做试验验证下没有初始化为重映射的复用功能时,能不能用作其他的复用功能,表面上看,这个引脚并没有发生冲突。

使用特权

评论回复
地板
香水城| | 2010-4-26 18:09 | 只看该作者
也许我没有说太清楚。

“不做复用功能的脚可以做GPIO使用,只要不配置为复用输出即可,但不能作为其它复用功能。”需要在这个描述之后再加一句话:模拟输入功能不属于复用功能,所以不做复用功能的脚也可以做模拟输入功能使用。

因此,初始化TIM2相关寄存器时没有将PA0设置为复用功能,PA0还可以作为GPIO口使用,也可以在初始化ADC时将PA0作为ADC_IN0使用。

使用特权

评论回复
5
george3023|  楼主 | 2010-4-26 18:41 | 只看该作者
本帖最后由 george3023 于 2010-4-26 19:43 编辑

谢谢版主的讲解,我也找到了些相关文档介绍。

重映射3.JPG (113.76 KB )

重映射3.JPG

重映射5.JPG (140.87 KB )

重映射5.JPG

重映射4.JPG (45.72 KB )

重映射4.JPG

重映射6.JPG (56.3 KB )

重映射6.JPG

使用特权

评论回复
6
george3023|  楼主 | 2010-4-27 09:57 | 只看该作者
本帖最后由 george3023 于 2010-4-27 10:02 编辑

还是觉得ST的资料没有完全说清楚,8.15和8.3节说明外设的复用功能重映射到其他引脚后,外设的复用功能的原始映射将无效,以下图为例,将USART3重映射到PC10、PC11,PC12,那么USART3的原始映射PB10、PB11、PB12、PB13、PB14将无效,这个可以从文档介绍中明确地看出来,但是由于USART3的重映射,是否影响PC12的原始映射功能就没有文档说明,即想将PC12作为USART5_TX是否可行就缺少理论依据,从上面版主的解答中可以看出将PC12作为USART5_TX是不可行的,不知道有什么资料可供参考,还是通过试验得出的结论,不知道ST是否有这方面的应用笔记可供参考。

Snap3.jpg (30.2 KB )

Snap3.jpg

Snap1.jpg (73.03 KB )

Snap1.jpg

Snap2.jpg (114.36 KB )

Snap2.jpg

使用特权

评论回复
7
香水城| | 2010-4-27 12:05 | 只看该作者
还是觉得ST的资料没有完全说清楚,8.15和8.3节说明外设的复用功能重映射到其他引脚后,外设的复用功能的原始映射将无效,以下图为例,将USART3重映射到PC10、PC11,PC12,那么USART3的原始映射PB10、PB11、PB12、PB1 ...
george3023 发表于 2010-4-27 09:57


我认为你提出的问题可以通过简单的推理解决。

如果一个引脚具有多个复用功能,比如来自模块A的信号和来自模块B的信号;但配置这个引脚为复用输出时,则不能同时开启模块A和模块B,否则将会产生冲突;如果使用了重映射功能,相当于把模块C的信号也引到了这个引脚上,自然需要使用相同的规则。

使用特权

评论回复
8
george3023|  楼主 | 2010-4-27 14:19 | 只看该作者
现在就涉及到这样一个问题,开启一起模块(外设)后,是否意味着该模块(外设)涉及到的所有引脚都只能作为该模块(外设)的复用功能而不能作为其他模块(外设)的复用功能,以USART3为例,没有经过重映射时,使能该外设:USART_Cmd(USART3, ENABLE);但只用到其中的PB10和PB11,GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10;//tx
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
               
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
那么PB12、PB13、PB14是否可以作为其他外设的复用功能,eg:SPI2
再说重映射,将USART3重映射到PC10、PC11、PC12后,如果我仅只在初始化USART3时对PC10和PC11进行初始化,那么PC12还能不能作为USART5的TX功能,USART5模块初始化的时候对PC12进行初始化是否有效。
一个外设的信号全部使用当然不存在疑义,就是在外设只使用了部分信号后,没有使用到的信号对应的引脚能不能被其他外设使用的问题。

使用特权

评论回复
9
george3023|  楼主 | 2010-4-27 14:27 | 只看该作者
本帖最后由 george3023 于 2010-4-27 14:30 编辑

如果使能一个外设后只使用到外设的部分信号,而没有使用到的信号(外设初始化时没有进行配置)对应的引脚又不能被其他外设使用,这将会在设计功能时带来诸多限制,希望能得到一个权威的解释。

使用特权

评论回复
10
香水城| | 2010-4-27 15:32 | 只看该作者
以USART3为例,在没有进行重映射时,USART3的信号与引脚的对应关系是:
USART3_TX -> PB10
USART3_RX -> PB11
USART3_CK -> PB12
USART3_CTS -> PB13
USART3_RTS -> PB14

如果使能了USART3模块,但在配置USART3模块时只需要使用TX和RX的功能,可以不使能CK、CTS和RTS的功能,因此对应的引脚(PB12~PB14)当然可以用于其它的复用功能;如果在配置USART3模块时使能了某个功能,比如使能了RTS功能,则PB14不能再用于其它的复用功能。

虽然一个模块有多个输入输出信号线,但多数模块的很多信号线都是需要使能才可以使用,因此对它们对应的外部引脚的使用,并不会产生带来你所说的诸多限制。

使用特权

评论回复
11
香水城| | 2010-4-27 15:35 | 只看该作者
如果USART3经过重映射之后,USART3的信号与引脚的对应关系变为:
USART3_TX -> PC10
USART3_RX -> PC11
USART3_CK -> PC12
USART3_CTS -> PB13
USART3_RTS -> PB14

同理,只要不使能CK、CTS和RTS的功能,你照样可以使用PC12、PB13和PB14的其它复用功能。

使用特权

评论回复
12
george3023|  楼主 | 2010-4-27 17:04 | 只看该作者
11# 香水城
对引脚而言,它只能处于8种状态之一,以PC12为例,如果想用其作为USART5_TX,就得将PC12设置为推挽复用输出,至于是在USART5的初始化里面设置的还是在USART3里面设置的并没有区别,只有在硬件外围电路上确定PC12的功能,软件上无法确定,这就是和TI的GPIO配置的不同之处,另外,在芯片勘误手册上发现不少复用功能的BUG,这些也得小心。

使用特权

评论回复
13
香水城| | 2010-4-27 17:09 | 只看该作者
我在11楼不是说了吗,即使使能了USART3模块,只要不使能USART3_CK这个信号的功能,你照样可以使用PC12的其它复用功能,这里面也包括USART5_TX。

使用特权

评论回复
14
george3023|  楼主 | 2010-4-27 17:41 | 只看该作者
本帖最后由 george3023 于 2010-4-27 17:45 编辑

13# 香水城
关键是,USART3_CK和USART5_TX的配置相同,即都要求PC12为推挽复用输出,软件上根本不能确定PC12的复用功能,我在外围电路将PC12定义为USART5_TX则PC12作为USART5_TX的复用功能,我在外围电路将PC12定义为USART3_CK则PC12作为USART3_CK的复用功能。而TI的DSP则可以在软件上通过寄存器明确引脚的功能,这个正是我不太习惯的地方。

Snap4.jpg (65.96 KB )

Snap4.jpg

使用特权

评论回复
15
香水城| | 2010-4-27 17:58 | 只看该作者
使能USART3的时候,请不要使能USART3_CK的功能!

STM32_USART_CK_Enable.GIF (20.06 KB )

STM32_USART_CK_Enable.GIF

使用特权

评论回复
16
香水城| | 2010-4-28 10:57 | 只看该作者
我又画了一个示意图,希望你能看懂:

STM32_USART3_Remap_Illustration.gif (44.51 KB )

STM32_USART3_Remap_Illustration.gif

使用特权

评论回复
17
george3023|  楼主 | 2010-4-28 11:33 | 只看该作者
谢谢版主的详细讲解,有这个外设内部结构图就好理解多了,不过在芯片参考手册(RM0008 Reference manual, 2010.04 Rev11)上倒是没有发现类似资料,如果知道每个外设的内部结构图在资源分配时就有据可依,也可以明白外设寄存器的设置,希望版主能够提供这方面的资料,谢谢。

使用特权

评论回复
18
香水城| | 2010-4-28 11:47 | 只看该作者
其实参考手册里面的文字描述已经说得很清楚了,只是你没有仔细看。

STM32_USART_CK_HWFlow_Enable.GIF (23.67 KB )

STM32_USART_CK_HWFlow_Enable.GIF

使用特权

评论回复
19
george3023|  楼主 | 2010-4-28 13:58 | 只看该作者
本帖最后由 george3023 于 2010-4-28 14:05 编辑

18# 香水城
谢谢版主指点,还是觉得16楼的模块结构图比较直观,希望版主能够提供相关的原始资料,谢谢。

使用特权

评论回复
20
香水城| | 2010-4-28 14:10 | 只看该作者
这张图是我刚刚根据RM0008中的信息加工整理画出来的,所有的原始资料都在RM0008中,这个帖子中所有贴出的来自RM0008的内容(包括你贴出的和我贴出的部分)就是这张图的背景资料。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

68

帖子

1

粉丝