找回密码
 立即注册
首页 业界区 安全 ARM Cortex-M3/M4初学习(未完待续)

ARM Cortex-M3/M4初学习(未完待续)

都淑贞 2025-6-1 18:28:02
ARM Cortex-M3/M4初学习

0. 架构与核心特性

0.1 指令集架构


  • 基于ARMv7-M架构,支持Thumb-2指令集(混合16/32位指令集)
  • 基于哈佛架构,数据和指令分布存储独立的空间中
0.2 流水线


  • 三级流水线: 取值(Fetch) - 译码(Decode) - 执行(Execute)
  • 这种结构在简化设计和降低功耗的同时,仍然能够提供足够的处理能力。
0.3 总线结构


  • I-bus(Instruction Bus,指令总线):
用于从代码存储器(如 Flash 或 ROM)中读取指令。

  • D-bus(Data Bus,数据总线):
用于从内存(如 SRAM)或外设寄存器中读写数据。

  • S-bus(System Bus,系统总线):
用于访问 内存映射的外设系统控制块(SCB)调试接口

  • DMA:(不一定存在)stm32f1,f4系列均有,一般每个DMA有8个 stream 流,其中f4系列的DMA具有FIFO
1. 寄存器组

1.png

寄存器说明分组R0通用寄存器Low RegistersR1通用寄存器Low RegistersR2通用寄存器Low RegistersR3通用寄存器Low RegistersR4通用寄存器Low RegistersR5通用寄存器Low RegistersR6通用寄存器Low RegistersR7通用寄存器Low RegistersR8通用寄存器High RegistersR9通用寄存器High RegistersR10通用寄存器High RegistersR11通用寄存器High RegistersR12通用寄存器High RegistersR13主堆栈指针 (MSP) ,R13 (PSP) 为进程堆栈指针 (PSP)-R14连接寄存器 (LR)-R15程序计数器 (PC)-1.1 通用寄存器:R0-R12(共13个)


  • 低组寄存器(Low  Registers):
​        R0-R7 为低组寄存器,所有指令都可以访问(共8个)

  • 高组寄存器(High Registers):
​        R8-R12为高组寄存器,只有32位Thumb指令和很少的16位Thumb指令能访问(共5个)
1.2 堆栈指针:SP(R13)

cm3/cm4内核有两个SP,分别是MSP(主堆栈指针)和PSP(进程堆栈指针),共用寄存器地址

  • 主 堆栈指针(MSP):
  • 用于 特权模式(Handler Mode)异常 / 中断处理
  • 由硬件自动切换,例如进入中断服务程序(ISR)时,处理器强制使用 MSP。
  • 裸机默认只使用MSP
  • 进程堆栈指针(PSP):

    • 用于 用户模式(Thread Mode),通常运行应用程序或用户任务。
    • 需手动配置,适用于多任务系统中不同任务的堆栈隔离。
    • 常用于RTOS中

  • 示例:FreeRTOS中是怎么使用MSP和PSP的
    场景使用的堆栈指针说明系统启动MSP默认模式,初始化阶段使用用户任务运行PSP每个任务独立堆栈,由调度器管理中断 / 异常处理MSP保证内核稳定性,隔离任务堆栈任务切换(PendSV)PSP → MSP → PSP保存旧任务 PSP,加载新任务 PSP特权 API 调用PSP(短暂切换)通过 SVC 或直接寄存器操作
1.3 链接寄存器:LR


  • 连接调用子程序(中断or异常or函数)时存储的返回地址
  • 可以用于栈回溯调试
1.4 程序计数器:PC


  • 指向当前程序运行的指令的地址
1.5 程序状态寄存器:xPSR


​        等我有时间学一下
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册