Chinaunix首页 | 论坛 | 博客
  • 博客访问: 962115
  • 博文数量: 376
  • 博客积分: 154
  • 博客等级: 入伍新兵
  • 技术积分: 1558
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-13 08:42
文章分类

全部博文(376)

文章存档

2014年(11)

2013年(88)

2012年(260)

2011年(17)

分类: 嵌入式

2013-05-27 14:11:18

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这两个脚反着接,不管设置为流控,还是不流控,串口都能收到数据,这是为啥!继续摸索啊。。
阅读(5488) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

conceptcon2013-05-31 15:14:48

柳青锋:我现在弄的是linux下的串口测试,ARM11中系统里找不到ttyUSB0(驱动也添加到内核了),所以也不能执行这个程序,无法打开串口文件,你是怎么在开发板系统操作串口的呢?

你执行ls -l /dev/tty* 这条命令,看开发板是使用的哪个串口设备,然后在程序中做相应改动。。。。。。

回复 | 举报

柳青锋2013-05-30 11:23:11

我现在弄的是linux下的串口测试,ARM11中系统里找不到ttyUSB0(驱动也添加到内核了),所以也不能执行这个程序,无法打开串口文件,你是怎么在开发板系统操作串口的呢?