大目前的主流芯片都具有重映射的功能,很多刚入坑的小伙伴不太清楚重映射功能,本文章以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
欢迎各位在评论区留言提问交流!!!