回调函数用法(之自定义中断回调函数) : STM32库函数为例

在STM32的库函数中 :

        外部中断 回调函数 通常是通过HAL库或者LL库实现的。

具体步骤:

  1. 将某个GPIO引脚(eg:GPIOA_PIN_0)配置为外部中断,并且选择触发模式(上升沿,下降沿,双边沿);
  2. 启用中断代码代码 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;
}

注 : 主要是对项目中的编程技巧的总结;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值