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端配合,交互!
串口调试助手 与单片机 只能 从 串口调试助手 发数据,从 单片机 获取的 数据非常有限
当然,如果 单片机 里有 通信程序,支持 这个的话,当然没有问题
你做单片机串口通信程序,CH340是用于USB转串口的,与你写程序无关,但是在电脑上要安装驱动程序,电脑上可用串口调试助手发送数据。而单片机接收数据程序,只要对串口和定时器T1初始化就行了,就可以等待接收数据了,哪有你说的那么复杂,哪有那些步骤,什么置1又置0,那是在干嘛?
单片机是有现成的串口的,你是用IO口模拟串口接收吗?
通常编写串口软件,需要设置一个缓冲来保存读取的数据,然后进行协议分析。不管你设置读取多长的数据,由于串口发送是有时延的,而你读数据的计算机无法知道发送方何时发送完毕再开始调用read,故只能采取读进缓冲中,每次读完,分析一下,看看是否读完。
如果是设备连接不正常或在指定的时间内没有返回字串(即超时),程序就会返回错误代码0015。 打开NI范例查找器,定位到硬件输入与输出→串口→高级串行写入与读取,双击打开范例程序,研究一下NI提供的框图写法,看一下它是如何实现串口的读取和写入的,希望对你有帮助
以上就是关于windows下C语言怎么对串口进行读写 *** 作全部的内容,包括:windows下C语言怎么对串口进行读写 *** 作、请问怎么样在串口调试助手中读取芯片中已经烧录好的程序我用的是51单片机、为什么我做的单片机串口数据读取程序不能正常接收等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)