初识SYSCFG(System Configuration Controller)寄存器映射

SYSCFG(System Configuration Controller)寄存器映射的详细说明,以 STM32(如 F1/F4/F7 系列)为例。SYSCFG 控制器用于系统级配置,如外部中断映射、存储器重映射等。


SYSCFG 寄存器映射概述

基地址0x4001 3800(适用于 STM32F4/F7,其他系列请查阅对应参考手册)

寄存器名称偏移地址功能描述复位值
SYSCFG_MEMRMP0x00存储器重映射寄存器0x0000 0000
SYSCFG_PMC0x04外设模式配置寄存器0x0000 0000
SYSCFG_EXTICR[4]0x08-0x14外部中断配置寄存器组0x0000 0000
SYSCFG_CMPCR0x20补偿单元控制寄存器0x0000 0000

1. SYSCFG_MEMRMP (0x00) - 存储器重映射寄存器

控制 Flash/SRAM/系统存储器的映射关系。

位域名称功能描述
2:0MEM_MODE存储器映射选择:
000: 主 Flash 映射到 0x0000 0000
001: 系统 Flash 映射到 0x0000 0000
010: 内嵌 SRAM 映射到 0x0000 0000
31:3保留保留(写 0)

代码示例

// 将 SRAM 映射到地址 0x0000 0000(调试用)
SYSCFG->MEMRMP |= SYSCFG_MEMRMP_MEM_MODE_1;  // 设置 MEM_MODE = 0b010

2. SYSCFG_PMC (0x04) - 外设模式配置寄存器

控制特定外设的复用功能。

位域名称功能描述
23MII_RMII_SEL以太网 PHY 接口选择:
0: MII 模式
1: RMII 模式
31:24保留保留(写 0)

代码示例

// 配置以太网为 RMII 模式
SYSCFG->PMC |= SYSCFG_PMC_MII_RMII_SEL;

3. SYSCFG_EXTICR[4] (0x08-0x14) - 外部中断配置寄存器组

配置 EXTI 中断线的 GPIO 源(共 4 个寄存器,每个控制 4 个 EXTI 线)。

寄存器控制 EXTI 线位域
SYSCFG_EXTICR1EXTI0-EXTI3[15:0]
SYSCFG_EXTICR2EXTI4-EXTI7[15:0]
SYSCFG_EXTICR3EXTI8-EXTI11[15:0]
SYSCFG_EXTICR4EXTI12-EXTI15[15:0]

每个 EXTI 线占用 4 位

  • 0000: PAx 引脚
  • 0001: PBx 引脚
  • 0010: PCx 引脚
  • 0101: PFx 引脚

代码示例

// 配置 EXTI0 使用 PA0 引脚
SYSCFG->EXTICR[0] &= ~SYSCFG_EXTICR1_EXTI0; // 清除 EXTI0 设置
SYSCFG->EXTICR[0] |=  SYSCFG_EXTICR1_EXTI0_PA; // 选择 PA0// 配置 EXTI5 使用 PE5 引脚
SYSCFG->EXTICR[1] &= ~SYSCFG_EXTICR2_EXTI5; // 清除 EXTI5 设置
SYSCFG->EXTICR[1] |=  SYSCFG_EXTICR2_EXTI5_PE; // 选择 PE5

4. SYSCFG_CMPCR (0x20) - 补偿单元控制寄存器

控制 I/O 补偿单元(用于提高高频下的信号完整性)。

位域名称功能描述
0CMP_PD补偿单元使能:
1: 使能补偿单元
8READY补偿单元就绪标志(只读)
31:9保留保留(写 0)

代码示例

// 使能 I/O 补偿单元
SYSCFG->CMPCR |= SYSCFG_CMPCR_CMP_PD;// 等待补偿单元就绪
while (!(SYSCFG->CMPCR & SYSCFG_CMPCR_READY));

完整寄存器结构体定义(CMSIS 风格)

typedef struct {__IO uint32_t MEMRMP;         // 0x00: Memory remap register__IO uint32_t PMC;            // 0x04: Peripheral mode configuration__IO uint32_t EXTICR[4];      // 0x08-0x14: External interrupt configuint32_t RESERVED[2];    // 0x18-0x1C: Reserved__IO uint32_t CMPCR;          // 0x20: Compensation cell control
} SYSCFG_TypeDef;#define SYSCFG_BASE    0x40013800U
#define SYSCFG         ((SYSCFG_TypeDef *)SYSCFG_BASE)

