- 論壇徽章:
- 0
|
最近在學(xué)linux的串口驅(qū)動(dòng)。開發(fā)板用的是TQ210,虛擬機(jī)用的是REDHAT。我想在應(yīng)用程序中試一下串口通信,讓開發(fā)板發(fā)送一些字符,在Windows中打開串口助手,看能否接受到開發(fā)板發(fā)送的字符。應(yīng)用程序在虛擬機(jī)中編譯好后,通過NFS文件系統(tǒng)拷貝到開發(fā)板上,然后在開發(fā)板運(yùn)行這個(gè)程序,開發(fā)板上運(yùn)行的內(nèi)核版本是2.6.35,國嵌提供的內(nèi)核。程序代碼是書上來的,如下(頭文件就不貼了):
- #define STTY_DEV "/dev/s3c2410_serial1" //串口設(shè)備文件
- #define BUFF_SIZE 9 //發(fā)送字符數(shù)量
- int main()
- {
- int stty_fd , n;
- char buffer[BUFF_SIZE] = {'a','b','a','b','a','b','a','b','a'};
- struct termios opt;
-
- /** open UART**/
- stty_fd = open(STTY_DEV, O_RDWR);
- printf("%d\n", stty_fd);
-
-
- if( stty_fd == -1)
- {
- perror("open device");
- return 0;
- }
- printf("open device success, waiting user input....\n");
-
- /**取得當(dāng)前串口配置**/
- tcgetattr(stty_fd, &opt );
- tcflush(stty_fd, TCIOFLUSH);
-
- printf("3\n");
-
- /***設(shè)置波特率為9600**/
- cfsetispeed(&opt, B9600);
- cfsetospeed(&opt, B9600);
-
- /*****設(shè)置數(shù)據(jù)位為8位***/
- opt.c_cflag &=~CSIZE;
- opt.c_cflag |= CS8;
-
- /*****無奇偶校驗(yàn)位***/
- opt.c_cflag &=~PARENB;
- opt.c_iflag &=~INPCK;
-
- /****1位停止位***/
- opt.c_cflag &=~CSTOPB;
-
- /***超時(shí)時(shí)間15秒***/
- opt.c_cc[VTIME] = 150;
- opt.c_cc[VMIN] = 0;
-
- /***將配置寫入設(shè)備***/
- if(0!=tcsetattr(stty_fd, TCSANOW, &opt))
- {
- perror("set daudrate\n");
- return 0;
- }
- tcflush(stty_fd, TCIOFLUSH);
-
- while(1)
- {
- printf("7\n"); //只是看看程序有沒有執(zhí)行到這里
-
- n = write( stty_fd, buffer, BUFF_SIZE); //開始發(fā)送字符
- if(n<=0)
- {
- perror("read data\n");
- break;
- }
- if(n>8)
- {
- printf("n is %d\n", n); //輸出write函數(shù)返回值
- break;
- }
-
- printf("8\n");
- printf("program will exit!\n"); //數(shù)據(jù)發(fā)送結(jié)束
- close(stty_fd); //關(guān)閉串口
-
- return 0;
- }
復(fù)制代碼 程序編譯沒問題,在開發(fā)板上也能正常執(zhí)行,但是Windows上的串口助手就是接收不到數(shù)據(jù)啊。執(zhí)行情況如圖:
1.jpg (38.66 KB, 下載次數(shù): 64)
下載附件
2016-06-24 19:40 上傳
2.jpg (40.53 KB, 下載次數(shù): 52)
下載附件
2016-06-24 19:40 上傳
可以看到程序執(zhí)行后,write返回值是9,說明9個(gè)字符都成功的寫進(jìn)了/dev/s3c2410_serial1文件?墒,串口調(diào)試助手沒反應(yīng)啊。
開發(fā)板的/dev目錄下有s3c2410_serial0、s3c2410_serial1、s3c2410_serial2、s3c2410_serial4四個(gè)串口設(shè)備,s3c2410_serial0應(yīng)該是用在了串口終端,所有我程序中用s3c2410_serial1,另外兩個(gè)我也試了,一樣不行。
當(dāng)我用echo 124 > /dev/s3c2410_serial1測試串口1時(shí),串口終端沒有打印123,但是測試串口0時(shí),能成功打印123
|
|