API串口总结.docx_第1页
API串口总结.docx_第2页
API串口总结.docx_第3页
API串口总结.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务:实现PC机和MCU的串口通信程序。方法: C+, Visual studio 2005过程:a) 查阅网上例子,了解MFC应用程序。 b) 在Visual Studio中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在Microsoft.Net技术广泛应用的今天,Visual Studio.Net没有将此控件加入控件库,所以人们采用了许多方法在Visual Studio.Net来编写串口通讯程序:a) 第一种方法是通过采用Visual Studio 中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;(有所尝试,但是没调通)b) 第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;(还没用过)c) 第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 (请教葛,说这种方法方便,而且方便移植,采用这种方法)c) API编写串口,过程一般是这样的:a) 创建串口句柄,用CreateFile;b) 对串口的参数进行设置,其中比较重要的是波特率(BaudRate),数据宽度(BytesBits),奇偶校验(Parity),停止位(StopBits),当然,重要的还有端口号(Port);c) 然后对串口进行相应的读写操作,这时候用到ReadFile和WriteFile函数;d) 读写结束后,要关闭串口句柄,用CloseFile。d) 详解遇到的问题和解法a) 问题:CreatFile()函数 第一个参数出现类型不匹配的报错。AfxMessageBox()函数 也是第一个参数出现报错。解决方法:VS2005报告(error C2665)的解决办法: 自己写程序的时候居然提示了一个error c2665的错误,原来使用VC6的有明是正常的, 网上查了一下,发现是这个问题,向大家说明一下。AfxMessageBox(Alert);错误 error C2665: AfxMessageBox : none of the 2 overloads could convert all the argument types用的是vc2005解答: VS2005编译器的检查更严格了,在vc6和vc7种可以编译通过的语句:AfxMessageBox(“test”);VS2005编译器只能写成AfxMessageBox(_T(test);才能使用,否则编译器会告诉你有两个AfxMessageBox函数,但编译器不知道使用哪一个。错误提示如上。 在书写代码的时候要养成使用TEXT()或_T()的习惯,这样文本在UNICODE和非UNICODEt程序可以自动转换。这也是VC6.0+与VC2005当中比较大的区别吧,支持编码的不同。b) 问题:函数如果有缺省的参数,即为默认值。c) 问题:找不到添加类导向 class wizard, 在projectaddclass.d) 问题:vs2005: 使用类视图的向导添加方法或变量的时候会报脚本错误。在网上查找原因,发现是因为VS2005的补丁程序没有装,安装网上的地址下载了一个补丁程序,结果安装错误,后来经过千般折磨,终于发现其实自己的VS安装文件里面就有一个补丁程序,装软件的时候没主意,就没装上去,结果白白浪费了两个小时。以下是在网上找到的资料,贴在这里备用。在网络上查说vs2005和Ie8有冲突,搜索一下,大概是要在注册表中增加一项内容,如下所示:Windows Registry Editor Version 5.00HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet SettingsZones10001207=dword:00000000导入以上内容后, 重新启动vs2005后,故障依然存在; 而且我的IE是7.0的; 为什么呢?后来看到有文章说vs2005需要更新到sp1; 那就下个补丁吧,反正打补丁总是有益无害的;补丁下载地址:/downloads/details.aspx?displaylang=zh-cn&familyid=bb4a75ab-e2d4-4c96-b39d-37baf6b5b1dc安装补丁后,启动vs2005一切OK;附: 有些人说windows xp 不能直接安装补丁,但是我是可以的; 下面转载一些资料;如果您的操作系统是XP,直接安装不会成功,需要对计算机进行必要的设置才行。详情请访问下面这个网址:/kb/925336。这里给出主要的步骤:1)依次单击“开始”和“运行”,键入 regedit,然后单击“确定”。 在注册表编辑器中,找到并单击下面的注册表项: HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftWindowsSaferCodeIdentifiers双击“PolicyScope”(如果没有该项就新建一个),将设置从 0 更改为 1。关闭注册表编辑器。 2)依次单击“开始”、“运行”,键入 cmd,然后单击“确定”以打开命令提示符窗口。 在命令提示符处键入以下命令net stop msiserver,然后按 Enter。3)启动VS80sp1-KB926604-X86-CHS.exe开始安装过程。 4)安装了程序包之后,重复步骤 1,将 PolicyScope 注册表值更改回 0,重启。一般的机器上,按照上面的步骤操作即可成功。安装过程所用时间也没网上说的要两三个小时,在我的两台机器上测试,均未超过30分钟。重新启动vs2005,添加变量和函数的功能恢复正常了。公正地讲,vc2005确实比vc 6.0进步了很多。它的IDE更加强大,可以提高编程的效率和舒适性。另外,它对标准C+提供了更全面的支持,编译器也具有更强的纠错能力。虽然,它会有这样那样的瑕疵,但瑕不掩玉,我们不能因此而因噎废食。PS. IE8.0引发VS2005某些向导脚本错误的问题其实早已解决,如果您的机器上还出现这样的问题,请打好IE的补丁。e) 写串口,writefile 返回值为0;不知道是否发送成功。?经过测试发现通信已经成功,只是返回值为0.f) 测试时用了一个虚拟串口软件,在电脑上虚拟了两个相互连接的串口,一端用一个串口调试工具,一端用自己编写的软件,可是验证通信是否正常。(或者用USB转串口,将串口的RXD和TXD直接连接,在同一台电脑上实现收发数据。没有试)g) 要实现对写入到文本框里面的内容进行发送,因为可能需要多输入的内容进行分析之后才能发送,所以先要将文本框里面的内容按字节读取出来。这就涉及到变量读取问题。 本程序用的是unicode编码,所以可以用GetAt函数, (ansi字串可以用CharNext API或者是VC Runtime _mcsinc函数)h) 在readfile 和writefile 前要对串口进行清除串口错误或者读取串口现在的状态,用ClearCommError() 。i) WriteFile或者ReadFile时,最后一个参数需要传入一个OVERLAPPED结构,而且它的Offset和OffsetHigh两个成员需要设为0,hEvent成员需要一个事件(CreateEvent)。j) overlapped I/O 你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。 事实上,操作系统内部正是以线程来I/O完成overlapped I/O。你可以获得线程的所有利益,而不需付出什么痛苦的代价”。怎样使用overlapped I/O:进行I/O操作时,指定overlapped方式 使用CreateFile (),将其第6个参数指定为FILE_FLAG_OVERLAPPED,就是准备使用overlapped的方式构造或打开文件;如果采用 overlapped,那么ReadFile()、WriteFile()的第5个参数必须提供一个指针,指向一个OVERLAPPED结构。 OVERLAPPED用于记录了当前正在操作的文件一些相关信息。k) 收发数据的时候只能以一个字节接收或者发送,发现是因为采用了unicode 编码,而从文本框读取的是宽字节的数据,所以不能正常发送接收,将属性中的character set 改为 :Use Multi-Byte Character Set Error 1 error C2440: initializing : cannot convert from wchar_t * to char * 对于这个错误不是很理解, 对于wchar_t和char的区别不是很清楚,在MSDN中查看了一下,wchar_t是一个宽字符型,相当于unsigned short(16bit)。而我们通常使用的char是8bit。继续搜索wchar_t*到char*的转换,msdn上面有一篇文章是Convert Between Various String Types,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论