1.0 中断向量表
在starup XXX .s 的启动文件当中
2.0 中断函数
在starup XXX .s 的启动文件当中设计了中断函数【weak】,所以可以在外部再定义一个中断函数(此函数必须与启动文件中的中断向理表定义的函数相同)
3.0 中断设计
3.1 中断分组 :0组到4组 (注意,一个程序只能一次分组,否则会则错) 可以设定不同的抢占优先组与向应优先级。
3.2 与c51不同,stm32中断系统更加强大,c51很多能功中断都是确定或写死的,但stm32可以随意设定。
3.3 抢占优先级与响应优先级
3.4 因为STM32 设计有众多级中断,只要把中断设高级,这样就不会被其它中断抢占,在设计较少用屏敝中断寄存器。
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}
//例子:设置系统的抢占优先级分组为组2
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
// 中断处理程序(中断服务程序 ISR)
/*
注意中断处理程序的名称必须与中断向量表中一致。
中断处理程序不是在正常的程序的上下文中执行。
即不是正常的通过函数调用执行,而是通过中断执行。
中断处理程序注意事项:
1. 没有参数
原因:不是通过代码显式调用,无法传递参数
2. 没有返回值
原因:不是通过代码显式调用,无法返回值
3. 不要做浮点运算
原因:浮点运算很耗时,而中断服务程序必须快速完成
4. 不要使用标准输出函数 printf
原因:printf 可能导致休眠,而中断报备程序中不能休眠
*/
可能有几个中断源跳到一个中断处理程序
多 对 1