STM32F103ZET6 — 端口Remap

发布者:WhisperingWind最新更新时间:2018-08-14 来源: eefocus关键字:STM32F103ZET6  端口Remap 手机看文章 扫描二维码
随时随地手机看文章

准备在 STM32F103ZET6 玩高级定时器 TIM1 / TIM8 的时候,突然发现一些端口复用的问题:

TIM1 的管脚如下所示:


USART2 的管脚如下:


而重映射寄存器 AFIO 的默认值是 0x0000 0000

这就代表了上述的 PA9, PA10同时被USART2 和 TIM1 使用了,这让我很是纠结,到底这几个管脚是什么功能,如何进行配置。

在网上找到一些相关的说明,不敢独享,赶紧贴出来先:


为了节省IO资源单片机会在一个IO上复用很多功能,一般的单片机用到 一个功能后就能再用两外复用的功能了,这就体现出了STM32 GPIO的强大功能了,我们用重映射的方法把其中一个外设映射到其他IO脚上,这样就可以充分利用片内资源!

1. 不是使用了 IO 复用,就一定要开启 AFIO 的时钟,这是个误区。

最常用的USART1,如果你的板子上,默认用的就是PA9和PA10这两个IO作为USART1的TX和TX,那么也就是没有重映射,No Remap,这种情况下根本不需要开启AFIO时钟,只要开启USART1的外设时钟就行了。这个实验很简单,自己试试就知道了


2. STM32中,USART2的CTS、RTS、TX、RX和TIM2的CH1~CH4都在PA0~PA3上面,具体要如何选择这两个功能呢?


如果要使用USART2,就开始USART2的外设时钟,如果要使用TIM2,就开启TIM2的外设时钟,如果你同时开启,我也不知道会怎么样,你可以自己试试,我觉得应该是两个都不能用。如果你一定要在PA0~PA3上使用这两个功能,只能是时分复用。

正确的同时使用USART2和TIM2,应该是使用上面提到的AFIO_Remap寄存器,将其中的一个重映射到其他IO上去,当然这样其他IO的本身的复用功能你就不能开启了。


如果你不做Remap,你根本不可能同时在PA0~PA3上同时使用这两个外设,现在你的方案有两种:

一、保留USART2在PA口上,将TIM2完全重映射(Full Remap)到其他IO上,或者,如果你不用RTS和CTS的硬件流控制,PA0(CTS)和PA1(RTS)上对应的CH1和CH2是可以不用重映射的,只需要将Bit9:8改成10,也就是将CH3和CH4部分重映射到PB10和PB11上去,而CH1和CH2继续保留在PA0和PA1上。但这种情况下,PB10和PB11上的I2C2和USART3就不能用了。

二、保留TIM2在PA口,将USART2重映射到PD口上,很明显,当TIM2完全不重映射时,USART2必须的信号线只有Clock不受影响,这种情况下也没有部分映射可言了,必须将USART2完全重映射到PD3~PD7上,同样的,这种情况下FSMC就不能用了。


重映射的配置步骤

1.打开重映射时钟和USART重映射后的I/O口引脚时钟

比如:


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

2.I/O口重映射开启:


比如:


GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

3. 配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.(不同功能的引脚,参考不同的引脚配置方法)

比如:


等等表格,

代码比如:

    // PA9 As TXD

    stGpioInit.GPIO_Pin = GPIO_Pin_9;

    stGpioInit.GPIO_Speed = GPIO_Speed_50MHz;

    stGpioInit.GPIO_Mode = GPIO_Mode_AF_PP; 

    GPIO_Init(GPIOA, &stGpioInit);

   

    // PA10 As RXD

    stGpioInit.GPIO_Pin = GPIO_Pin_10;

    stGpioInit.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOA, &stGpioInit);


关键字:STM32F103ZET6  端口Remap 引用地址:STM32F103ZET6 — 端口Remap

上一篇:STM32F103ZET6 — TIM6/TIM7
下一篇:STM32F103ZET6 时钟(2)—— 代码篇

推荐阅读最新更新时间:2024-03-16 16:11

STM32F103ZET6 启动模式
STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表: BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。 BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家
[单片机]
基于stm32f103zet6的FAT16文件系统学习0(读SD卡扇区)
SD卡已经看了两天了,主要是因为测试出来的卡容量不对,所以一直找原因,最终还是发现了,总比不过是单位上面出现了问题,或许是之前没有接触到SD的缘故吧,所以对其中的一些寄存器很不了解,一切都是重新开始,对照这寄存器手册,理解程序,修改程序。一步步还是总结一下! 首先关于SD卡的协议是有必要了解的,我今天花了一上午的课堂时间来理解这个SD卡的协议,就是基于这个文档的,这个文档很适合入门SD协议的(个人认为)。 http://download.csdn.net/detail/king_bingge/5218183 初识SD之后,就可以开始正式学习SD卡了! 一、要使用SD卡,那么首先肯定得对SD卡进行初始化,那么如何进行初始化呢?(命
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved