一. 嵌入式的存储系统
1.用来记忆:
程序,数据,设备状态
2.作用:
(1)存储程序代码
(2)存储运行时的数据:全局,局部,栈,堆
(3)数据持久化:W25Q64(flash)--文件系统--
3.分类:
dram动态,sram静态
RAM
| DRAM | SRAM | |
| 速度 | 慢 | 快 |
| 成本 | 较低 | 较高 |
| 集成程度 | 较高 | 较低 |
Flash
(掉电不易失,但是有读写寿命)
| Nor flash | NAND flash | |
| 是否支持随机访问 | 支持 | 不支持 |
| 能否运行代码 | 可以 | 不可以 |
flash怎么操作:先擦除为(1),再写入
4.STM32F407 内存的划分
ARAM 192KB
FLASH 512KB
SRAM1 + SRAM2 = 112KB + 16KB 用作栈,堆,全局变量,局部变量
CCM RAM:
64KB 与CPU直连,一般放高频访问数据,一般放算法
对CCM RAM访问:__attribute__((section(".ccmram")))
5.变量放在哪里:
物理地址
.text 代码段flash
.rodata 只读数据flash
.data 初始化数据flash--->SRAM
.bss 未初始化(或为0)不存flash,在代码编译完,会在SRAM里清零一片空间给他
.stack 栈SRAM
.heap 堆SRAM
6.嵌入式存储体系和运行逻辑
Cache 高速缓存 voltaile 防止编译器优化(防止把频繁使用的变量放到缓存中,让CPU直接在内存中拿这个变量)
7.寄存器:
是由锁存器和触发器构成的小型存储设备,保存0/1 bit位,能够暂存bit数据的硬件
1位寄存器 -----1bit
32位寄存器 ----32bit
外设的功能体现是通过配置寄存器来完成的,功能越复杂,寄存器越多
8.存储器映射:
片内存储器(SRAM,Flash),片上外设(寄存器),外部设备同一分配到一连续的32位存储空间,让cpu通过访问内存地址的方式直接操作外设寄存器,无需访问内存,访问外设
寄存 -----地址 ↓
给寄存器的地址起别名——寄存器映射
9.板子的划分
stm32————32根地址线,有4g空间
4G空间划分为8块:
块0 代码----flash 起始位置:0x08000000,中断向量表
块1 数据----SRAM 起始位置:0x20000000
块2 寄存器(外设)起始位置:0x40000000,片内外设的寄存器依次放入
块7 内核
二.嵌入式时钟系统
1.时钟系统是什么:
有规律的方波信号
2.作用
CPU:指令同步(保证一些运算器运算)
外设:时钟是外设工作的前提
数据传输:控制传输开关(应答信号)
定时与计数:频率计数
。。。
3.时钟源
“材质”:
1.电路----RC震荡电路(快,但是有漂移现象误差大)
2.晶振----压电感应(慢,但是信号有规律)
不可以一个时钟源同时链接外设与cpu,所以提出↓
“多时钟源+按需分配”解决功耗问题
内部(电路)
HSE快速 4~26MHZ(一般为)------学习的板子为8MHZ ---放大倍频--- cpu稳定工作168MHZ
LSE慢速 32.768KHZ
外部(晶振)
HSI快速 16MHZ
LSI慢速 32KHZ
PLL:锁相环 倍频器
时钟树:(如上图所示)
位带操作:(寄存器开发)位运算
GPIO寄存器 检测输入输出
(我们有GPIOA,GPIOB,GPIOC,GPIOD,GPIOE,16个引脚,GPIOA_Pin_0~GPIOA_Pin_15)
GPIOx_MODER(端口模式寄存器)
是一个32位的寄存器,一bit一个触发器,两两组合
位带操作即配置01,位运算
GPIO 端口输出类型寄存器 (GPIOx_OTYPER)
一个控制一个
位运算