canmv gpio控制不了

Viewed 130

在sdk中sample_gpio.c中修改
int unitest_gpio_key(int fd)
{
int ret;
pin_mode_t mode52;
pin_mode_t mode53;
pin_mode_t mode35;

mode35.pin = 35;
mode52.pin = LED_PIN_NUM1;
mode53.pin = LED_PIN_NUM2;

ret = ioctl(fd, GPIO_DM_OUTPUT, &mode35);
if (ret)
{
    perror("ioctl /dev/pin2 err\n");
    return -1;
}

ret = ioctl(fd, GPIO_DM_INPUT, &mode52);
if (ret)
{
    perror("ioctl /dev/pin err\n");
    return -1;
}

ret = ioctl(fd, GPIO_DM_INPUT, &mode53);
if (ret)
{
    perror("ioctl /dev/pin err\n");
    return -1;
}

while(1)
{
    ioctl(fd, GPIO_READ_VALUE, &mode53);
    if(mode53.mode == KD_GPIO_LOW)
    {
        printf("[S1] key press!\n");
        ioctl(fd, GPIO_WRITE_HIGH, &mode35);
    }

    ioctl(fd, GPIO_READ_VALUE, &mode52);
    if(mode52.mode == KD_GPIO_LOW)
    {
        printf("[S2] key press!\n");
        ioctl(fd, GPIO_WRITE_LOW, &mode35);
    }
    mode53.mode = KD_GPIO_HIGH;
    mode52.mode = KD_GPIO_HIGH;
}
return 0;

}
希望按下按键可以让引脚发生变化,但是测得35引脚无变化

2 Answers

你好,请问你用的是什么板子,以及gpio35是否设置成gpio模式。

canmv-k230-v1.1,我打开/dev/gpio时候不就是会设置成gpio模式吗

不会,可以用src/rtsmart/rtsmart/kernel/bsp/maix3/drivers/interdrv/fpioa/drv_fpioa.h里的接口将io设置成gpio模式,参考https://github.com/canmv-k230/rtsmart/blob/b428385b38e5e8fdaaf8823583fc9f5370ee3293/kernel/bsp/maix3/drivers/interdrv/i2c/drv_soft_i2c.c

我的sdk版本是k230_sdk-v1.8,是Linux+rtos的,好像没有这个文件,也没有fpioa的驱动

image.png
请把35管脚配置成gpio功能目前不是gpio功能。
image.png