stm32——端口重映射

什么是端口重映射????????????

每个配置都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好的安排引脚的走向和功能,在stm32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其他的端口。

为了使不同器件封装的外设IO功能数量达到最优,可以把一些复用功能重映射到其他一些引脚上。

STM32中有很多内置外设的输入输出引脚都需要重映射的功能。

 

I/O端口的重映射

重映射技术的需求背景

1.I/O的复用:GPIO和内置外设共用引出管脚

2.I/O的重映射:复用功能(AFIO)从不同的GPIO管脚引出

3.方便PCB的设计,潜在的减少了信号交叉干扰

4.分时复用某些外设,虚拟地增加了端口数目

AFIO重映射的操作步骤

1.使能被重新映射到的I/O端口时钟

2.使能被重新映射的外设时钟

3.使能AFIO功能的时钟

4.进行重映射

 

 

部分重映射&完全重映射

部分重映射:功能外设的部分引脚重新映射,还有一部分的引脚是原来的默认引脚

完全重映射:功能外设的所有引脚都重新映射

引脚重映射的配置过程!!!!!

1.使能GPIO时钟(映射后的时钟)

2.使能功能外设时钟(例如串口1)

3.使能AFIO时钟。重映射必须使能AFIO时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

4.开启重映射

GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);

 

那些情况下需要开启AFIO辅助功能时钟?????

对寄存器AFIO_MAPR\AFIO_EXTICRX\AFIO_EVCR进行读写操作前,应当首先打开AFIO时钟

AFIO_MAPR:配置复用功能重映射

AFIO_EXTICRX:配置外设中断线映射

AFIO_EVCR:配置EVENTOUT事件输出

 

 

(资源来源正点原子)

### STM32 I2C1 使用 PB8 PB9 进行重映射 对于 STM32 设备,在配置 I2C 接口时,有时需要重新映射默认的 GPIO 引脚到其他可用引脚上。当涉及到 I2C1 的 SCL SDA 信号线时,默认情况下这些通常连接至特定的一组引脚;然而,通过修改硬件抽象层 (HAL) 库中的设置可以实现引脚功能的重定向。 为了使 I2C1 使用 PB8(SCL) PB9(SDA),而不是其默认分配给 I2C1 的引脚(PB6 PB7),需执行如下操作: #### 配置 AFIO 寄存器以启用重映射 在初始化阶段之前,应该先确认是否启用了必要的重映射选项。这可以通过访问 `AFIO_MAPR` 或者更新版本中的相应寄存器来完成。具体来说,要激活 I2C1 复用功能并将其指向所需的端口 B 上的第 8 号第 9 号针脚。 ```c // 启用I2C1复用功能并将SCL/SDA指派给PB8/PB9 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET); __HAL_AFIO_REMAP_I2C1_ENABLE(); ``` #### 初始化 I2C 结构体成员变量 接下来定义用于描述通信参数的数据结构,并指定所选的 GPIO 引脚作为 I2C 总线的一部分。这里需要注意的是,尽管 HAL 函数可能只接受两个主要参数——即外设基地址以及模式标志位——但在实际调用前还需要适当调整一些内部属性以便支持自定义引脚布局[^2]。 ```c hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; // 设置传输速率 hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; if (HAL_I2C_Init(&hi2c1) != HAL_OK){ Error_Handler(); } ``` #### 定义 GPIO 模式 最后一步是为选定的引脚设定正确的输入输出特性,确保它们能够正常工作于 I2C 协议之下。此过程涉及将目标引脚配置成开漏推挽输出形式,并赋予合适的上下拉电阻状态。 ```c GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); ``` 上述代码片段展示了如何利用 HAL 库函数对 STM32 微控制器上的 I2C1 实施基于 PB8 PB9 的重映射方案。请注意,具体的 API 名称可能会因使用的固件库版本不同而有所差异。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值