串口编程学习报告.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:31 大小:148KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

串口编程学习报告.doc

串口编程学习报告.doc

预览

免费试读已结束,剩余 21 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

串口编程学习报告引言:串口是计算机上非常通用设备通信的协议,串行接口可以接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行数据字符供给CPU的器件,在日常生活中应用广泛,因此有必要对串口进行深入学习,首先谈到需要了解的硬件和软件方面的知识,然后可以整体的了解从硬件到软件数据收发的过程.一.硬件部分1、串口通信是一位一位的传输的,但是计算机处理数据是并行数据,所以当数据由计算机送至数据发送器时,首先用移位寄存器把串行数据转换为并行数据才能送入计算机处理。RS232C是用正负电压表示逻辑状态与TTL高低电压表示逻辑状态的规定不一样在这里就需要硬件部分有ETA与TTL电平转换电路这样才能和计算机和TTL的器件连接,并且下位机还需要有可编程的串口芯片这样可以通过编程控制我们需要达到的成效.2、串口要遵守串口之间的协议,在物理方面就要求有相同的波特率来控制数据的发送速度,因此需要有波特率发生器.具体的要多大的波特率可以根据需求通过控制寄存器来控制发生的波特率3、根据同步/异步方式,有时要要求上位机与下位机时间同步,需要一个授时器授时.4、每个下位机都有它自己的地址,这时当上位机要寻找这个下位机时就需要寻找它的地址,这里要一个地址译码器。5、对于数据流的控件,可以是硬件流控制(RTC/CTSDTR/CTS等)也可以是软件流控制(XON/XOFF),不过现在大多都是用软件控制。6、普遍情况下电脑都有一个RS232的串口,所以我们一般都采用RS232串口线,通常情况下无论使用的是九针的还是二十五针的只要接通2,3针就可以进行简单的收发数据测试DB-25,DB-9接口如下图。7、串口都有一定的存贮功能,这些可以由下位机单片机上的RAM,移位寄存器或其它的外部存贮来实现的.二.软件部分WINDOWSAPI已经提供给我们通用接口方法程序,只要在适当的时候调用就可以完成自己想要的功能,在写一个串口程序中(打开/关闭,配置,读写)需要如下的API提供的方法:1、打开串口:Win32系统把文件的概念进行了扩展,无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的原型为:privatestaticexternintCreateFile(stringlpFileName,uintdwDesiredAccess,intdwShareMode,intlpSecurityAttributes,intdwCreationDistribution,intdwFlagsAndAttributes,inthTemplateFile);lpFileName:将要打开的串口逻辑名,如“COM1”;dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列;dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0;lpSecurityAttributes:引用安全性属性结构,缺省值为NULL;dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING;dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O操作;hTemplateFile:对串口而言该参数必须置为NULL;2、关闭串口:利用API函数关闭串口非常简单,只需使用CreateFile函数返回的句柄作为参数调用CloseHandle即可:BOOLCloseHandle(InthObject;//handletoobjecttoclose);3、配置串口:(1)缓冲区大小设置:打开串口后,可以对I/O口的缓冲区的大小进行设置,虽然Windows用I/O缓冲区来暂存串口输入和输出的数据。如果通信的速率较高,则应该设置较大的缓冲区。调用SetupComm函数可以设置串行口的输入和输出缓冲区的大小。BOOLSetupComm(InthFile,//通信设备的句柄IntdwInQueue,//输入缓冲区的大小(字节数)IntdwOutQueue//输出缓冲区的大小(字节数));(2)超时设置:在用ReadFile和WriteFile读写串行口时,需要考虑超时问题。超时的作用是在指定的时间内没有读入或发送指定数量的字符,ReadFile或WriteFile的操作仍然会结束。要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS结构。调用SetCommTimeouts可以用某个COMMTIME