单片机
返回首页

STM32F429和F103端口重映射

2019-10-25 来源:eefocus

它自己默认每个管脚有自己的复用功能,但是这个管脚你用了,但你想要用它的其他功能,你就可以将这个功能重映射到其他管脚。使用复用功能是要保持一个功能使能,其他功能非使能状态

重映射指的是内部功能转移到别的引脚上去,芯片内部已经固定了只能映射到固定的地方。若使用TIM3重映射到其他引脚上,则先要配置TIM3重映射到该引脚,然后在按该引脚的复用功能配置

F103重映射实例:


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

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);


   //使能对应IO口的时钟,因为是复用功能所以还要使能AFIO时钟


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


                    GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);


3.配制重映射后的引脚: 这里只需配置重映射后的I/O(PB6,PB7),原来的不需要去配置(PA9,PA10).


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


F429重映射实例:

以usart2的TX,RX为例

USART2的TX,RX对应的PIN脚分别为:PD5,PD6


1) 首先,我们要使用IO复用功能外设,必须先打开对应的IO时钟和复用功能外设时钟。


/*使能GPIOD时钟*/  

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);  

USART2在APB1总线上

/*使能USART2时钟*/  

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);  

这里需要说明一下,官方库提供了五个打开GPIO和外设时钟的函数分别为:


[cpp] view plain copy

void  RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph,FunctionalState NewState);  

void  RCC_AHB2PeriphClockCmd(uint32_tRCC_AHB2Periph, FunctionalState NewState);  

void  RCC_AHB3PeriphClockCmd(uint32_tRCC_AHB3Periph, FunctionalState NewState);  

void   RCC_APB1PeriphClockCmd(uint32_tRCC_APB1Periph, FunctionalState NewState);  

void  RCC_APB2PeriphClockCmd(uint32_tRCC_APB2Periph, FunctionalState NewState);  


这五个函数分别用来打开相应的总线下GPIO和外设时钟。比如我们的串口2是挂载在APB1总线之下,所以我们调用对应的APB1总线下外设时钟使能函数RCC_APB1PeriphClockCmd来使能串口2时钟。对于其他外设我们调用相应的函数即可。


2) 其次,我们在GIPOx_MODER寄存器中将所需IO(对于串口2是PD5,PD6)配置为复用功能(ADC和DAC设置为模拟通道)。


3)再次,我们还需要对IO口的其他参数,例如类型,上拉/下拉以及输出速度。


上面两步,在我们库函数中是通过GPIO_Init函数来实现的,参考代码如下:


/*GPIOD5与GPIOD6初始化*/  

GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5 | GPIO_Pin_6;   

GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;//复用功能  

GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//速度50MHz  

GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; //推挽复用输出  

GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //上拉  

GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化PD5,PD6  


4)最后,我们配置GPIOx_AFRL或者GPIOx_AFRH寄存器,将IO连接到所需的AFx。这些步骤对于我们使用库函数来操作的话,是调用的

      

GPIO_PinAFConfig函数来实现的。具体操作代码如下:  

/*PD5连接AF7,复用为USART2_TX */  

GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_USART2);  

/* PD6连接AF7,复用为USART2_RX*/  

GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_USART2);  


F4的重映射是开启该引脚重映射功能,直接将功能重映射的引脚上GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_USART2),无重映射时钟;  F1的重映射需开启重映射时钟和使用GPIO_PinPremapConfig()开启改功能时钟来使能该功能,然后然后再初始化引脚为重映射功能,该引脚会自动链接上它的重映射功能。 问:F29为什么要链接到AF7 答;看mapping,规定了可以重映射到哪个引脚上, 

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章