Last Updated on : 2024-11-20 08:51:43download
| Function name | Description | 
|---|---|
| gpio_raw_init | Configure GPIO pins. | 
| gpio_raw_input_read_status | Read a GPIO pin. | 
| gpio_raw_output_write_status | Write to a GPIO pin. | 
| gpio_output_init | Initialize a GPIO pin as an output. | 
| gpio_button_init | Initialize a GPIO pin as an input. | 
Function prototype
extern void gpio_raw_init(gpio_config_t pin);
Parameter description
| Parameter name | Parameter type | Description | 
|---|---|---|
| pin | gpio_config_t | The values in the gpio_config_t enum. | 
Function prototype
extern uint8_t gpio_raw_input_read_status( GPIO_PORT_T port, GPIO_PIN_T pin);;
Parameter description
| Parameter name | Parameter type | Description | 
|---|---|---|
| port | GPIO_PORT_T | The values in the GPIO_PORT_T enum. | 
| pin | GPIO_PIN_T | The values in the GPIO_PIN_T enum. | 
Function prototype
extern void gpio_raw_output_write_status(  GPIO_PORT_T port, GPIO_PIN_T pin, uint8_t value);
Parameter description
| Parameter name | Parameter type | Description | 
|---|---|---|
| port | GPIO_PORT_T | The values in the GPIO_PORT_T enum. | 
| pin | GPIO_PIN_T | The values in the GPIO_PIN_T enum. | 
| pin | uint8_t | 
  | 
