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

[复制链接]
125|0
classroom 发表于 2025-10-27 16:28 | 显示全部楼层 |阅读模式
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;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

551

主题

3511

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部