1》中断的过程:
在程序运行过程中:
中断源引发中断
CPU发生现场保护事件
CPU进入中断处理函数
执行完处理函数
CPU发生现场恢复事件
程序继续执行
(现场保护事件和现场恢复事件是CPU自动完成)
2》中断源----引发中断的事件
3》中断嵌套:在中断服务函数运行过程中,有其他的中断源引发中,先去执行其他中断服务函数,再继续执行
4》NVIC:异常控制器
为每个中断源配置两种优先级:(数组越小,优先级越高)
抢占优先级(主优先级):具备抢占功能,高优先级可以抢占低优先级
响应优先级(次优先级):不具备抢占功能,只有当两个同主优先级同时发生时,高优先 级先执行
NVIC为用户提供五种管理中断的方式:
* This parameter can be one of the following values:
* @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority 主优先级
* 4 bits for subpriority 次优先级 0---F
* @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority 主优先级 0---1
* 3 bits for subpriority 次优先级 0---7
* @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority 0---3
* 2 bits for subpriority 0---3
* @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority 0---7
* 1 bits for subpriority 0---1
* @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority 0---F
* 0 bits for subpriority
5》配置中断的步骤:
1》配置中断源
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
2》为中断源配置中断优先级
typedef struct
{
uint8_t NVIC_IRQChannel;//中断通道号----在stm32f10x.h这个头文件中的 typedef enum IRQn 找
uint8_t NVIC_IRQChannelPreemptionPriority; //主优先级
uint8_t NVIC_IRQChannelSubPriority; //次优先级
FunctionalState NVIC_IRQChannelCmd; //使能此通道
} NVIC_InitTypeDef;
NVIC_Init(NVIC_InitTypeDef * NVIC_InitStruct)
3》编写中断服务函数-----放在stm32f10x_it.c中【
void 函数名(在启动文件中已经定义)(void)
{
//具体中断发生后干的事情
}