button.h
#if !defined(_BUTTON_H_)
#define _BUTTON_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "gpio_api.h"
#include "gpio_irq_api.h"
#include "gpio_irq_ex_api.h"
#include "pwmout_api.h"
#include "sys_api.h"
#include "analogin_api.h"
#ifdef CONFIG_BUTTON_IRQ
static gpio_irq_t button_irq;
#define BUTTON_IRQ_INIT(irq_handler, irq_event) do {\
gpio_irq_init(&button_irq, PA_5, irq_handler, (uint32_t)&button_irq);\
gpio_irq_pull_ctrl(&button_irq, PullDown);\
gpio_irq_set(&button_irq, irq_event, 1);\
} while(0)
#else
static gpio_t button_gpio;
#define BUTTON_INIT() do {\
gpio_init(&button_gpio, PA_5);\
gpio_dir(&button_gpio, PIN_INPUT);\
gpio_mode(&button_gpio, PullDown);\
} while(0)
#define BUTTON_STATE() gpio_read(&button_gpio)
#endif
#ifdef __cplusplus
}
#endif
#endif // _BUTTON_H_
BUTTON_STATE()读取电平,按钮按下为高电平
#include "button.h"
void setup() {
BUTTON_INIT();
}
void loop() {
if(BUTTON_STATE()) {}
else {}
}
中断模式
#define CONFIG_BUTTON_IRQ
#include "button.h"
void gpio_demo_irq_handler(uint32_t id, gpio_irq_event event) {
printf("%s,%ld,%d\r\n", __FUNCTION__, id, event);
}
void setup() {
// BUTTON_INIT();
BUTTON_IRQ_INIT(gpio_demo_irq_handler, IRQ_FALL);
}
void loop() {}