在STM32的库函数中 :
外部中断 的 回调函数 通常是通过HAL库或者LL库实现的。
具体步骤:
- 将某个GPIO引脚(eg:GPIOA_PIN_0)配置为外部中断,并且选择触发模式(上升沿,下降沿,双边沿);
- 启用中断代码代码 EXTI0_IRQHandler();这个中断代码一般都是汇编生成好的,系统会查找函数名字并且调用。
#include <iostream>
#include <stdexcept>
#include <string.h>
using namespace std;
/*
* 函数初始化自定义 回调函数
*
* STM32 外部中断 的回调函数通常是通过HAL库或者LL库实现的。
* 1.将某个GPIO引脚(eg:GPIOA_PIN_0)配置为外部中断,并且选择触发模式(上升沿,下降沿,双边沿);
* 2.启用中断代码代码 EXTI0_IRQHandler();这个中断代码一般都是汇编生成好的,系统会查找函数名字并且调用。
*
*/
/*
* callback_init.c(文件1)
* 初始化 驱动函数文件
*/
typedef void (*EXTI0)(void);
static EXTI0 exit0 = 0; // 全局的中断回调函数
// 系统(HAL库)自动生成的中断回调函数
void EXTI0_IRQHandler(void)
{
if (exit0)
{
exit0();
}
}
void xx_dirver_init(EXTI0 exit_callback)
{
// 回调初始化
if (exit_callback)
{
exit0 = exit_callback; //回调函数赋值
}
}
/*
* xx_dirver.c(文件2)
* 驱动初始化回调函数
*/
static void xx_exit_callback(void)
{
// 这个回调函数一般是在项目工程中用户自己定义(自定义回调函数)
cout << "run user code \r\n" << endl;
}
// 入口函数
int main_entry()
{
int a;
xx_dirver_init(xx_exit_callback); // 驱动回调函数初始化
// 模拟中断
while (1)
{
cin >> a;
if (1 == a)
{
EXTI0_IRQHandler();
}
else
{
break;
}
}
return 0;
}
注 : 主要是对项目中的编程技巧的总结;