- SRAM : static random access memory
时钟 : 高低变化的方波信号
72MHz
时钟树


- 分频器 : 对频率做除法
- 复用器: 从多路信号中选择一路,,作为输入信号
- 锁相环: 对频率做乘法
树根:
两套时钟树
- HSI : high speed internal
全称: high speed internal oscillator 高速内部振荡器 - HSE : high speed external
- LSE : low speed external
- LSI: low speed internal
RCC : reset and clock controller

高速树
低速树
高速时钟源
低速时钟源
内部时钟源,,精度不高,,,如果对精度有要求,需要外接时钟源
AHB : advanced high-speed bus : 高级高速总线
APB1 : advanced peripheral bus 1 : 高级外设总线1
APB2 : advanced peripheral bus 2 : 高级外设总线2

HCLK : 全称 AHB clock : 高级高性能总线时钟,,系统时钟SYSCLK分频得到
PCLK1 : APB1 peripheral clock : APB1外设时钟,,低速外设总线,,,, HCLK分频得到
PCLK2 : APB2 peripheral clock
HSI / HSE : high speed internal/external 振荡时钟
时钟树的初始状态

RCC : reset and clock controller

锁相环: phase locked loop ,,,锁相环,, 相位锁定环路
PLL : 内部会 比较相位,自动调整频率,保持同步
--
HSI: 内部RC振荡器
- 不用外部晶振
- 成本低
- 上电直接用
- 电路简单
- 频率会漂,,, 理论8MHz,,实际7.8MHz
HSE:
- USART串口,, 要求双方波特率一致,,如果时钟不准,双方节奏对不上,,会丢数据,,乱码
USB :
指令预取

instruction prefetch
等待周期 ; wait state
cpu太快了,flash太慢了,, cpu只能傻等,,这个等待时间叫 等待周期
预取缓冲区 : prefetch buffer

定时器
- 高级定时器
- 通用计时器
- 基本定时器



预分频器

周期: 转一圈用多少秒
分辨率: 最小能区分的时间单位 ,,, 普通的机械表,,分辨率就是1s,,,电子表是1ms更新一次,,分辨率就是1ms,,0.001s,0.002s
有的系统,,虽然时钟周期很小,,但是不一定真的能达到那个分辨率,,比如,软件延迟,采样限制,adc精度,滤波都会影响


stm32专门给TIM加了,,自动倍频器
APB总线上的很多外设不需要太高频率,,, APB1可以降速,降低 功耗和总线压力,,,,但是定时器需要高精度,,
比如 PWM,输入捕获,编码器,高频计数,,都需要高频时钟,,所以stm32专门给TIM加了个自动倍频器,,根据APB分频情况自动切换
APB1 时钟 = HCLK / APB1分频器 ,,, 如果分频器为1,, 那么PCLK1 = 72MHz,,, 但是 APB1最大只能36MHz,,,不可能72Mhz,,也就是说,,分频器=1,这个配置本身就是非法的,,所以正常配置必须 除以2


寄存器预加载
影子寄存器 : shadow register
活动寄存器 : active register
解决,,运行过程中修改参数导致定时器混乱
活动寄存器: 真正工作的
影子寄存器 : 先暂存,,等到更新时间 update event 发生时,把影子寄存器复制到活动寄存器
这种缓存的机制,,叫做寄存器的预加载

scaler : 脉冲计数器,, ,