1,在linux环境下写好如下代码:
- #include <termios.h>
- #include <cutils/log.h>
- #include <fcntl.h>
- #include <time.h>
- static int fd=-1;
- static struct termios termios;
- int main()
- {
- char buff[]="0121012";
- ///dev/s3c2410_serial1 当前串口的设备文件
- fd= open("/dev/s3c2410_serial1",O_RDWR|O_NOCTTY|O_NDELAY);
- if( fd < 0){
- LOGE("open port /dev/s3c2410_serial1 ERROR..fd=%d\n",fd);
- exit(0);
- }else
- LOGE("open port:/dev/s3c2410_serial1 succceed..fd=%d\n",fd);
- if(fcntl(fd,F_SETFL,0)<0)
- LOGE("fcntl F_SETFL\n");
- {
- LOGI(">>>> Port setup..\n");
- int err;
- tcflush(fd, TCIOFLUSH);
- if ((err = tcgetattr(fd,&termios)) != 0)
- {
- LOGI("tcgetattr(%d) = %d\r\n",fd,err);
- close(fd);
- }
- termios.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
- termios.c_oflag &= ~OPOST;
- termios.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
- termios.c_cflag &= ~(CSIZE|PARENB);
- termios.c_cflag |= CS8;
- termios.c_cflag &= ~CRTSCTS;//no flow control
-
- tcsetattr(fd, TCSANOW, &termios);
- tcflush(fd, TCIOFLUSH);
- tcsetattr(fd, TCSANOW, &termios);
- tcflush(fd, TCIOFLUSH);
- tcflush(fd, TCIOFLUSH);
-
- if (cfsetispeed(&termios,B57600))//到时终端设置和这个一样的波特率
- {
- LOGE("cfsetispeed.. errno..\r\n");
- close(fd);
- //return(-1);
- }
-
- // Set the output baud rates in the termios.
- if (cfsetospeed(&termios,B57600))
- {
- LOGE("cfsetispeed.. errno..\r\n");
- close(fd);
- //return(-1);
- }
-
- tcsetattr(fd,TCSANOW,&termios);
-
- LOGE("Port setup finished..\n");
-
- }
- while(1)
- {
- write(fd,buff,sizeof(buff));
- LOGD("uart_b=%s\n",buff);
- usleep(50*1000);
- }
- return 0;
- }
2,通过Gcc生成可执行文件aaa(也可以通过编译文件系统的方式来生成可执行文件,添加一个Android.mk即可)
- # Use hardware GPS implementation if available.
- #
- LOCAL_PATH := $(call my-dir)
- # HAL module implemenation, not prelinked and stored in
- # hw/<GPS_HARDWARE_MODULE_ID>.<ro.hardware>.so
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := optional #这里也可以是eng,主要的生成可执行文件时候放的目录不一样
- LOCAL_PRELINK_MODULE := false
- LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
- #LOCAL_CFLAGS += -static
- LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware
- LOCAL_SRC_FILES := scmd.c
- LOCAL_MODULE :=scmd
- include $(BUILD_EXECUTABLE) #生成可执行文件
3,将可执行文件放到product/平台目录/system/bin/
4,通过终端进入系统直接运行这个可执行文件即可!
附:这里我就遇到一个问题,代码中我设置了termios.c_cflag &= ~CRTSCTS 没有流控控制,硬件方面不需要连接CTS,RTS,现在我就问的是假如我CTS,RTS这两个脚反着接,不管设置为流控,还是不流控,串口都能收到数据,这是为啥!继续摸索啊。。
阅读(5488) | 评论(2) | 转发(0) |