一、配置
1、查看是否有bootloader,如果有,需要对应用程序运行地址进行偏移,0x8000000~0x8020000是我的bootloader。keil设置如下
主程序中也需要偏移
#define FLASH_BASE ((uint32_t)0x08000000)
SCB->VTOR = FLASH_BASE | 0x20000;
2、如果上述都配置好了,查看是否使用了操作系统,以freertos为例,在进行中断初始化之后,需要启动调度器,main函数,和中断初始化代码如下,中断服务函数自己写哈!!!
int main(void)
{
hal_init();//程序运行地址,初始化串口
EXTIX_WK_Init();//中断初始化
//xTaskCreate(Main_task, (int8_t *) "Main", configMINIMAL_STACK_SIZE * 4, NULL, MAIN_TASK_PRIO, NULL);
LOG("app inited.\r\n");
vTaskStartScheduler();/*启动调度器*/
//xPortStartScheduler();
while(1);
}
void EXTIX_WK_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟
/**********EXTIX GPIO INIT***********/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//不上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOEx
//GPIOB.3 中断线以及中断初始化配置 下降沿触发
EXTI_ClearITPendingBit(EXTI_Line9);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,GPIO_PinSource9);
EXTI_InitStructure.EXTI_Line=EXTI_Line9;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键KEY2所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
二、调试
1、通过keil打断点进行调试,查看硬件引脚状态,如下图,我的中断脚是PB9,有高电平输入时打勾,没有的时候不打勾,这里可以说明有上升沿或者下降沿。
2、查看中断线是否配置正确,如下图,引脚是PB8,中断线是line9
3、查看中断是否正常初始化
4、 在中断服务函数打断点,如果程序停下,并且PR9打勾,就说明中断正常进入;如果只有PR9打勾,但程序没停下,那么就说明有中断触发,但无法进入中断服务函数。
三 、问题
请大佬解答一下,为什么需要加调度器函数,才能进入中断服务函数,否则只能有中断触发,无法执行对应的中断服务函数。
小弟感恩不尽,好人一生平安