本文主要是介绍【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); //设置引脚为下拉
}
这篇关于【LTE CAT1】ML302 OpenCPU | GPIO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!