1、重映射的作用
单片机中的每个引脚通常都有多个功能,不仅仅是作为普通的输入或输出,还可以与某些外设(如定时器、串口、SPI、I2C等)关联。默认情况下,这些外设功能通常固定绑定到特定的GPIO引脚。但是,在某些情况下,默认的引脚配置可能不适合实际电路设计或项目需求,因此需要将外设功能重新映射到其他GPIO引脚,这就是GPIO重映射。
单片机内部有一个重映射控制寄存器或配置寄存器,通过设置该寄存器,可以改变外设功能与GPIO引脚之间的关联。通过特定的寄存器位,开发者可以选择某个外设功能是否重映射,以及重映射到哪个引脚。
2、部分重映射与完全重映射
部分重映射指的是仅对某个外设的部分引脚进行重定向,将外设的某些功能从默认引脚重新映射到其他GPIO引脚上。通常情况下,部分重映射意味着只重定向部分功能引脚,其他功能引脚仍然保持默认设置。
完全重映射是指将整个外设的所有引脚都重新映射到不同的GPIO引脚。这种方式下,外设的所有功能(如TX、RX、时钟引脚等)都将被映射到不同的引脚上,而不是只部分重映射。
其中,REMAP=0表示为默认引脚,REMAP为1(01)和2(01)时代表部分重映射,REMAP为3(11)时表示完全重映射。
3、结合用户手册、数据手册以及代码
这里以定时器的重映射作为演示,下面是用户手册中有关定时器重映射的表格:
我们看一下图中的TIMER1,当没有重映射时(00),定时器的四个通道默认选择的是PA0、PA1、PA2、PA3;
当部分重映射(10)时,CH0和CH1还是选择的默认的PA0、PA1,而CH32与CH3选择了新的引脚,PB10与PB11,在这个时候,我们看一下数据手册中这两个引脚:
当完全重映射(11)时,四个引脚全部选择了默认引脚以外的全部引脚,分别为PA15、PB3、PB10、PB11,我们也可以在数据手册中看一下另外两个引脚:
最后再结合代码看一下,可以看到他们的重映射值的值
4、重映射功能配置代码(以定时器为例)
1. 使能时钟
首先我们需要使能相关的时钟,比如GPIOA的时钟和TIMER1的时钟。
rcu_periph_clock_enable(RCU_GPIOA); // 使能GPIOA时钟
rcu_periph_clock_enable(RCU_AF); // 使能AFIO时钟
rcu_periph_clock_enable(RCU_TIMER1); // 使能TIMER1时钟
2. 配置GPIO引脚
将GPIO引脚(如PA8)配置为复用功能模式(AF,Alternate Function)。
3. 配置TIMER1
初始化TIMER1以产生PWM信号或者用于其他定时功能。
4. 使能部分重映射功能
通过配置寄存器启用部分重映射。
gpio_pin_remap_config(GPIO_TIMER1_PARTIAL_REMAP1, ENABLE);