现在我可以进入主函数等进行单步仿真等操作,但是不知道应该怎么进入外部中断的函数,请大神指点~
主函数:
#include "stm32f4xx.h"
#include "led.h"
#include "bit_operation.h"
#include "Systick.h"
#include "beep.h"
#include "key.h"
#include "exti.h"
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
My_EXTI_Init();
BEEP_Init();
KEY_Init();
SysTick_Init(168); //系统时钟为168M
RCC_HSE_Config(8,336,2,7);
LED_Init();
while(1)
{
delay_nms(100);
led1=!led1;
}
}
这是我进行的外部中断的设置:
NVIC_InitTypeDef NVIC_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
EXTI_InitStruct.EXTI_Line=EXTI_Line0;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStruct);
最后是对应的中断服务函数:
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0)==1)
{
delay_nms(10);
if(KEY_UP==1)
{
led2=0;
}
}
EXTI_ClearITPendingBit(EXTI_Line0);
}