STM32 UART 重映射

在进行原理图设计的时候发现管脚的分配之间有冲突,需要对管脚进行重映射,在手册中了解到STM32 上有很多I/O口,也有很多的内置外设像:I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的 I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。

第一次这么干感觉心里没底,所以针对USART1在STM32F103RBT6的板子上实现了一把,以下是相关的测试代码:

/*****************************************************************************

//函数名:void Uart1_Init(void)

//功能:串口(USART1)重映射初始化配置函数,由TX PA9~PB6    RX PA10~~PB7

*****************************************************************************/

void Uart1_Init(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);//开启端口B和复用功能时钟

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//使能端口重映射

GPIO_InitTypeDef GPIO_InitStructure;

//uart 的GPIO重映射管脚初始化 PB6 usart1_TX PB7 USART_RX

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;

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_7;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//悬空输入

GPIO_Init(GPIOB,&GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

USART_InitTypeDef USART_InitStructure;

//串口参数配置:9600,8,1,无奇偶校验,无硬流量控制 ,使能发送和接收

USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No ;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(USART1, &USART_InitStructure);

USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//串口接收中断

USART_Cmd(USART1, ENABLE);

}

简要分析重映射步骤为:

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

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  |RC C_APB2Periph_AFIO,ENABLE);

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

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

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_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB, &GPIO_InitStructure);

只需要简单的以上三步就能轻松搞定。

时间: 11-07

STM32 UART 重映射的相关文章

stm32 端口重映射的深入解析

由于项目需要,我需要把usart3的端口PB10 和 PB11 重映射到 PC10 和 PC11 上,根据官方资料,这是部分重映像: 如图,下面首先要开启APIO时钟:  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);  //然后需要设置端口  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  GPIO_InitStructure.GPIO_Mode = G

STM32重映射(PinRemap)的使用,注意!

STM32重映射,内容和细节稍后补充,这里只说几个注意点,花了我一晚上的时间调试终于找到问题所在了... 芯片: STM32f107vct6 晶振: 25M 通过分频器与锁相环,使系统时钟为72M 背景: SPI3的重映射使用 一. 重映射函数原型: void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState) STM32f107vct6不是FPGA,重映射是固定的,无法自行指定,要查表,看看映射到了哪 比如SPI

嵌入式02 STM32 实验01 端口复用和重映射

内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface  串行外设接口).I2C模块(Philips公司开发的一种简单.双向二线制同步串行总线).A/D模块(模数转换器).PWM模块(Pulse Width Modulation  脉冲宽度调制).CAN模块(Controller Area Network  控制器局域网络).EEPROM(Electri

(十)stm32 GPIO口复用,重映射 RCC_APB2Periph_AFIO

什么时候需要用到RCC_APB2Periph_AFIO--复用IO时钟的使用 需要用到外设的重映射功能时才需要使能AFIO的时钟 外部中断(EXTI)中与AFIO有关的寄存器是AFIO-EXTICR1.2.3,它们是用来选择EXTIx外部中断的输入脚之用 举例:重映射USART2 USART2的TX/RX在PA.2/3 PA.2已经被Timer2的channel3使用需要把USART2的TX/RX重映射到PD.5/6库函数的调用 (1)使能被重新映射到的I/O端口时钟 RCC_APB2Perip

STM32管教复用与重映射关系

摘自:http://blog.csdn.net/lincheng15/article/details/51789093 概括一下:复用就是一个引脚有几个功能,1.做普通IO输入输出 2.其他外设的输入输出(比如I2C,TIM,SPI等等),这就是复用. 重映射就是将引脚功能重新定义到其他引脚,例如PA9是USART1-TX默认的管脚,但是现在PA9用做它用了,那可以将USART1-TX重新映射到PB6,当然这种映射不是随意的想映射到哪个脚就哪个脚,芯片内部已经固定了只能映射到固定的地方 MCU复

ARM_串口——printf重映射

来源:http://blog.163.com/qiu_zhi2008/blog/static/6014097720111110710738/ STM32 printf函数重映射 #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE

管脚重映射和复用

1. [转载]STM32的功能引脚重映射和复用功能_meshine_新浪博客  http://blog.sina.com.cn/s/blog_a2ba6cce01010n7r.html 2. 5.10. STM32重映射功能-STM32(初学宝典)神舟IV号开发板 - 商路通   http://www.3566t.com/news/vima/3497220.html

串口、以及引脚重映射实例

1 /*Include---------------------------*/ 2 #include"stm32f10x_lib.h" //包含所有的头文件 3 #include<stdio.h> 4 5 //----------------函数声明-------------------- 6 void Delay_MS(u16 dly); 7 void RCC_Configuration(void); 8 void GPIO_Configuration(void); 9

重映射 与 复用

装载自  http://www.cnblogs.com/jeakon/archive/2012/10/04/2816798.html 下面跟大家说一下STM32单片机的端口重映射,因为是以自己为实例.这里是以USART1的重映射为例.. 因为我要一个TFT_LCD屏的主控板,考虑到FSMC 我选用了STM32F103VCT6 型号的CPU,一不小心串口接到USART1上了.因为在调程序时才发现错了,没得办法,只能通过端口重映射来解决.但是以前没用过端口重映射,只闻其名,未用其身,所以..呵呵 .