注意:中断服务函数在启动文件startup_stm32f10x_hd.s里找
一、如何做中断初始化?
- 首先选择中断分组:调用NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
这个函数有1个参数?如何赋值?
0组、1组、2组、3组、4组,对应的宏NVIC_PriorityGroup_0~NVIC_PriorityGroup_4;
调用函数的格式:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- NVIC初始化(使用哪个中断?这个中断主优先等级、响应等级是什么呢?使能中断,使CPU能够响应这个中断。)
调用void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
NVIC_InitStruct初始化结构体成员:
(1)中断通道 IRQChannel,
(2)中断主优先等级PreemptionPriority,
(3)中断响应等级SubPriority,
(4)使能Cmd
- 四个成员变量如何?
- (1)中断通道 IRQChannel----- stm32f10x.h头文件里面所有中断通道枚举;
- (2)中断主优先等级PreemptionPriority------依据所选的中断分组,选定主优先等级
- 0~2(NVIC_PriorityGroup_2);
- (3)中断响应等级SubPriority------依据所选的中断分组,选定主优先等级0~2(NVIC_PriorityGroup_2);
- (4)使能Cmd-----ENABLE/DISABLE
二、第一个中断类型:
外部中断EXTI EXTI0~EXTI15
外部中断的初始化:比如用EXTI4
- 将EXTI4外部中断映射到对应的端口引脚PA4上:
调用void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
两个参数的宏分别是什么?
端口宏:GPIO_PortSourceGPIOA~GPIO_PortSourceGPIOG;
引脚宏:GPIO_PinSource0~GPIO_PinSource15
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource4);
- EXTI中断线初始化:调用EXTI_Init();
初始化哪些参数:
(1)指定外部中断线EXTI_Line;
(2)外部中断线工作模式mode;
(3)触发的边沿Trigger;
(4)使能中断线Cmd)
4个成员如何赋值:
- 指定外部中断线EXTI_Line----stm32f10x_exti.h头文件中的宏EXTI_Line0~EXTI_Line15;
- 外部中断线工作模式mode----中断工作模式/事件工作模式stm32f10x_exti.h头文件中的宏EXTI_Mode_Interrupt 或者 EXTI_Mode_Event;
- 触发的边沿Trigger----上升沿、下降沿、上升沿和下降沿,对应stm32f10x_exti.h头文件中的宏EXTI_Trigger_Rising、EXTI_Trigger_Falling 、EXTI_Trigger_Rising_Falling;
- 使能中断线Cmd-----ENABLE/DISABLE.
- 中断要做什么事?
中断服务函数编写:
- 所用的中断对应中断服务函数名字什么?
启动文件startup_stm32f10x_hd.s用汇编语言给出所有中断函数的名称。
- 中断服务函数的格式:
(1)先通过中断标志状态判断中断发生?
(2)中断结束之前清除中断标志位。
这个是中断服务函数
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line15) != RESET) //(1)先通过中断标志状态判断中断发生?
{
SPK_TOGGLE; //中断要的事情
EXTI_ClearITPendingBit(EXTI_Line15); //(2)中断结束之前清除中断标志位。
}
}