最近做项目,软件工程师,让我提供一个软中断程序给他使用,看了下相关介绍博客,情况都不太一样,自己用的是STM32H7系列的芯片,HAL库下开发。只能自己去HAL库扒相关的函数看下如何使用,思路有了,下面介绍使用过程。
1、初始化软中断,定义相关结构体
EXTI_HandleTypeDef EXTI0_HandleStruct;
EXTI_ConfigTypeDef EXTI0_ConfigStructure;
void bsp_soft_interrupt_init()
{
EXTI0_HandleStruct.PendingCallback = NULL;
EXTI0_HandleStruct.Line = EXTI_LINE_0;
EXTI0_ConfigStructure.GPIOSel = EXTI_GPIOA;
EXTI0_ConfigStructure.Line = EXTI_LINE_0;
EXTI0_ConfigStructure.Mode = EXTI_MODE_INTERRUPT;
EXTI0_ConfigStructure.PendClearSource = EXTI_D3_PENDCLR_SRC_NONE;
EXTI0_ConfigStructure.Trigger = EXTI_TRIGGER_FALLING;
HAL_EXTI_SetConfigLine(&EXTI0_HandleStruct, &EXTI0_ConfigStructure);
HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 2);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
2、包装了一个软中断产生函数,当然直接用HAL_EXTI_GenerateSWI函数也可以
使用时,直接调用该函数,产生软中断
void produce_soft_interrupt()
{
HAL_EXTI_GenerateSWI(&EXTI0_HandleStruct);
}
3、在stm32h7xx_it.c文件中设置中断
extern EXTI_HandleTypeDef EXTI0_HandleStruct;
void EXTI0_IRQHandler()
{
HAL_EXTI_ClearPending(&EXTI0_HandleStruct, 0);
user_soft_interrupt();//用户定义的执行函数
}
4、编写软中断内的用户程序
user_soft_interrupt()
{
//
}