我试图build立一个外部微控制器和windows之间使用C的UART接口。
我使用以下代码来设置UART参数,然后将字符发送到指定的COM端口。
我成功地发送了一个angular色。 但是我怎么收到一个回来? 代码如下:
#include <windows.h> #include <stdio.h> #include <conio.h> #include <math.h> #include <string.h> HANDLE hSerial; int main() { // OPEN SERIAL PORT AND SET INITAL UART ParaMETERS //================================================= DCB dcbSerialParams = {0}; COMMTIMEOUTS timeouts = {0}; fprintf(stderr,"opening serial port..."); hSerial = Createfile("\\.\COM3",GENERIC_READ|GENERIC_WRITE,NulL,OPEN_EXISTING,file_ATTRIBUTE_norMAL,NulL ); if (hSerial == INVALID_HANDLE_VALUE){fprintf(stderr,"Errorn");return 1;} else {fprintf(stderr,"OKn");} // Set device parameters (115200 baud,1 start bit,1 stop bit,no parity) dcbSerialParams.DCBlength = sizeof(dcbSerialParams); if (GetCommState(hSerial,&dcbSerialParams) == 0){fprintf(stderr,"Error getting device staten");CloseHandle(hSerial);return 1;} dcbSerialParams.Baudrate = CBR_57600; dcbSerialParams.ByteSize = 8; dcbSerialParams.StopBits = OnestopBIT; dcbSerialParams.Parity = nopARITY; if(SetCommState(hSerial,"Error setting device parametersn");CloseHandle(hSerial);return 1;} // Set COM port timeout settings timeouts.ReadIntervalTimeout = 50; timeouts.ReadTotalTimeoutConstant = 50; timeouts.ReadTotalTimeoutMultiplIEr = 10; timeouts.WritetotalTimeoutConstant = 50; timeouts.WritetotalTimeoutMultiplIEr = 10; if(SetCommTimeouts(hSerial,&timeouts) == 0){fprintf(stderr,"Error setting timeoutsn"); CloseHandle(hSerial); return 1;} // SETUP AND SEND DATA FROM UART //============================== int VarNum=8; char str[15]; sprintf(str,"%ld",VarNum); DWORD bytes_written,total_bytes_written = 0; fprintf(stderr,"Sending bytes..."); if(!Writefile(hSerial,str,strlen(str),&bytes_written,NulL)) { fprintf(stderr,"Errorn"); CloseHandle(hSerial); return 1; } fprintf(stderr,"%d bytes writtenn",bytes_written); // CLOSE SERIAL PORT AND EXIT MAIN FUNCTION //========================================= fprintf(stderr,"Closing serial port..."); if (CloseHandle(hSerial) == 0){fprintf(stderr,"Errorn"); return 1;} fprintf(stderr,"OKn");return 0; }
检查套接字是否在python中使用
PHPcurl获取代理
计划任务在windows Server 2003/2008上无限期的持续时间
对GetStockObject @ 4的未定义的引用
无条件杀死一个进程(windows)
如何设置PHP的envvariables?
如何在WSH下pipe理文件和目录?
如何将字节数组发送到C ++中的另一个进程
即使启用了假脱机文件池,如何find具有给定ID的作业的假脱机文件?
在windows上“npm运行”找不到模块“
您可以使用Readfile() :
BOol bOk = Readfile(hSerial,buffer,sizeof(buffer) - 1,&bytesRead,NulL); if (bOk && (bytesRead > 0)) { buffer[bytesRead] = ''; }
从串行端口读取时, Readfile()应该阻塞,直到有更多的数据或发生超时。 (这应该在单独的线程中完成(在一个循环中),或者可以通过使用ReadfileEx()进行异步 *** 作)。
从通信设备读取时,Readfile的行为由设置和检索的当前通信超时管理,使用SetCommTimeouts和GetCommTimeouts函数。 如果您未能设置超时值,则会发生不可预测的结果。
还检出SetCommState()和PurgeComm() 。
总结以上是内存溢出为你收集整理的在Windows中使用C的UART全部内容,希望文章能够帮你解决在Windows中使用C的UART所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)