<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 10990|回復: 14
    打印 上一主題 下一主題

    [提問] 【求助】懂uclinux的進來,串口發送長字符串時出錯。。

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2010-5-17 10:35:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: uclinux , 串口 , 求助 , 字符
    調試時候發送短的字符串沒問題,長的字符串,大概到了20個字節就出問題了,而且前面的20個左右字節正確,后面的都錯了,而且收到的字節也多了幾個。
    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 );  //        打開串口1,UART1,O_SYNC表示是同步打開的就是要把數據全都寫入才返回的。
    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:將回車符映射為換行符
    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));         //        往串口發送數據
    33.         printf("the bytes written to serial is %d\n",ncount);         //        發送的字符個數
    34.         printf("character to send is: %s\n",buf);                                 //        發送的字符串
    35.         perror("write");                                                                                 //        錯誤        
    36.         tcsetattr(fd,TCSANOW,&oldtio);
    37.         close (fd);
    38.         return 0;
    39. }
    復制代碼
    沙發
    發表于 2010-5-17 11:12:40 | 只看該作者
    提示:xyj,你在分類中選擇“提問”,你的帖子就跑到上邊去了,這樣總會被人看到
    板凳
    發表于 2010-5-17 11:13:32 | 只看該作者
    懷疑是去驅動問題
    地板
    發表于 2010-5-17 11:24:38 | 只看該作者
    這樣的破問題10有89是波特率問題

    兩邊不太匹配,剛開始幾個可以正確,到了后邊每個bit的時間差累積多了,就會發生錯誤

    這樣以來短串問題都不大,長串肯定出問題

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


    發送的字符: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

    實際收到的字節: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
     樓主| 發表于 2010-5-17 15:27:53 | 只看該作者
    我用示波器測了。。波形有問題,是發送端的問題,開始的20個字節都是以19200發送的,后面的好像是以9600發送的,還是串口設置的問題。。。。這是怎么回事呢。。?
    9
     樓主| 發表于 2010-5-17 15:28:35 | 只看該作者
    這樣的破問題10有89是波特率問題

    兩邊不太匹配,剛開始幾個可以正確,到了后邊每個bit的時間差累積多了,就會發生錯誤

    這樣以來短串問題都不大,長串肯定出問題

    洗衣機你算一下你兩個波特率的時間差,看20個 ...
    lelee007 發表于 2010-5-17 11:24

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

    好了。。呵
    11
    發表于 2010-5-17 16:24:36 | 只看該作者
    如果波特率的時鐘有保障,那肯定是你的驅動的問題了

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

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