关键应用场景

  1. 重映射中断源
    当需要将 EXTI 中断从默认 GPIO 切换到其他 GPIO 时(如 PB0 替代 PA0)。

  2. 启动配置
    通过 MEMRMP 选择从系统存储器启动(用于系统引导加载程序)。

  3. 高速信号优化
    在 >50MHz 的通信接口(如 SDIO、以太网)中使能 CMPCR 补偿单元。

  4. 外设复用
    配置以太网 PHY 接口模式(MII/RMII)。


注意事项

  1. 寄存器访问权限

    • SYSCFG 寄存器通常无需特权访问(非安全场景)
    • 修改前确保相关外设时钟已使能(通过 RCC_APB2ENR 的 SYSCFGEN 位)
  2. 复位影响

    • 复位后所有 EXTI 线默认映射到 PAx 引脚
    • 存储器映射默认为主 Flash(0x0000 0000)
  3. 跨系列差异

    • STM32F1 系列无 CMPCR 寄存器
    • STM32H7 系列有额外寄存器(如 SYSCFG_UR[4])

完整寄存器定义请查阅对应芯片的《参考手册》(如 STM32F4xx Reference Manual RM0090)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92753.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《P3403 跳楼机》

题目背景DJL 为了避免成为一只咸鱼,来找 srwudi 学习压代码的技巧。题目描述Srwudi 的家是一幢 h 层的摩天大楼。由于前来学习的蒟蒻越来越多,srwudi 改造了一个跳楼机,使得访客可以更方便的上楼。经过改造,srwudi 的跳楼机可以采…

【GPT-OSS 全面测评】释放推理、部署和自主掌控的 AI 新纪元

目录 一、背景与意义 二、核心参数对比 三、性能评测(Benchmark) 四、硬件适配与优化 五、安全性与风险 六、部署方式 七、适用场景 八、大型语言模型对比表(2025 年 8 月版) 总结 一、背景与意义 💡 为什么…

医疗健康Agent:诊断辅助与患者管理的AI解决方案

医疗健康Agent:诊断辅助与患者管理的AI解决方案 🌟 Hello,我是摘星! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一个特性都是我放…

python魔法属性__doc__介绍

doc: 魔法属性。类、函数的描述信息。 __doc__在python中类的使用方法: class Person(object):"""人类---类的描述信息""" # 只能使用多行注释,单行注释无效passprint(Person.__doc__)运行结果如图所示:__d…

PostgreSQL 批量COPY导入优化参数配置

💡 场景假设我们进行的是 频繁批量导入、对数据持久性容忍较高 的场景,比如日志表、缓存表、临时数据表等。如果系统崩溃可重导入,那我们就可以牺牲一点写入安全性来换极致性能。⚙️ 参数配置推荐(postgresql.conf)参…

BeanDefinition 与 Bean 生命周期(面试高频考点)

Bean 是 Spring 应用的核心组件,而 BeanDefinition 作为 Bean 的 “元数据描述”,贯穿了 Bean 从定义到销毁的全生命周期。理解 BeanDefinition 的加载注册机制,以及 Bean 的完整生命周期,是掌握 Spring 容器管理逻辑的关键&#…

node.js 学习笔记2 进程/线程、fs

进程和线程 进程:进行中的程序。比如有一段程序,程序已经载入内存了,CPU正在执行这段程序,这时候就会产生一个进程。进程,也可以看做程序的一次执行过程。 在window中打开任务管理器,可以查看计算机中的所…

【线性代数】其他

上一节:【线性代数】线性方程组与矩阵——(3)线性方程组解的结构 总目录:【线性代数】目录 文章目录11. 向量的内积、长度及正交性12. 方阵的特征值与特征向量13. 相似矩阵14. 对称矩阵的对角化15. 二次型及其标准形11. 向量的内积…

Spring Cloud LoadBalancer 实现自定义负载均衡策略(基于服务元数据筛选)

💡 Spring Cloud LoadBalancer 实现自定义负载均衡策略(基于服务元数据筛选) 在微服务架构中,我们常常希望对服务实例进行更精细的路由控制,例如: 灰度发布:不同环境访问不同版本操作系统差异&a…

Javaweb(1)html、css、js

