查看: 10913|回復: 14
打印 上一主題 下一主題

[提問(wèn)] 【求助】懂uclinux的進(jìn)來(lái),串口發(fā)送長(cháng)字符串時(shí)出錯。。

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2010-5-17 10:35:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)鍵詞: uclinux , 串口 , 求助 , 字符
調試時(shí)候發(fā)送短的字符串沒(méi)問(wèn)題,長(cháng)的字符串,大概到了20個(gè)字節就出問(wèn)題了,而且前面的20個(gè)左右字節正確,后面的都錯了,而且收到的字節也多了幾個(gè)。
  1. #include
  2. #include
  3. #include
  4. #include
  5. #include

  6. #define BAUDRATE B19200            
  7. #define SERIALDEVICE "/dev/ttyS1"
  8. int main()
  9. {
  10.         int fd,ncount;
  11.         struct termios oldtio,newtio;
  12.         char buf[]="This is a simple application for serial communication\r\n";
  13.         
  14.         fd = open(SERIALDEVICE, O_RDWR | O_NOCTTY );  //        打開(kāi)串口1,UART1,O_SYNC表示是同步打開(kāi)的就是要把數據全都寫(xiě)入才返回的。
  15.         if (fd <0)
  16.         {         
  17.                 perror(SERIALDEVICE);
  18.                 exit(-1);
  19.         }
  20.         
  21.         tcgetattr(fd,&oldtio);                                 //               
  22.         bzero(&newtio, sizeof(newtio));          //
  23.         
  24.         newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; //串口設置為波特率19200bps,8N1,
  25.         newtio.c_iflag = IGNPAR | ICRNL;         //        IGNPAR:忽略奇偶性錯誤;ICRNL:將回車(chē)符映射為換行符
  26.         newtio.c_oflag = 0;
  27.         newtio.c_lflag = ICANON;
  28.         
  29.         tcflush(fd, TCIFLUSH);
  30.         fcntl(fd,F_SETFL,0);                                 //        文件描述詞操作
  31.         tcsetattr(fd,TCSANOW,&newtio);                 //        選擇新的設置,TCSANOW:新設置立即生效
  32.         ncount=write(fd,buf,sizeof(buf));         //        往串口發(fā)送數據
  33.         printf("the bytes written to serial is %d\n",ncount);         //        發(fā)送的字符個(gè)數
  34.         printf("character to send is: %s\n",buf);                                 //        發(fā)送的字符串
  35.         perror("write");                                                                                 //        錯誤        
  36.         tcsetattr(fd,TCSANOW,&oldtio);
  37.         close (fd);
  38.         return 0;
  39. }
復制代碼
沙發(fā)
發(fā)表于 2010-5-17 11:12:40 | 只看該作者
提示:xyj,你在分類(lèi)中選擇“提問(wèn)”,你的帖子就跑到上邊去了,這樣總會(huì )被人看到
板凳
發(fā)表于 2010-5-17 11:13:32 | 只看該作者
懷疑是去驅動(dòng)問(wèn)題
地板
發(fā)表于 2010-5-17 11:24:38 | 只看該作者
這樣的破問(wèn)題10有89是波特率問(wèn)題

兩邊不太匹配,剛開(kāi)始幾個(gè)可以正確,到了后邊每個(gè)bit的時(shí)間差累積多了,就會(huì )發(fā)生錯誤

這樣以來(lái)短串問(wèn)題都不大,長(cháng)串肯定出問(wèn)題

洗衣機你算一下你兩個(gè)波特率的時(shí)間差,看20個(gè)bit的時(shí)候 是不是可以錯開(kāi)2/3個(gè)bit以上
地下室
發(fā)表于 2010-5-17 11:27:24 | 只看該作者
多謝成名和007。速度好快呀
6
發(fā)表于 2010-5-17 11:39:47 | 只看該作者
波特率最容易弄.
單片機搞個(gè)捕獲中斷,發(fā)送55看時(shí)間.
7
 樓主| 發(fā)表于 2010-5-17 12:13:55 | 只看該作者
應該是波特率的問(wèn)題。?墒俏以O置的沒(méi)問(wèn)題。。
下面是測試的結果:


發(fā)送的字符:55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55

實(shí)際收到的字節:55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 FE
8
 樓主| 發(fā)表于 2010-5-17 15:27:53 | 只看該作者
我用示波器測了。。波形有問(wèn)題,是發(fā)送端的問(wèn)題,開(kāi)始的20個(gè)字節都是以19200發(fā)送的,后面的好像是以9600發(fā)送的,還是串口設置的問(wèn)題。。。。這是怎么回事呢。。?
9
 樓主| 發(fā)表于 2010-5-17 15:28:35 | 只看該作者
這樣的破問(wèn)題10有89是波特率問(wèn)題

兩邊不太匹配,剛開(kāi)始幾個(gè)可以正確,到了后邊每個(gè)bit的時(shí)間差累積多了,就會(huì )發(fā)生錯誤

這樣以來(lái)短串問(wèn)題都不大,長(cháng)串肯定出問(wèn)題

洗衣機你算一下你兩個(gè)波特率的時(shí)間差,看20個(gè) ...
lelee007 發(fā)表于 2010-5-17 11:24

發(fā)送端的波特率會(huì )變。。?
10
 樓主| 發(fā)表于 2010-5-17 15:28:52 | 只看該作者
提示:xyj,你在分類(lèi)中選擇“提問(wèn)”,你的帖子就跑到上邊去了,這樣總會(huì )被人看到
老郭 發(fā)表于 2010-5-17 11:12

好了。。呵
11
發(fā)表于 2010-5-17 16:24:36 | 只看該作者
如果波特率的時(shí)鐘有保障,那肯定是你的驅動(dòng)的問(wèn)題了

驅動(dòng)里邊把波特率給改了唄
12
發(fā)表于 2010-5-17 17:02:12 | 只看該作者
什么原因啊,洗衣機?真強,本科就搞linux。以俺裸奔的經(jīng)驗,你先看看你是不是用的usb轉串口,那東東不值得信賴(lài),再有就是底層驅動(dòng)的原因了,希望樓主揭曉答案
13
 樓主| 發(fā)表于 2010-5-17 18:58:21 | 只看該作者
我搞定了。。謝謝各位。。
主要是我的測試程序有問(wèn)題(隨隨便便找來(lái)的)。。。然后又換了個(gè)測試程序就有用了。
串口設置出的問(wèn)題。。。。有的設置不知道是什么,然后就按照他的來(lái)了。。沒(méi)仔細去看。。
14
發(fā)表于 2010-5-17 19:04:10 | 只看該作者
15
發(fā)表于 2010-5-17 19:42:27 | 只看該作者
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; //串口設置為波特率19200bps,8N1,
16
發(fā)表于 2010-5-18 09:24:18 | 只看該作者
樓上幾位辛苦了
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页