版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、函数名 作用 1.CreateFile 打开串口 2.GetCommState 检测串口设置 3.SetCommState 设置串口 BuilderCommDCB 用字符串中的值来填充设备控制块 GetCommTimeouts 检测通信超时设置 SetCommTimeouts 设置通信超时参数 SetCommMask 设定被监控事件 WaitCommEvent 等待被监控事件发生 WaitForMultipleObjects 等待多个被监测对象的结果 4.WriteFile 发送数据 ReadFile 接收数据 GetOverlappedResult 返回最后重叠(异步)操作结果 5.Purg
2、eComm 清空串口缓冲区 , 退出所有相关操作 6.ClearCommError 更新串口状态结构体 , 并清除所有串口硬件错误 7.CloseHandle 关闭串行口 红颜色标出来的是我用到的一些函数,因为是最简单的应用,所以用到的函数也都是最最简单的一些,都是非常容易理解的。只是通过计算机向 51 发送指令所以连 ReadFile ()都没用到。省了很多事。 1.CreateFile() 功能:打开串口设备 函数原型 HANDLE CreateFile ( LPCTSTR lpFileName, / 串口名称字符串;如: COM1 或 COM2 DWORD dwDesiredAccess
3、, / 设置读写属性(访问模式 );一般为 GENERIC_READ|GENERIC_WRITE, DWORD dwShareMode, / 共享模式; 必须 为 0, 即不能共享 LPSECURITY_ATTRIBUTES lpSecurityAttributes, / 安全属性;一般为 NULL DWORD dwCreationDistribution, / 创建方式,串口设置必须设置此值; 在这里 必须 为 OPEN_EXISTING DWORD dwFlagsAndAttributes, / 文件属性和标志;在这里我们设置成 FILE_FLAG_OVERLAPPED ,实现异步 I/O
4、 关于 /Overlapped I/O 模型,自己上网搜了去理解吧,我自己也说不清楚,懵懂的很。 HANDLE hTemplateFile / 临时文件的句柄,通常为 NULL ) ; 说明: 如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回 INVALID_HANDLE_VALUE 。 2.GetCommState () 功能:获得串口状态 BOOL GetCommState ( HANDLE hFile, / handle of communications device LPDCB lpDCB / address of device-control block struc
5、ture ) ; 3.SetCommState() 功能:设置串口状态 BOOL SetCommState ( HANDLE hFile, / handle of communications device LPDCB lpDCB / address of device-control block structure ) ; 说明: 在打开通信设备句柄后,常常需要对串行口进行一些初始化工作。这需要通过一个 DCB 结构来进行。 DCB 结构包含了诸如波特率、每个字符的数据位数、奇偶校验和停止位数等信息。在查询或配置置串行口的属性时,都要用 DCB 结构来作为缓冲区。 调用 GetCommSta
6、te 函数可以获得串口的配置,该函数把当前配置填充到一个 DCB 结构中。一般在用 CreateFile 打开串行口后,可以调用 GetCommState 函数来获取串行口的初始配置。要修改串行口的配置,应该先修改 DCB 结构,然后再调用 SetCommState 函数用指定的 DCB 结构来设置串行口 For example: DCB dcb; memset(&dec,0,sizeof(dcb); if(!GetCommState(HComm,&dcb)/ 获取当前 DCB 配置 return FALSE; dcb.BaudRate = CBR_9600;/ 修改数据传输率。这里还有很多参
7、数可以修改,比如,停止位,有无校验等等,具体参见 dcb 结构。 . if(SetCommState(hComm,&dcb)/ 设置新参数 . / 错误处理 4.WriteFile () 功能:来将资料写入 Serial port. 函数原型: BOOL WriteFile ( HANDLE hFile, / handle to file to write to LPCVOID lpBuffer, / 写如字符串的首地址 DWORD nNumberOfBytesToWrite, / 要写如字符的个数 LPDWORD lpNumberOfBytesWritten, / 实际写入字节数,为一个 i
8、nt 型指针 LPOVERLAPPED lpOverlapped / i/o 重构结构,我讲不清楚, sorry ) ; 说明: ReadFile 函数只要在串行口输入缓冲区中读入指定数量的字符,就算完成操作。 而 WriteFile 函数不但要把指定数量的字符拷入到输出缓冲中,而且要等这些字符从串行口送出去后才算完成操作。 当 ReadFile 和 WriteFile 返回 FALSE 时,不一定就是操作失败,线程应该调用 GetLastError 函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回 FALSE ,而且 GetLastError 函数返回 ERR
9、OR_IO_PENDING 。如果 GetLastError 函数返回 ERROR_IO_PENDING ,则说明重叠操作还为完成,线程可以等待操作完成。 有两种等待办法:一种办法是用象 WaitForSingleObject 这样的等待函数来等待 OVERLAPPED 结构的 hEvent 成员,可以规定等待的时间,在等待函数返回后,调用 GetOverlappedResult 。 另一种办法是调用 GetOverlappedResult 函数等待,如果指定该函数的 bWait 参数为 TRUE , 那么该函数将等待 OVERLAPPED 结构的 hEvent 事件。 GetOverlapp
10、edResult 可以返回一个 OVERLAPPED 结构来报告包括实际传输字节在内的重叠操作结果。 如果规定了读 / 写操作的超时,那么当超过规定时间后, hEvent 成员会变成有信号的。因此,在超时发生后, WaitForSingleObject 和 GetOverlappedResult 都会结束等待。 WaitForSingleObject 的 dwMilliseconds 参数会规定一个等待超时,该函数实际等待的时间是两个超时的最小值。注意 GetOverlappedResult 不能设置等待的时限,因此如果 hEvent 成员无信号,则该函数将一直等待下去 5.PurgeComm
11、 () 功能:终止目前正在进行的读或写的动作 函数原型: BOOL PurgeComm ( HANDLE hFile, / handle of communications resource DWORD dwFlags / action to perform ) ; 参数说明: HANDLE hFile,/ 串口名称字符串 dwFlags 共有四种 flags: PURGE_TXABORT: 终止目前正在进行的(背景)写入动作 PURGE_RXABORT: 终正目前正在进行的(背景)读取动作 PURGE_TXCLEAR: flush 写入的 buffer PURGE_TXCLEAR: flus
12、h 读取的 buffer 调用 PurgeComm 函数可以终止正在进行的读写操作,该函数还会清除输入或输出缓冲区中的内容。 6.ClearCommError () 功能: 从字面上的意思看来 , 它是用来清除错误情况用的 , 但是实际上它还可以拿来取得目前通讯设备的一些信息 . 函数原型: BOOL ClearCommError ( HANDLE hFile, / handle to communications device LPDWORD lpErrors, / pointer to variable to receive error codes LPCOMSTAT lpStat / p
13、ointer to buffer for communications status ) ; 说明: 在调用 ReadFile 和 WriteFile 之前,线程应该调用 ClearCommError 函数清除错误标志。 该函数负责报告指定的错误和设备的当前状态。 7CloseHandle(); 功能:关闭串口 BOOL CloseHandle ( HANDLE hObject / handle to object to close ) 下面是我在 bcb 里的一些具体实现: 1. 打开串口 void _fastcall TForm1:Button1Click(TObject *Sender)
14、 hCom=CreateFile( COM2, / 文件名 GENERIC_READ|GENERIC_WRITE,/ 访问模式允许读写 0, / 此项必须是 0 0,/ 无安全参数 OPEN_EXISTING,/ 创建方式 FILE_FLAG_OVERLAPPED,/ 异步工作方式 0); if (hCom=INVALID_HANDLE_VALUE) ShowMessage(Can not open the port !); CloseHandle(hCom); hCom = 0; return; else ShowMessage(COM2 open success!); Button1-En
15、abled=false; CheckBox1-Enabled=true; CheckBox2-Enabled=true; CheckBox3-Enabled=true; CheckBox4-Enabled=true; CheckBox5-Enabled=true; if(!GetCommState(hCom,&dcb) / 获得串口设置并用它填充 dcb 结构体 ShowMessage(GetCommState failed); if (!SetupComm(hCom,1024,1024) / 设置输入输出缓冲区大小 ShowMessage(SetupComm failed); dcb.BaudRate=9600; dcb.fParity=0; dcb.Parity=NOP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年地产承运新能源建设合同
- 2026年家居代工培训服务协议
- 村委会治保会工作制度
- 村工会委员会工作制度
- 预检分诊流调工作制度
- 预防零打碎敲工作制度
- 领导干部家访工作制度
- 食品厂门卫室工作制度
- 麻精药品使用工作制度
- 唐山市路南区2025-2026学年第二学期五年级语文期末考试卷(部编版含答案)
- 2025年长沙市芙蓉区事业单位招聘笔试试题及答案解析
- 临床床头抬高30°-小角度大作用
- 2026陕西榆林市旅游投资集团有限公司招聘7人考试备考试题及答案解析
- 幼儿园后勤业务培训制度
- 2025年高考(海南卷)地理试题(学生版+解析版)
- 福建医卫系统事业单位招聘《护理学专业知识》近年考试真题题库资料及答案
- 食材肉类配送合同范本
- 老年跌倒风险评估与防范
- GB/T 39693.5-2025硫化橡胶或热塑性橡胶硬度的测定第5部分:用便携式橡胶国际硬度计法测定压入硬度
- 显卡知识培训课件
- 出境人员保密知识培训课件
评论
0/150
提交评论