一、时钟系统
1)HSE时钟
高速外部时钟是由外部时钟源提供,目前几乎所有的STM32单片机的设计都是在外部接一个8MHZ的晶振 ,经过PLL倍频(9倍频)后得到一个72MHZ的系统时钟。我们系统默认就是这个时钟。这个在启动文件可以看到。
2)HSI时钟
HSI时钟信号有内部8Mhz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器段。然而,即使在校准之后它的时钟频率精度仍较差。
3)PLL时钟
内部PLL用来倍频HSI RC 的输出时钟或HSE晶体输出时钟。PLL的设置必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。如果PLL中断在时钟中断寄存器里被运行,当PLL准备就绪时,可产生中断请求。
PLL时钟一般都是对外部的8MHz的时钟信号经过9倍频后,得到72MHZ的时钟频率,这是STM32F1系列允许的最高时钟频率。
4)LSE时钟
LSE晶体是一个32.768kHZ的低速外部晶体或陶瓷谐振器。它为实时时钟*RTC或者其他定时功能提供一个低功耗且精确的时钟源。
LSE是不能驱动系统时钟的。
5)LSI时钟
LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保存运行,为独立看门狗和自动唤醒单元提供时钟。LSI时钟频率大约40Khz(在30khz~60khz之间)
LSI也是不能驱动系统时钟的
二、STM32的中断系统
2.1 中断的概念
在主程序运行过程中,出现了特定事件,使得CPUY暂停当前正在运行的程序,转而去处理这个事件,等这个事件处理完成之后,CPU再回到刚才被打断的位置继续处理,这就是中断。
那个打断CPU执行的特定事件,我们一般称之为中断源。被中断源打断的位置我们称之为断点。处理特定事件的过程,我们称之为执行中断处理程序。正在执行中断程序的时候,这个时候有可能被另外一个中断源给中断,CPU转而去执行另外一个中断源的中断处理程序,这叫中断嵌套。
中断B能否打断中断A,要看他们的优先级,优先级高的可以打断优先级低的,
中断源可以是外部的,也可以是内部的。外部的叫做外部中断源,内部的叫内部中断源(内部的中断有时候也叫异常)
2.2 为什么需要中断
对单片机系统来说,中断至关重要。
比如我们要检测按键是否按下,如果没有中断,则需要循环的方式不断的去检测按键对应的IO口的电平,这是比较耗费CPU的时间的,
2.3 STM32的中断
Cortex-M3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
一般情况下芯片厂商会对Cortex-M3de中断继续裁剪。
STM32 有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级
STM32F103系列70个中断(咱们目前使用的芯片)有10个内核中断和60个可编程的外部中断
中断异常向量表
2.4 STM32的中断体系架构
所有中断都要交给内核Cortex-M3
3种中断来源:
1.内核其他控件(系统滴答定时器,复位,内部中断)
2,片上外设(串口,定时器I2C)
3。外部中断。(AFIO引脚复用选择器),7个引脚同时只能选一个
2.5 NVIC嵌套向量中断控制器
1)NVIC的介绍
NVIC(嵌套向量中断控制器)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理中断。嵌套 向量中断控制器管理着包括内核异常,外部中断等所有中断。由NVIC决定哪个中断的处理程序交给CPU来执行。
每一个外部中断都可以被使能或者静止,并且可以被设置为挂起状态或者清除状态。处理器的中断可以是电平形式的,也可以是脉冲形式的,这个中断控制器就可以处理任何中断源。
16个IO的中断与PVD(电源电压检测),RTC(实时时钟),USB,以太网检测这20个外部中断会通过会通过EXTI来控制,然后交给NVIC。其他中断都是直接交给NVIC来处理。
2)中断优先级
NVIC为了方便管理中断,可以通过软件给每个中断设置优先级。NVIC用4个位来控制优先级,值小的优先级高。把优先级分为2种:抢占优先级和响应优先级。
规则:
1、优先级值越小,优先级越高
/2、 如果不设置优先级,则默认优先级为0.
/3、 先比较抢占优先级。抢占优先级高的可以打断抢占优先级低的。
/4、若抢占优先级一样。再比较响应优先级。但是响应优先级不会导致中断嵌套。
5、若抢占优先级一样的同时挂起,则优先处理响应抢占优先级高的。
6、若挂起的优先级(抢占和响应)都一样,则查找中断向量表,值小的先响应
NVIC对优先级分了5组,在程序中先对中断进行分组,而且分组只能分一次,