//串口設置框架到這裡就大概結束了,對於設置了數據位校驗位停止位和波特率的端口已經可以傳輸大多數信息。在實際中的情況往往是很多特例,比如,用write發送數據時沒有鍵入回車,信息就將發送不出去的情況,這主要是因為我們在輸出輸入時是按照規范模式接受到回車或者換行才發送,而很多情況我們是不需要回車和換行的,這時,應當切換到行方式輸入,設置options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);不經處理直接發送。
又比如
在我們發送字符0x0d的時候,往往接受端得到的字符是0x0a 這是怎麼回事,原因是在串口設置中c_iflag和c_oflag中存在從NL-CR 和CR-NL的映射,也就是說,串口可以把回車和換行看成一個字符,所以,此時我們應該屏蔽掉這些,用options.c_oflag &=~(INLCR|IGNCR|ICRNL|);和options.c_oflag &=~(ONLCR|OCRNL); 進行設置。
總之,串口的設置是很復雜也很麻煩的東西,具體情況要具體分析,找到相應的辦法,如果發現數據不能傳送,不妨耐點心在串口設置上找答案吧
言歸正傳,後面的東西就很簡單了,接下來是打開串口:
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAY這種方式看open函數
if (-1 == fd)
{ /*設置數據位數*/
perror("Can't Open Serial Port");
return -1;
}
else
return fd;
}
然後是數據的接受和發送,把通用的主函數貼下來,很容易的。