完全重映射和部分重映射分析(超详细)

          大目前的主流芯片都具有重映射的功能,很多刚入坑的小伙伴不太清楚重映射功能,本文章以STM32F103C8T6为例子,对该功能进行说明。 

          重映射功能的作用芯片的重映射功能是为了最大化利用IO口,减少IO口数量,每一个内置外设有若干个输入输出引脚,对应的IO口是固定不变的,为了让设计师更好走线且使用功能,引入了重映射。设置复用 重映射和调试I/O配置寄存器,实现引脚的重新映射。这时,复用功能不再映射到它 们的原始分配上。REMAP=0表示为默认引脚,REMAP=1表示为开启重映射。

          部分重映射和完全重映射:所谓部分重映射就是部分管脚和默认的是一样的,而部分管脚是重新映射到其他管脚,而完全重 映射就是所有管脚都重新映射到其他管脚。通俗一点讲就是一个IO口有多个管脚,有的IO口是所有的管脚全部连接到一个外设上,有的IO口是一部分管脚接在一个外设上,另一部分管脚接在另一个外设上。

例如:

GPIO中的PB5IO口,默认功能为I2C_SMBAI,重映射的一部分管脚接在TIM_CH2外设上,一部分接在SPI1_MOSI外设上,所以这里的重映射就是指的部分重映射。

例如:

这里的PB10和PB11,默认功能为I2C2和USART的接口,PB10重映射的全部管脚接在TIM_CH3外设上,PB11重映射的全部管脚接在TIM_CH4外设上,这里的重映射就是指的完全重映射。

 

   重映射功能的初始化相关配置:

1.初始化IO口

2.开启AFIO时钟(使用重映射功能必须使能)

3.开启重映射功能对应外设的时钟

4.使能重映射功能

 

下面是实现PB5引脚TIM3_CH2重映射初始化的代码:

GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	//使能定时器3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟 
	
//设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形	GPIOB.5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
	
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5  

欢迎各位在评论区留言提问交流!!!

你可能感兴趣的:(stm32,单片机,gpio,嵌入式,寄存器)