一、时钟系统
时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作.外设部件在时钟的驱动下完成各种工作,比如串口数据的发送、A/D转 换、定时器计数等等。
1.STM32时钟系统框图
时钟源:HSI RC,HSE OSC,LSE OSC,LSI RC,PLL。
绿色的是预分频,是指系统时钟先经过固定的分频系数后产生相应频率的时钟,提供给单片机定时器的计时输入。(预分频器对时钟进行预分配,简单来说就是分频,像乘2、除1等等)
2、时钟源
1.STM32有5个时钟源:HSI、HSE、LSI、LSE、PLL。
- HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
- HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz
- LS是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。WDG
- LSE是低速外部时钟,接频率为32768kHz的石英晶体。RTC
- PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2,倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
2.系统时钟SYSCLK可来源于三个时钟源:
- HSI振荡器时钟
- HSE振荡器时钟
- PLL时钟
3.STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。
注意:任何一个外设在使用之前,必须首先使能其相应的时钟。
4.几个重要的时钟:
- SYSCLK(系统时钟): AHB总线时钟
- APB1总线时钟(低速):速度最高36MHz
- APB2总线时钟(高速):速度最高72MHz
- PLL时钟
3、相关寄存器
红色的是经常用的
二、Systick滴答定时器延时函数
1、Systick定时器定义及作用
Systick定时器就是系统滴答定时器,一个24位的倒计数定时器,计到0时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。
SysTick定时器被捆绑在NVIC中,用于产生 SYSTICK异常(异常号:15)。 Systick中断的优先级也可以设置。
2、相关寄存器
有4个Systick寄存器
- CTRL :SysTick控制和状态寄存器
- LOAD :SysTick自动重装载除值寄存器
- VAL :SysTick当前值寄存器
- CALIB :SysTick校准值寄存器
CTRL寄存器
LOAD,VAL寄存器
5、相关库函数
固件库中的Systick相关函数:
SysTick_CLKSourceConfig()//Systick时钟源选择 misc.c文件中
SysTick Config(uint32tticks)//初始化systick,时钟为HCLK,并开启中断
Systick中断服务函数:
void SysTick Handler(void);
6、SysTick_CLKSourceConfig函数
7、实现延时的模板