安卓与串口或GPIO口通信的坑 2

上次写到安卓与串口通信的坑,已解决;

 

这次需要再加一个SO, libmkgpio.so,但与串口不同,这个SO必须由板子厂家做好了发给我,也就是我将我这边的JNI配好发给方案商,他们做好SO给我用;如果尝试自己生成SO,那是白白浪费时间啊!!!

 

另一个坑就是,方案公司给我的SO,本来没有问题,但依然提示 Java.lang.UnsatisfiedLinkError: Native method not found:,,我一直以为是我的JNI配得不对,然后后来又一次厂家却说,可能是他们之前在板子的内核系统里本身有一个GPIO.SO没删除,与现在这个冲突了!!!!

果然,厂家删除原来的旧版SO后,现在的串口SO和 GPIO口SO都能正常使用了。

转载于:https://my.oschina.net/sicilycorleone/blog/1505920

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安卓开发板上,串口通常是通过UART接实现的。要使用串口来控制GPIO,需要先配置UARTGPIO管脚,然后再通过串口发送命令来控制GPIO的电平状态。 具体步骤如下: 1. 打开串口设备文件 在安卓系统中,串口设备文件通常位于 /dev/ttySx 或 /dev/ttyUSBx,其中 x 为串口号。通过打开串口设备文件,我们可以获取到串口的文件描述符,从而进行读写操作。 2. 配置串口参数 在使用串口之前,需要对串口进行一些基本的配置,比如波特率、数据位、停止位、校验位等。可以使用 termios 库来配置串口参数,例如: ```c #include <termios.h> int fd = open("/dev/ttyS1", O_RDWR); struct termios options; tcgetattr(fd, &options); cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); options.c_cflag |= CLOCAL; options.c_cflag |= CREAD; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; tcsetattr(fd, TCSANOW, &options); ``` 上述代码将串口的波特率设置为 9600bps,数据位设置为 8,停止位设置为 1,不使用校验位。 3. 配置GPIO管脚 在安卓开发板上,GPIO通常是通过sysfs文件系统进行控制的。可以通过打开 /sys/class/gpio/export 文件,将需要控制的GPIO管脚导出到用户空间,并设置相应的方向和电平状态,例如: ```c int gpio_export(int pin) { int fd; char buf[64]; fd = open("/sys/class/gpio/export", O_WRONLY); if (fd < 0) { return fd; } sprintf(buf, "%d", pin); write(fd, buf, strlen(buf)); close(fd); return 0; } int gpio_direction(int pin, int dir) { int fd; char buf[64]; sprintf(buf, "/sys/class/gpio/gpio%d/direction", pin); fd = open(buf, O_WRONLY); if (fd < 0) { return fd; } if (dir == 0) { write(fd, "in", 2); } else { write(fd, "out", 3); } close(fd); return 0; } int gpio_write(int pin, int value) { int fd; char buf[64]; sprintf(buf, "/sys/class/gpio/gpio%d/value", pin); fd = open(buf, O_WRONLY); if (fd < 0) { return fd; } if (value == 0) { write(fd, "0", 1); } else { write(fd, "1", 1); } close(fd); return 0; } ``` 上述代码将 GPIO 管脚导出到用户空间,并设置方向为输出,将 GPIO 管脚的电平状态设置为高电平。 4. 发送串口命令 现在,我们已经将串口GPIO管脚都设置好了,可以通过串口发送命令来控制GPIO的电平状态。例如,要将GPIO管脚 P1_1 的电平设置为低电平,可以发送以下命令: ```c char cmd[] = "gpio_write 1 0\n"; write(fd, cmd, strlen(cmd)); ``` 上述代码将“gpio_write 1 0”这个字符串写入串口设备文件,从而控制 GPIO 管脚的电平状态。 需要注意的是,由于串口通信是异步的,发送命令后需要等待一定的时间,直到命令被执行完毕。可以使用 usleep 函数来实现等待时间,例如: ```c usleep(1000); ``` 上述代码将等待 1ms 的时间,等待命令执行完成。 综上所述,通过以上步骤,就可以使用串口来控制安卓开发板的GPIO了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值