CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 6471|回复: 4

CB1,CB2,CT串口测试程序,完全可以用

[复制链接]
发表于 2014-8-4 18:19:37 | 显示全部楼层 |阅读模式
本帖最后由 jiangdou 于 2014-12-1 21:06 编辑
  1. //A13  A10  A20  TEST IS OK BY JIANGDOU
  2. // by jiangdou

  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <errno.h>
  7. #include <sys/stat.h>
  8. #include <fcntl.h>
  9. #include <unistd.h>
  10. #include <termios.h>
  11. #include <stdlib.h>

  12. /*Žò¿ªŽ®¿Úº¯Êý*/
  13. int open_port(int fd,int comport)
  14. {
  15.         char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"};
  16.         long vdisable;
  17.         if (comport==1)//Ž®¿Ú 1
  18.         {
  19.                 fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
  20.         if (-1 == fd){
  21.                 perror("Can't Open Serial Port");
  22.                 return(-1);
  23.                 }
  24.         }
  25.         else if(comport==2)//Ž®¿Ú 2
  26.         {
  27.                 fd = open( "/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDELAY);
  28.                 if (-1 == fd){
  29.                         perror("Can't Open Serial Port");
  30.                         return(-1);
  31.                 }
  32.         }
  33.         else if (comport==3)//Ž®¿Ú 3
  34.         {
  35.                 fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDELAY);
  36.                 if (-1 == fd){
  37.                 perror("Can't Open Serial Port");
  38.                 return(-1);
  39.                 }
  40.         }

  41. /*»ÖžŽŽ®¿ÚΪ×èÈû׎̬*/

  42.         if(fcntl(fd, F_SETFL, 0)<0)
  43.                 printf("fcntl failed!\n");
  44.         else
  45.                 //printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));

  46.         /*²âÊÔÊÇ·ñΪÖÕ¶ËÉ豞*/

  47.         if(isatty(STDIN_FILENO)==0)
  48.                 printf("standard input is not a terminal device\n");
  49.         else
  50.                 //printf("isatty success!\n");
  51.         //printf("fd-open=%d\n",fd);
  52.         return fd;
  53. }
  54. ///////////////////////
  55. //set_opt
  56. //////////////////////
  57. int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
  58. {
  59.         struct termios newtio,oldtio;
  60.         /*±£Žæ²âÊÔÏÖÓÐŽ®¿Ú²ÎÊýÉèÖÃ,ÔÚÕâÀïÈç¹ûŽ®¿ÚºÅµÈ³öŽí,»áÓÐÏà¹ØµÄ³öŽíÐÅÏ¢*/
  61.         if ( tcgetattr( fd,&oldtio) != 0) {
  62.                 perror("SetupSerial 1");
  63.                 return -1;
  64.         }
  65.         bzero( &newtio, sizeof( newtio ) );
  66.         /*²œÖèÒ»,ÉèÖÃ×Ö·ûŽóС*/
  67.         newtio.c_cflag |= CLOCAL | CREAD;
  68.         newtio.c_cflag &= ~CSIZE;
  69.         /*ÉèÖÃֹͣλ*/
  70.         switch( nBits )
  71.         {
  72.         case 7:
  73.                 newtio.c_cflag |= CS7;
  74.                 break;
  75.         case 8:
  76.                 newtio.c_cflag |= CS8;
  77.                 break;
  78.         }
  79. /*ÉèÖÃÆæŌУÑéλ*/
  80.         switch( nEvent )
  81.         {
  82.         case 'O': //ÆæÊý
  83.                 newtio.c_cflag |= PARENB;
  84.                 newtio.c_cflag |= PARODD;
  85.                 newtio.c_iflag |= (INPCK | ISTRIP);
  86.                 break;
  87.         case 'E': //ÅŒÊý
  88.                 newtio.c_iflag |= (INPCK | ISTRIP);
  89.                 newtio.c_cflag |= PARENB;
  90.                 newtio.c_cflag &= ~PARODD;
  91.                 break;
  92.         case 'N': //ÎÞÆæŌУÑéλ
  93.                 newtio.c_cflag &= ~PARENB;
  94.         break;
  95.         }
  96.         /*ÉèÖòšÌØÂÊ*/
  97.         switch( nSpeed )
  98.         {
  99.         case 2400:
  100.                 cfsetispeed(&newtio, B2400);
  101.                 cfsetospeed(&newtio, B2400);
  102.                 break;
  103.         case 4800:
  104.                 cfsetispeed(&newtio, B4800);
  105.                 cfsetospeed(&newtio, B4800);
  106.                 break;
  107.         case 9600:
  108.                 cfsetispeed(&newtio, B9600);
  109.                 cfsetospeed(&newtio, B9600);
  110.                 break;
  111.         case 115200:
  112.                 cfsetispeed(&newtio, B115200);
  113.                 cfsetospeed(&newtio, B115200);
  114.                 break;
  115.         case 460800:
  116.                 cfsetispeed(&newtio, B460800);
  117.                 cfsetospeed(&newtio, B460800);
  118.                 break;
  119.         default:
  120.                 cfsetispeed(&newtio, B9600);
  121.                 cfsetospeed(&newtio, B9600);
  122.                 break;
  123.         }
  124.         /*ÉèÖÃֹͣλ*/
  125.         if( nStop == 1 )
  126.                 newtio.c_cflag &= ~CSTOPB;
  127.         else if ( nStop == 2 )
  128.                 newtio.c_cflag |= CSTOPB;
  129.         /*ÉèÖõȎýʱŒäºÍ×îСœÓÊÕ×Ö·û*/
  130.         newtio.c_cc[VTIME] = 0;
  131.         newtio.c_cc[VMIN] = 0;
  132.         /*ŽŠÀíÎŽœÓÊÕ×Ö·û*/
  133.         tcflush(fd,TCIFLUSH);
  134.         /*Œ€»îÐÂÅäÖÃ*/
  135.         if((tcsetattr(fd,TCSANOW,&newtio))!=0)
  136.         {
  137.                 perror("com set error");
  138.         return -1;
  139.         }
  140.         //printf("set done!\n");
  141. return 0;
  142. }


  143. int main(void)
  144. {
  145.         int fd;
  146.         int nwrite,i;
  147.         char buff0[]="\n\r";
  148.         char buff1[]="uart_test by jiang_dou QQ:344283973\n\r";
  149.         char buff[80];
  150.         if((fd=open_port(fd,2))<0)
  151.         {//Žò¿ªŽ®¿Ú
  152.                 perror("open_port error");
  153.                 return;
  154.         }
  155.         if((i=set_opt(fd,115200,8,'N',1))<0){//ÉèÖÃŽ®¿Ú
  156.                 perror("set_opt error");
  157.         return;
  158.         }
  159.         //printf("fd=%d\n",fd);
  160.         printf("uart-test, baud is 115200, A13_PG03 is TX,  A13_PG04 is RX\n\r");
  161.         printf("uart test to starting. press 'enter 'key to continue.......\n");
  162.         getchar();
  163.         
  164.         
  165.         nwrite=write(fd,buff0,strlen(buff0));//ÐŽŽ®¿Ú
  166.         for(i=0; i<2000; i++){
  167.                 sprintf(buff, "receive data_%d  %s", i, buff1);
  168.                 printf("nwrite=%d,send data_%d %s\n",nwrite, i, buff1);
  169.                 nwrite=write(fd, buff, strlen(buff));//ÐŽŽ®¿Ú
  170.                 //buff = buff1;
  171.                 sleep(1);
  172.         }
  173.         close(fd);
  174.         return;
  175. }
复制代码

回复

使用道具 举报

发表于 2014-8-6 17:22:53 | 显示全部楼层
在linux和android下都能用吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-7 00:10:31 | 显示全部楼层
lin 发表于 2014-8-6 17:22
在linux和android下都能用吗?

都能用
回复 支持 反对

使用道具 举报

发表于 2014-8-8 09:49:32 | 显示全部楼层
lin 发表于 2014-8-6 17:22
在linux和android下都能用吗?

微雪的也有。
回复 支持 反对

使用道具 举报

发表于 2014-11-28 15:07:56 | 显示全部楼层
大哥,你的波特率,控制位都没设置啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-23 13:17 , Processed in 0.022905 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部