注:图来自黑马 一、HTML(超文本标记语言) HTML 是网页的 “骨架”,负责定义页面的结构和内容,通过标签(tag)描述文本、图片、链接等元素。 1. 基础结构 文档声明:<!DOCTYPE html>(告诉浏览器这是 HTML5 文档)。 根标签:<html> 包裹整个文档,包含 &l…

MQTT:Dashboard数据集成(待补充)

目录一、工作原理二、基本使用三、连接器基本使用一、工作原理 数据集成使用sink和source组件与外部数据系统对接。 sink&#xff1a;用于将消息发送到外部数据系统&#xff0c;例如MySQL、Kafka或Http服务等。source&#xff1a;用于从外部数据系统接收消息&#xff0c;例如…

VisionMoE本地部署的创新设计:从架构演进到高效实现

本地部署VisionMoE的时代需求 在人工智能技术飞速发展的今天&#xff0c;视觉语言模型(Vision-Language Models, VLMs)已成为多模态理解的核心工具。然而&#xff0c;传统的大型视觉语言模型主要依赖云端GPU集群进行部署和推理&#xff0c;这不仅带来了高昂的运营成本&#xf…

机试备考笔记 8/31

2025年8月8日 小结&#xff1a;省流&#xff0c;写了俩道巨简单的&#xff08;被卡好久的传参指针和指针的引用的区别&#xff09;&#xff0c;一题递归&#xff08;意满&#xff09;&#xff1b;这笔记还是0809写的&#xff0c;啧&#xff0c;今天可能不写了&#xff0c;明天也…

java9学习笔记-part2

进程 API在 Java 9 之前&#xff0c;Process API 仍然缺乏对使用本地进程的基本支持&#xff0c;例如获取进程的 PID 和所有者&#xff0c;进程的开始时间&#xff0c;进程使用了多少 CPU 时间&#xff0c;多少本地进程正在运行等。Java 9 向 Process API 添加了一个名为 Proce…

AI智能编程工具汇总

AI智能编程工具汇总 以下是一份关于主流大模型开发工具的综合介绍&#xff0c;涵盖 Gemini CLI、Qwen-Code、Kimi K2 等关键工具的功能特性、安装方式与使用建议。 &#x1f31f; Gemini CLI 开发者&#xff1a;Google DeepMind 简介&#xff1a;命令行工具&#xff0c;用于调…

算法_python_牛客华为机试笔记_01

刷题是必须的&#xff0c;通过刷题以及别人对题目的解析&#xff0c;可以快速理解&#xff0c;提高效率。 00_题库与参考视频 华为机试_在线编程_牛客网 HJ3 明明的随机数_哔哩哔哩_bilibili 这套华为机试是华为笔试面试机考在线练习&#xff0c;共138道题&#xff0c;目前…

Java基础-完成局域网内沟通软件的开发

目录 案例要求&#xff1a; 实现思路&#xff1a; itheima-chat-server包 src com.itheima Constant类&#xff1a; Server类: ServerReaderThread类: itheima-chat-system包 src com.itheima.ui ChatEntryFrame类&#xff1a; ClientChatFrame类: ClientReaderTh…

windows内核研究(内存管理-线性地址的管理)

内存管理线性地址的管理 进程空间的地址划分分区x86 32位Windows空指针赋值区0x00000000 - 0x0000FFFF用户模式区0x00010000 - 0x7FFEFFFF64KB禁入区0x7FFF0000 - 0x7FFFFFFF内核0x80000000 - 0xFFFFFFFF线性地址有4GB&#xff0c;但是并不是所有的地方都能访问&#xff08;这里…

【问题解决】使用patch-package修改node-models中的源码

文章目录一、应用场景二、patch-package 和 postinstallpatch-packagepostinstall三、操作步骤1、使用yarn安装patch-package和postinstall-postinstall2、修改package.json3、修改node-model中源码、保存。4、找到修改文件对应的包名5、使用git将新增的patches文件同步到仓库6…

当配置项只支持传入数字,即无法指定单位为rem,需要rem转px

您好&#xff01;针对您 Vue 3 Element Plus 的技术栈&#xff0c;要优雅且符合大厂规范地解决这个问题&#xff0c;最佳实践是创建一个响应式的 Composition API (组合式函数)。 这个方法完全遵循 Vue 3 的设计哲学&#xff0c;具有高内聚、低耦合、可复用、类型安全&#xf…