基于android下测试串口的程序

1,在linux环境下写好如下代码:
  1. #include <termios.h>
  2. #include <cutils/log.h>
  3. #include <fcntl.h>

  4. #include <time.h>

  5. static int fd=-1;
  6. static struct termios termios;
  7. int main()
  8. {
  9.     char buff[]="0121012";
  10.      ///dev/s3c2410_serial1 当前串口的设备文件
  11.      fd= open("/dev/s3c2410_serial1",O_RDWR|O_NOCTTY|O_NDELAY);
  12.          if( fd < 0){
  13.                 LOGE("open port /dev/s3c2410_serial1 ERROR..fd=%d\n",fd);
  14.                 exit(0);
  15.             }else
  16.                 LOGE("open port:/dev/s3c2410_serial1 succceed..fd=%d\n",fd);
  17.             if(fcntl(fd,F_SETFL,0)<0)
  18.                 LOGE("fcntl F_SETFL\n");
  19.             {
  20.         LOGI(">>>> Port setup..\n");
  21.         int err;
  22.         tcflush(fd, TCIOFLUSH);
  23.         if ((err = tcgetattr(fd,&termios)) != 0)
  24.         {
  25.             LOGI("tcgetattr(%d) = %d\r\n",fd,err);
  26.             close(fd);
  27.         }
  28.          termios.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
  29.          termios.c_oflag &= ~OPOST;
  30.          termios.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
  31.          termios.c_cflag &= ~(CSIZE|PARENB);
  32.          termios.c_cflag |= CS8;
  33.          termios.c_cflag &= ~CRTSCTS;//no flow control
  34.         
  35.         tcsetattr(fd, TCSANOW, &termios);
  36.         tcflush(fd, TCIOFLUSH);
  37.         tcsetattr(fd, TCSANOW, &termios);
  38.         tcflush(fd, TCIOFLUSH);
  39.         tcflush(fd, TCIOFLUSH);
  40.     
  41.         if (cfsetispeed(&termios,B57600))//到时终端设置和这个一样的波特率
  42.         {
  43.             LOGE("cfsetispeed.. errno..\r\n");
  44.                 close(fd);
  45.                 //return(-1);
  46.         }
  47.     
  48.         // Set the output baud rates in the termios.
  49.         if (cfsetospeed(&termios,B57600))
  50.         {
  51.             LOGE("cfsetispeed.. errno..\r\n");
  52.                 close(fd);
  53.                 //return(-1);
  54.         }
  55.         
  56.         tcsetattr(fd,TCSANOW,&termios);
  57.     
  58.         LOGE("Port setup finished..\n");
  59.     
  60.     }
  61.         while(1)
  62.             {

  63.                 write(fd,buff,sizeof(buff));
  64.                 LOGD("uart_b=%s\n",buff);
  65.                 usleep(50*1000);
  66.             }
  67.             return 0;

  68. }
2,通过Gcc生成可执行文件aaa(也可以通过编译文件系统的方式来生成可执行文件,添加一个Android.mk即可)

  1. # Use hardware GPS implementation if available.
  2. #


  3. LOCAL_PATH := $(call my-dir)

  4. # HAL module implemenation, not prelinked and stored in
  5. # hw/<GPS_HARDWARE_MODULE_ID>.<ro.hardware>.so
  6. include $(CLEAR_VARS)
  7. LOCAL_MODULE_TAGS := optional #这里也可以是eng,主要的生成可执行文件时候放的目录不一样
  8. LOCAL_PRELINK_MODULE := false
  9. LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
  10. #LOCAL_CFLAGS        += -static
  11. LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware
  12. LOCAL_SRC_FILES := scmd.c
  13. LOCAL_MODULE :=scmd
  14. include $(BUILD_EXECUTABLE)  #生成可执行文件

3,将可执行文件放到product/平台目录/system/bin/
4,通过终端进入系统直接运行这个可执行文件即可!
 
附:这里我就遇到一个问题,代码中我设置了termios .c_cflag & = ~CRTSCTS 没有流控控制,硬件方面不需要连接CTS,RTS,现在我就问的是假如我CTS,RTS这两个脚反着接,不管设置为流控,还是不流控,串口都能收到数据,这是为啥!继续摸索啊。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值