classroom 发表于 2025-10-27 16:28

如何在RT-Thread中为GD32F103配置外部GPIO中断代码示例

c
#include <rtdevice.h>
#include <board.h>
#include "gd32f10x.h"

static rt_err_t gpio_irq_callback(rt_device_t dev, rt_size_t size)
{
    rt_kprintf("GPIO interrupt triggered!\n");
    /* 在这里添加您的中断处理代码 */
    return 0;
}

static int rt_hw_gpio_irq_init(void)
{
    rt_err_t result;
    rt_device_t device;
    struct rt_device_pin_mode mode;

    /* 查找GPIO设备 */
    device = rt_device_find("pin");
    if (!device)
    {
      rt_kprintf("Can't find device: pin\n");
      return -1;
    }

    /* 打开GPIO设备 */
    result = rt_device_open(device, RT_DEVICE_OFLAG_RDWR);
    if (result != RT_EOK)
    {
      rt_kprintf("Failed to open pin device\n");
      return -1;
    }

    /* 配置PA0为上拉输入 */
    mode.pin = GD32_PIN_PA0;
    mode.mode = PIN_MODE_INPUT_PULLUP;
    rt_device_control(device, RT_DEVICE_CTRL_PIN_MODE, &mode);

    /* 注册中断回调函数 */
    rt_device_set_rx_indicate(device, gpio_irq_callback);

    /* 使能GPIO中断 */
    mode.pin = GD32_PIN_PA0;
    mode.mode = PIN_IRQ_ENABLE | PIN_IRQ_MODE_RISING;
    rt_device_control(device, RT_DEVICE_CTRL_PIN_IRQ, &mode);

    return 0;
}

INIT_BOARD_EXPORT(rt_hw_gpio_irq_init);

int main(void)
{
    /* 其他初始化代码 */
   
    return 0;
}

szt1993 发表于 2025-10-31 23:31

GPIO中断代码示例
页: [1]
查看完整版本: 如何在RT-Thread中为GD32F103配置外部GPIO中断代码示例