当前位置: 首页 > article >正文

复用时钟 重映射(Remap)

在GD32微控制器中,**Remap(重映射)**是指通过重新配置某些引脚的功能,将它们从默认功能切换到其他备用功能。例如,某些GPIO引脚可以被配置为SPI、USART、I2C等外设的信号引脚,或者作为普通IO使用。

### **Remap的用途**
1. **解决引脚冲突**:当默认的外设引脚被其他功能占用时,可以通过Remap将外设映射到其他可用的GPIO引脚上。
2. **灵活配置**:根据实际需求,将引脚配置为不同的功能,例如将JTAG引脚重新映射为普通IO。

### **Remap的配置步骤**
1. **使能相关时钟**:
   - 必须使能复用功能(AF)的时钟,这是Remap功能的基础。例如:
     ```c
     rcu_periph_clock_enable(RCU_AF);
     ```
     这行代码用于启用复用功能的时钟。

2. **配置Remap**:
   - 使用`gpio_pin_remap_config`函数配置Remap。例如,将SPI0的引脚重新映射到备用引脚:
     ```c
     gpio_pin_remap_config(GPIO_SPI0_REMAP, ENABLE);
     ```
     这行代码将SPI0的引脚从默认位置切换到备用位置。

3. **配置GPIO引脚**:
   - 在完成Remap后,需要根据新的引脚配置,将GPIO引脚初始化为对应的模式(如复用推挽输出、浮空输入等)。

### **示例**
以下是一个将SPI0引脚重新映射到备用引脚的完整代码示例:
```c
void spi_flash_init(void)
{
    // 使能相关GPIO和AF的时钟
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_AF);

    // 关闭默认的JTAG功能,启用SW-DP
    gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);

    // 将SPI0引脚重新映射到备用引脚
    gpio_pin_remap_config(GPIO_SPI0_REMAP, ENABLE);

    // 配置SPI0的引脚
    gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_5); // SCK和MOSI
    gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_4);        // MISO
    gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);            // CS
}
```
在这个例子中:
- `GPIO_SPI0_REMAP`用于将SPI0的引脚从默认位置切换到备用位置。
- `GPIO_SWJ_SWDPENABLE_REMAP`用于禁用默认的JTAG功能,以便将某些引脚释放为普通IO。

### **总结**
Remap功能允许开发者根据需求重新配置GPIO引脚的功能,以解决引脚冲突或实现更灵活的硬件设计。使用Remap功能时,必须先使能AF时钟,然后通过`gpio_pin_remap_config`函数进行配置。


http://www.kler.cn/a/560464.html

相关文章:

  • YOLO11改进-模块-引入混合结构模块Mix Structure Block 提高多尺度、小目标
  • VMware 与 CentOS 安装指南
  • IP----访问服务器流程
  • centos系统MBR格式转换成gpt格式 (华为云)
  • 算法-图-数据结构(邻接矩阵)-BFS广度优先遍历
  • 爬虫基础入门之爬取豆瓣电影Top250-Re正则的使用
  • 【初阶数据结构】森林里的树影 “堆” 光:堆
  • GB 44496-2024《汽车软件升级通用技术要求》标准解读|标准结构、测试方法、测试内容
  • 高级SQL技术在Python项目中的应用:ORM与深度性能优化
  • 深度学习之图像分类(二)
  • 【备赛】在keil5里面创建新文件的方法+添加lcd驱动
  • Kubernetes资源管理实战:从理论到落地的完整指南
  • 【Redis 原理】通信协议 内存回收
  • 【Java 常用注解学习笔记1】——Java 常用注解全解析:从基础到实战
  • 音视频容器格式
  • Rust 中的引用循环与内存泄漏
  • 分享一个后端说异步导出,前端的实现方法
  • JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能
  • 先进制造aps专题三十 用免费生产排程软件isuperaps进行长期生产计划制定
  • FreiHAND (handposeX-json 格式)数据集-release >> DataBall