【LTE CAT1】ML302 OpenCPU | GPIO

ML302 共用22个可用的GPIO口,详细定义见 [sdk_root]/inc/cm/cm_gpio.h 文件中的 cm_gpio_id_t 结构体。

typedef enum {
    CM_GPIO_0,//可用
    CM_GPIO_1,//可用
    CM_GPIO_2,//可用
    CM_GPIO_3,//可用
    CM_GPIO_4,//可用
    CM_GPIO_5,//可用
    CM_GPIO_6,
    CM_GPIO_7,
    CM_GPIO_8,
    CM_GPIO_9,//可用
    CM_GPIO_10,
    CM_GPIO_11,//可用
    CM_GPIO_12,//可用
    CM_GPIO_13,
    CM_GPIO_14,//可用
    CM_GPIO_15,//可用
    CM_GPIO_16,
    CM_GPIO_17,//可用
    CM_GPIO_18,
    CM_GPIO_19,//可用
    CM_GPIO_20,//可用
    CM_GPIO_21,//可用
    CM_GPIO_22,//可用
    CM_GPIO_23,//可用
    CM_GPIO_24,//可用
    CM_GPIO_25,//可用
    CM_GPIO_26,//可用
    CM_GPIO_27,//可用
    CM_GPIO_28,//可用
    CM_GPIO_29,
    CM_GPIO_30,
    CM_GPIO_31,
    CM_GPIO_END,
}cm_gpio_id_t;

GPIO初始化配置之前要先填充结构体 cm_gpio_cfg_t :

typedef struct{
    cm_gpio_id_t id; /// GPIO号
    cm_gpio_dir_t dir; // GPIO方向
    unsigned char irq_enable; //中断使能
    unsigned char level_or_edge; // 边沿触发
    unsigned char rising; // 高电平触发
    unsigned char falling; // 低电平触发
    cm_gpio_cb cb; // 中断回调函数
    void * param; // 其他自定义参数
}cm_gpio_cfg_t;

GPIO 中断回调函数定义为:

void gpio_irq_cb(void *param)
{
}

填充好结构体 cm_gpio_cfg_t 后需调用函数 int cm_gpio_init(cm_gpio_cfg_t *cfg); 来初始化GPIO。GPIO的去初始化调用函数 void cm_gpio_deinit(cm_gpio_id_t gpio); 即可。

下面以 CM_GPIO_4 为例演示GPIO的输入、输出以及中断功能。

1. GPIO输出

void gpio_write_test(void)
{
	cm_gpio_cfg_t cfg; // 定义GPIO初始化配置结构体
	cfg.id = CM_GPIO_4; // 设置管脚号
	cfg.dir = CM_GPIO_OUT; // 设置GPIO方向为输出
	cfg.irq_enable = 0; // 禁止GPIO中断
	cm_gpio_init(&cfg); // GPIO设置初始化
	cm_gpio_pull_config(cfg.id, CM_GPIO_PULL_UP); //设置引脚为上拉
	cm_gpio_write(cfg.id,CM_GPIO_HIGH); // 输出高电平
}

2. GPIO输入

int  gpio_write_test(void)
{
	int gpio_val = 0;
	cm_gpio_cfg_t cfg; // 定义GPIO初始化配置结构体
	cfg.id = CM_GPIO_4; // 设置管脚号
	cfg.dir = CM_GPIO_IN; // 设置GPIO方向为输入
	cfg.irq_enable = 0; // 禁止GPIO中断
	cm_gpio_init(&cfg); // GPIO设置初始化
	cm_gpio_pull_config(cfg.id, CM_GPIO_PULL_UP); //设置引脚为下拉
	gpio_val = cm_gpio_read(cfg.id); // 读取管脚输入
	return gpio_val;
}

3. GPIO中断

int test_gpio = 0;
// GPIO 中断回调函数
void gpio_irq_cb(void *param)
{
    cm_printf("[GPIO_IRQ]%s:%d INTERRUPT\n",param, test_gpio);
}

void gpio_irq_test(void)
{
	cm_gpio_cfg_t cfg; // 定义GPIO初始化配置结构体
	cfg.id = CM_GPIO_4; // 设置管脚号
	test_gpio = cfg.id;
	cfg.dir = CM_GPIO_IN; // 设置GPIO方向为输入
	cfg.irq_enable = 1; // 使能GPIO中断
	// 设置触发类型
	cfg.level_or_edge = 0;
	cfg.rising = 1;
	cfg.falling = 1;
    cfg.cb= gpio_irq_cb; // 调用中断回调函数
    cfg.param = "GPIO"; // 其他自定义参数
	cm_gpio_init(&cfg); // GPIO设置初始化
	cm_gpio_pull_config(cfg.id, CM_GPIO_PULL_UP); //设置引脚为下拉
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽墨志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值