c語言windows串口
1. windows下C語言怎麼對串口進行讀寫操作
windows下對串口的操作可以通過WindowsAPI進行,也可以通過Linux下的read什麼的直接操作,但是這種情況需要了解電路結構,比較麻煩,第三種有第三方提供的庫,但是大多數針對C++,所以可能比較難找到順手的第三方庫.
那麼,接下來就見要介紹一下串口通信用WindowsAPI通信的方式.
我們會發現,在文件名的位置填上"comX" X表示com口號,超過十的com口號需要另外的書寫方式,這里不說了,因為網上一抓一大把,接下來,我們要對串口進行一系列的明確設置,這里就用到了一個結構體DCB結構,是專門用來描述一個com口的工作方式的,由於次結構體有28個成員,非常多,而且大部分的設置都是全世界通用的,所以,我們偷個懶,在打開一個com口之後,建立DCB結構體,接下來調用一個函數GetCommState用這個函數把現在com口的數據都寫到DCB里,這樣,比較通用的com口設置就已經弄好了,我們一般情況下只需要改一下DCB的波特率就好了,改好後馬上用SetCommState把剛改好的結構體再寫回去,這樣串口就設置好了,現在還有點麻煩,串口設置好了,我們要它干什麼呢?廢話,讀寫數據唄,嘟~~~~~~可不能用fwrite和fread因為這個com口句柄不是文件句柄,是內核句柄,要用ReadFile和WriteFile來進行讀寫,又出麻煩了,我們怎麼知道單片機什麼時候發數據過來,就算我們知道,計算機什麼時候知道啊?所以,一般的情況下,用ReadFile一直在哪檢查,又是麻煩,通常情況下,一個com口的ReadFile設置是阻塞函數,影響編程啊!!!!!!
怎麼辦,很簡單,你不阻塞嗎,打通你唄,我們再建立里一個結構體COMMTIMEOUTS這個結構體描述里一個com口的相關超時設置,我們用GetCommTimeouts把數據讀回來,具體的設置方法在網上也有,但是要注意,有一個MAXDWORD用它來設置讀間隔超時設置就可以使ReadFile向kbhit()函數一樣完全非阻塞了.
經過一些列的設置,事實上,現在已經可以通信了,要是有人覺得緩存不舒服,用SetupComm函數來重設緩存大小,對於傳輸速度比較快的通信,要把緩存設置的大些.
2. Windows下的C語言串口編程
大概說下思路,串口在編程里相當於一個文件,因此要創建句柄來操作,還要給DCB結構休賦值進行串口配置等,你可以查下DCB結構體,記得在DOS下編程時,使用#include <windows.h>。藏的深是為了更簡單的使用。還有就是由於接受要一直進行檢測,所以一般都專門開一線程進行監聽。
3. C語言編程:如何同時打開多個串口進行通信
可以兩個方式:
1、如果是 MSComm控制項方式可以加入三個控制項分別控制;在OnComm事件裡面接收數據;用m_Comm.SetOutput(COleVariant(m_SendData));發送數據;
2、把 MSComm控制項 打包在一個類裡面,自己寫初始化和發送接收函數;
4. 如何用C語言實現PC間串口通信逐bit傳輸.
想實現1bit,1bit傳輸,開始一個起始位,最後一個結束位,是否可以實現.
答:能!但是這是一種非標準的協議類型,就不能用一般的UART控制器實現。對於單片機來說可以用普通IO口模擬,就像18B20的單線通信一樣,一個bit一個bit的發。在計算機上你可以通過驅動軟體控制串口或者並口中的一條引腳,再加上一條地線就可以與另外一台計算機的對應埠的引腳進行bit方式的數據收發了。