最近做项目 , 软件工程师 , 让我提供一个软中断程序给他使用 , 看了下相关介绍博客 , 情况都不太一样 , 自己用的是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()
{
//
}
推荐阅读
- 软卧和硬卧有什么区别
- 当代懒癌大学生电脑必备软件
- 2022 年的 10 种软件开发趋势
- 气管软化怎么治疗
- 老年人软化血管的药
- 人民的名义红茶,祛湿茶的功效和副作用的软文
- 8个完全免费的软件合集,你总会用到的
- PS&LR用户的福音,强大的RAW文件预处理软件问世
- Linux内核中断之中断初始化
- PS都颤抖啦!全新智能磨皮软件的功能简直强大
