【单片机】详细解析完全重映射和部分重映射

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);
相关推荐
不能跑的代码不是好代码4 小时前
STM32窗口看门狗(WWDG)知识点及标准库使用指南
stm32·单片机·嵌入式硬件
bingquan33334 小时前
在 Ghidra 中分析STM32裸机固件
stm32·单片机·嵌入式硬件
羽获飞4 小时前
从零开始学嵌入式之STM32——11.STM32---USART串行通讯
stm32·单片机·嵌入式硬件
宵时待雨6 小时前
STM32笔记归纳9:定时器
笔记·stm32·单片机·嵌入式硬件
逐步前行6 小时前
STM32_新建工程(寄存器版)
stm32·单片机·嵌入式硬件
bai5459366 小时前
STM32 CubeIDE 通过PWM占空比控制舵机角度
stm32·单片机·嵌入式硬件
松涛和鸣8 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
简单中的复杂8 小时前
【避坑指南】RK3576 Linux SDK 编译:解决 Buildroot 卡死在 host-gcc-final 的终极方案
linux·嵌入式硬件
上海合宙LuatOS9 小时前
LuatOS核心库API——【audio 】
java·网络·单片机·嵌入式硬件·物联网·音视频·硬件工程
Hhh __灏9 小时前
stm32的SRAM内存不足如何分析和优化?堆栈空间如何优化?
单片机