Function prototype
void gpio_output_init(gpio_config_t *config, uint8_t sum);
Parameter description
| Parameter name | Parameter type | Description | 
|---|---|---|
| *config | gpio_config_t | GPIO configuration. | 
| sum | uint8 | The number of configured GPIO pins. | 
Function prototype
void gpio_button_init(gpio_config_t *config, uint8_t sum, uint32_t jitter_time, key_func_t key_func);
Parameter description
| Parameter name | Parameter type | Description | 
|---|---|---|
| *config | gpio_config_t | GPIO configuration. | 
| sum | uint8 | The number of configured GPIO pins. | 
| jitter_time | uint32_t | Debounce time for buttons. | 
| key_func | key_func_t | Key press interrupt callback. | 
Struct prototype
// GPIO port definition.
typedef enum {
    PORT_A = 0x00,
    PORT_B,
    PORT_C,
    PORT_D,
    PORT_E,
    PORT_F,
    PORT_H,
    PORT_I,
    PORT_J,
    PORT_K
}GPIO_PORT_T;
Struct prototype
// GPIO pin definition.
typedef enum {
    PIN_0 = 0x00,
    PIN_1,
    PIN_2,
    PIN_3,
    PIN_4,
    PIN_5,
    PIN_6,
    PIN_7,
    PIN_8,
    PIN_9,
    PIN_10,
    PIN_11,
    PIN_12,
    PIN_13,
    PIN_14,
    PIN_15,
}GPIO_PIN_T;
Struct prototype
// GPIO mode definition.
typedef enum {
    GPIO_MODE_INPUT_HIGH_IMPEDANCE = 0,
    GPIO_MODE_INPUT_PULL,
    GPIO_MODE_OUTPUT_PP,
    GPIO_MODE_OUTPUT_OD,
    GPIO_MODE_OUTPUT_OD_PULL_UP,
    GPIO_MODE_OUTPUT_OD_PULL_DOWN,
}GPIO_MODE_T;
Struct prototype
// GPIO configuration.
typedef struct {
    GPIO_PORT_T port;//
    GPIO_PIN_T pin;//
    GPIO_MODE_T mode;// Input or output mode.
    GPIO_DOUT_T out;// Output level.
    GPIO_LEVEL_T drive_flag; // Active high or low.
} gpio_config_t;
The hal_gpio.h file details the API definitions. You can refer to the following code snippets for some examples of how to configure the GPIOs.
#define LED_1_PORT  PORT_A
#define LED_1_PIN   PIN_4
#define LED_1_MODE  GPIO_MODE_OUTPUT_PP /// Configure the GPIO as output.
#define LED_1_DOUT  GPIO_DOUT_LOW       /// Output the default level on the first initialization.
#define LED_1_DRIVE GPIO_DOUT_HIGH      /// Active high, used for advanced configuration.
#define KEY_1_PORT  PORT_A
#define KEY_1_PIN   PIN_3
#define KEY_1_MODE  GPIO_MODE_INPUT_PULL /// Input pull-up or pull-down, depending on `KEY_1_DOUT`.
#define KEY_1_DOUT  GPIO_DOUT_HIGH       /// Input pull-up
#define KEY_1_DRIVE GPIO_LEVEL_LOW       /// Active low, used for advanced configuration.
static void __gpio_int_func_t(GPIO_PORT_T port, GPIO_PIN_T pin)
{
    uint8_t vol_level = gpio_raw_input_read_status(KEY_1_PORT, KEY_1_PIN); /// Read the input signal.
}
static void gpio_demo(void)
{
    const gpio_config_t gpio_ouput_config = {
        LED_1_PORT, LED_1_PIN, LED_1_MODE, LED_1_DOUT, LED_1_DRIVE,
    };  
        const gpio_config_t gpio_input_config = {
        KEY_1_PORT, KEY_1_PIN, KEY_1_MODE, KEY_1_DOUT, KEY_1_DRIVE,
    };
    gpio_raw_init(gpio_ouput_config);       /// Configure PA4 as output, defaulting to output low.
    gpio_raw_output_write_status(LED_1_PORT, LED_1_PIN, 1); /// Change the output level to high level.
    gpio_raw_init(gpio_inputput_config);    /// Configure PA3 as input, input pull-up, and non-interrupt mode.
    gpio_int_register(&gpio_inputput_config, __gpio_int_func_t); /// Configure PA3 as input, input pull-up, and falling edge interrupt mode.
}
#define LED_1_PORT  PORT_A
#define LED_1_PIN   PIN_4
#define LED_1_MODE  GPIO_MODE_OUTPUT_PP /// Configure the GPIO as output.
#define LED_1_DOUT  GPIO_DOUT_LOW       /// Output the default level on the first initialization.
#define LED_1_DRIVE GPIO_DOUT_HIGH      /// Active high, used for advanced configuration.
#define LED_2_PORT  PORT_D
#define LED_2_PIN   PIN_15
#define LED_2_MODE  GPIO_MODE_OUTPUT_PP /// Configure the GPIO as output.
#define LED_2_DOUT  GPIO_DOUT_LOW       /// Output the default level on the first initialization.
#define LED_2_DRIVE GPIO_DOUT_HIGH      /// Active high, used for advanced configuration.
#define KEY_1_PORT  PORT_A
#define KEY_1_PIN   PIN_3
#define KEY_1_MODE  GPIO_MODE_INPUT_PULL /// Input pull-up or pull-down, depending on `KEY_1_DOUT`.
#define KEY_1_DOUT  GPIO_DOUT_HIGH       /// Input pull-up
#define KEY_1_DRIVE GPIO_LEVEL_LOW       /// Active low, used for advanced configuration.
#define KEY_2_PORT  PORT_A
#define KEY_2_PIN   PIN_5
#define KEY_2_MODE  GPIO_MODE_INPUT_PULL /// Input pull-up or pull-down, depending on `KEY_1_DOUT`.
#define KEY_2_DOUT  GPIO_DOUT_HIGH       ///  Input pull-up
#define KEY_2_DRIVE GPIO_LEVEL_LOW       /// Active low, used for advanced configuration.
#define KEY_1_INDEX 0   /// Index of initializing array.
#define KEY_2_INDEX 1
#define LED_1_INDEX 0   /// Index of initializing array.
#define LED_2_INDEX 1
static void __dev_key_handle(uint32_t key_id, key_st_t key_st, uint32_t push_time)
{
    switch(key_id) {
        case KEY_1_INDEX: {
            if(key_st == KEY_ST_PUSH) { /// The button is being pressed.
                if(push_time == 3000) { /// After the button is pressed and held for 3,000 ms, the LED2 starts blinking.
                     dev_led_start_blink(LED_2_INDEX, 500, 500, DEV_LED_BLINK_FOREVER, DEV_IO_OFF); /// The LED1 alternately outputs high for 500 ms and low for 300 ms to emit blinking signals.
                }
            }
            else {
                if(push_time < 3000) { /// If the button is pressed and held for less than 3,000 ms, it is recognized as a short press.
                    //TODO:
                }
                else {
                    dev_led_stop_blink(LED_2_INDEX, DEV_IO_OFF); /// The LED2 stops blinking and comes off.
                    //TODO:
                }
            }
            break;
        }
                case KEY_2_INDEX: {
            //TODO:
            break;
        }
                default: {
            break;
        }
    }
}
static void gpio_demo(void)
{
    gpio_config_t gpio_ouput_config[] = {
        {LED_1_PORT, LED_1_PIN, LED_1_MODE, LED_1_DOUT, LED_1_DRIVE},
        {LED_2_PORT, LED_2_PIN, LED_2_MODE, LED_2_DOUT, LED_2_DRIVE},
    };  
        gpio_config_t gpio_input_config[] = {
        {KEY_1_PORT, KEY_1_PIN, KEY_1_MODE, KEY_1_DOUT, KEY_1_DRIVE},
        {KEY_2_PORT, KEY_2_PIN, KEY_2_MODE, KEY_2_DOUT, KEY_2_DRIVE},
    };
    gpio_button_init((gpio_config_t *)gpio_input_config, get_array_len(gpio_input_config), 50, __dev_key_handle); /// Initialize the button, with 50 ms dithering time.
    gpio_output_init((gpio_config_t *)gpio_ouput_config, get_array_len(gpio_ouput_config)); /// Initialize the output. You can use advanced functions as needed.
    dev_led_start_blink(LED_1_INDEX, 500, 300, DEV_LED_BLINK_FOREVER, DEV_IO_OFF); /// The LED1 alternately outputs high for 500 ms and low for 300 ms to emit blinking signals.
}
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback