STM32存储结构与时钟系统全解析
1.嵌入式整体存储结构
存储分级:速度从快→慢:寄存器→Cache→片内SRAM→片外SDRAM→片内Flash→片外Flash→eMMC/SD卡
片内flash — 512KB 存放代码
SRAM1 + SRAM2 --112KB + 16KB
CCM RAM – 64KB --内核用 特别频繁使用的数据、算法
块0:代码块
块1:数据块
块2:外设
2.日志是什么?
日志定义:设备运行流水记录(报错、状态、运行信息)
地址:Flash 地址更低,SRAM 地址更高;
功能:Flash 存程序,SRAM 跑程序,不分优劣,缺一不可
3.变量放在哪里
.text—flash
.rodate----flash
.date------flash->运行起来以后会拷贝到sram
.bass------运行时在sram里开辟
.stack-----sram
.heap-----sram
4.volatile防止内存优化,把频繁使用的数据会放到cache里
① 系统上电,CPU从程序存储器(如NOR Flash)的固定地址取出第一条指令。
② 指令和数据被加载到Cache和寄存器中供CPU执行。
③ 运行时的变量和堆栈数据存放在主存储器(如SRAM/SDRAM)中。
④ 如果需要加载一个大型应用程序或访问大量用户数据,系统会从外部扩展存储器(如eMMC)中读取。
日志
5.时钟系统
时钟信号:周期性变化的方波信号
为啥要时钟:计算非常快,上升沿时进行计算,剩下到下一个上升沿时间进行搬运
1cpu指令同步,在这个节拍之下一条条执行,不要乱来
2.通信:确保数据收发同步,共用同一时钟收发叫做同步通信方式
3.定时器:提供时间基准
4.外设控制:时钟是外设工作前提
谁来产生时钟:时钟源
1.晶振(外部)材质是石英晶体(石头)
2.RC振荡电路(内部)
基于功耗要求:stm32采用“多时钟源”+“按需分配”
多时钟源:
HSE:高速外部时钟------8MHZ 8000000
HSI :高速内部时钟
LSE :低速外部
LSI :低速内部 32KHZ
PLL:倍频器(锁相环)放大
CPU一上电先由HSI再由HSE来提供稳定频率
SYSCLK (系统时钟) 可由 HSI、HSE、或 PLL 输出提供
HCLK(AHB 总线时钟) 是 Cortex-M 内核,存储器接口、DMA 等模块的重要时钟
PCLK1(APB1 总线时钟) 连接低速外设
PCLK2(APB2 总线时钟) 连接高速外设
PLL(锁相环) 用于将较低频率的 HSE/HSI 转换为更高的频率
内核定时器:systick
6.系统时钟168MHZ计算
pll输入=hse/pll_m
pll输出=输入pll_n
SYSCLK=输出/pll_p=ppl输入/_m_n/_p
参数 常见合法范围
PLLM 2 ~ 63
PLLN 192 ~ 432
PLLP 2、4、6、8
PLLQ 2 ~ 15
7.寄存器
1.SR锁存器
2.触发器:jk,d,t,sr
3.寄存器:000 低电平输出GND,011高电平,
CPU通过读写外设寄存器,完成外设的配置,控制状态的读取
寄存器,sram,flash---------存储器件
存储器映射 编号----------0X0000 0000 0XFFFFFFFF(4G)----------存储器映射物理地址
嵌入式裸机(Cortex-M/STM32,无 MMU,物理地址直接映射)
RCC外设(一堆寄存器):复位和时钟控制
8.复位:
1.系统复位:
NRST-------复位引脚
看门狗复位
软件复位—NVIC_SystemReset();
低功耗管理复位
2.电源复位:电源上电,掉电,电压异常
!系统复位和电源复位不会清除备份域的东西
3.备份域复位
9.储存器映射
编号----------0X0000 0000 0XFFFFFFFF(4G)----------存储器映射物理地址
嵌入式裸机(Cortex-M/STM32,无 MMU,物理地址直接映射)
存储器加存储器编号
10.寄存器映射
把每个寄存器对应的内存地址起个新名字,然后给里面写每一位需要的数字
先有存储器映射,才有寄存器映射
存储器映射和寄存器映射关系
存储器映射
规定:0x40020000 这片地盘属于 GPIOA
寄存器映射
规定:在 GPIOA 地盘里
+0x00 是 MODER
+0x14 是 ODR
11.GPIO
通用的输入输出口
最小系统:电源,晶振,调试,复位
GPIOA
GPIOB
GPIOC
GPIOD
GPIOE,
每组管理16个引脚,功能一样5*16=80个引脚
GPIOA到GPIOB之间有许多个寄存器,每个寄存器和每个寄存器之间地址相隔4个字节
APB2:城市主干道
GPIOA:路边 1 号大院
GPIOB:路边 2 号大院,大院之间空一段地(0x400)
大院里每个房间 = 寄存器,一间 4 个床位 (4 字节)
找寄存器地址 = 3 步(死记这 3 步)
第 1 步:找 外设基地址(GPIOA 在哪栋楼)
第 2 步:找 外设偏移(从总线到这栋楼的距离)
第 3 步:找 寄存器偏移(进楼后去哪个房间)
更多推荐



所有评论(0)