linux gpio 用户态,Linux 用户态设置GPIO控制

比如我想监听PA7上的电平变化(也就是边沿触发),那么应该先向“/sys/class/gpio/gpio7/direction”写入“in”,然后向“/sys/class/gpio/gpio7/edge”写入“both”,然后对”/sys/class/gpio/gpio7/value”执行select/poll操作。

代码如下:

poll_test.c #include

#include

#include

#include

int main()

{

int fd=open("/sys/class/gpio/gpio7/value",O_RDONLY);

if(fd<0)

{

perror("open '/sys/class/gpio/gpio7/value' failed!\n");

return -1;

}

struct pollfd fds[1];

fds[0].fd=fd;

fds[0].events=POLLPRI;

while(1)

{

if(poll(fds,1,0)==-1)

{

perror("poll failed!\n");

return -1;

}

if(fds[0].revents&POLLPRI)

{

if(lseek(fd,0,SEEK_SET)==-1)

{

perror("lseek failed!\n");

return -1;

}

char buffer[16];

int len;

if((len=read(fd,buffer,sizeof(buffer)))==-1)

{

perror("read failed!\n");

return -1;

}

buffer[len]=0;

printf("%s",buffer);

}

}

return 0;

}

这个小程序的作用就是就是不断poll(“/sys/class/gpio/gpio7/value”)。一旦poll()返回,就输出PA7的值。

假设代码放在~目录下,然后输入如下命令: cd ~

gcc poll_test.c -o poll_test

echo in > /sys/class/gpio/gpio7/direction

echo both > /sys/class/gpio/gpio7/edge

./poll_test

用1K电阻把PA7上拉到VCC,然后用一根导线把PA7与GND连接又断开,会发现不断输出1和0(当PA7连上GND的瞬间输出0,与GND断开的瞬间输出1)。说明poll()确实能检测到电平变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值