STM32软中断的使用

最近做项目 , 软件工程师 , 让我提供一个软中断程序给他使用 , 看了下相关介绍博客 , 情况都不太一样 , 自己用的是STM32H7系列的芯片 , HAL库下开发 。只能自己去HAL库扒相关的函数看下如何使用 , 思路有了 , 下面介绍使用过程 。
1、初始化软中断 , 定义相关结构体
EXTI_HandleTypeDef EXTI0_HandleStruct;
【STM32软中断的使用】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()
{
//
}




    推荐阅读