我的STM32学习之路(1)---STM32概述(Cortex-M3)
本文仅为笔者入门学习过程中的总结,对于想深入学习stm32的同志不建议阅读。
参考文献:stm32中文参考手册,cortex m3权威指南,stm32f1开发指南(库函数)
前记
大学以来,一直觉得单片机还有C语言很有用,并且对那种技术大佬表示十分的钦佩。我是从大一开始接触单片机,想着去加一些高大上的实验室,但是奈何从高中到大学,不论是学习,生活还是感情,都发生了很多很多变化,脑海里也仅存着接触的芯片型号“stc15f2k60s2”,再无其他。那会儿“年少轻狂”的去放纵,开始了惨不忍睹的堕落生涯,最后终于应了一句不喜欢的话“人终究会变成自己讨厌的模样”。
不过时过境迁,一晃已经到大三暑期了,现在的心态也不再是那时候脆弱的像玻璃一样。迫于需要,得从头开始学习c语言和stm32单片机。故以帖为证,期待这段学习之路可以有始有终吧。
加油!
2018年7月24日,苏州,IECAS
一、STM32概述(Cortex-M3)
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M0,M0+,M3, M4和M7内核,笔者目前要用的型号为stm32f103,内核为cortex-m3,以后有时间再写stm32f407相关文档吧。
对于这款处理器,打算从以下方面介绍。
1.处理器结构
Cortex‐M3 是一个 32 位处理器内核。 内部的数据路径是 32 位的, 寄存器是 32 位的, 存储器接口也是 32 位的。 CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。 这样一来数据访问不再占用指令总线,从而提升了性能。 为实现这个特性, CM3 内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。换句话说,不是因为有两条总线,可寻址空间就变成 8GB 了。
mark相关术语:instruction fetch unit 取指单元
decoder 译码器
trace interface 追踪接口
peripheral 外设
optional 可选择的(接口)
2.寄存器组
CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。
(1)通用目的寄存器 R0-R7
R0‐R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后的初始值是不可预料的。
(2)通用目的寄存器 R8-R12
R8‐R12 也被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们, 32位的指令则不受限制。它们也是 32 位字长,且复位后的初始值是不可预料的。
(3)R13 是堆栈指针,R14是连接寄存器(在调用子程序时存储返回地址),R15是程序计数器(因为 CM3 内部使用了指令流水线,读 PC 时返回的值是当前指令的地址+4。)。
(4)特殊功能寄存器
3.指令集
简单了解汇编语法即可。
4.总线接口
在小容量、中容量和 大容量产品中,主系统由以下部分构成:
● 四个驱动单元:
─ Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
─ 通用DMA1和通用DMA2
● 四个被动单元
─ 内部SRAM
─ 内部闪存存储器
─ FSMC
─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备
图中几个总线的知识:
① ICode 总线:该总线将 M3 内核指令总线和闪存指令接口相连,指令的预取在该总线上面完成。
② DCode 总线:该总线将 M3 内核的 DCode 总线与闪存存储器的数据接口相连接,常量加载和调试访问在该总线上面完成。
③ 系统总线:该总线连接 M3 内核的系统总线到总线矩阵,总线矩阵协调内核和 DMA 间访问。
④ DMA 总线:该总线将 DMA 的 AHB 主控接口与总线矩阵相连,总线矩阵协调 CPU 的DCode 和 DMA 到 SRAM,闪存和外设的访问。
⑤ 总线矩阵:总线矩阵协调内核系统总线和 DMA 主控总线之间的访问仲裁,仲裁利用轮换算法。
⑥ AHB/APB 桥:这两个桥在 AHB 和 2 个 APB 总线间提供同步连接, APB1 操作速度限于36MHz,APB2 操作速度全速。
5.存储器映射
giveup