COM口 大于9 连接不上问题总结

今天调试单片机控制舵机程序,昨天刚调试完,没问题。今天再去调试总是不行,用串口助手就没问题。 错误提示的返回值为2, 即为打开串口失败, 找了好久发现, 上次我用的串口是COM8,这次的串口COM11,后来发现当串口大约9时容易出现问题。整理一下。

程序调试时发现,使用CreateFile()打开COM4时正常,打开COM10时却总是失败。这两个端口均为虚拟COM口,通过蓝牙仿真串口完成数据收发,除了命名不同外,本质上并无任何不同。

而MSDN上对使用CreateFile()打开设备函数却失败返回并无详细解释,百思不得其解。上网百度一下找到了相关资料,原来是:


Win32 API函数CreateFile()除了可打开普通文件外,还可以打开设备,比如可用于打开串口,获得串口句柄。

使用CreateFile()函数打开串口时文件共享模式应设置为0(表示独占),创建参数设置为OPEN_EXISTING,模板必须设置为NULL。

如果为COM1至COM9,可使用“COM1”-“COM9”作为文件名传递给CreateFile()函数,函数可成功返回。但是,如果操作对象为COM10及以上的端口,以此方式命名文件名调用CreateFile()函数会返回INVALID_HANDLE_VALUE,表示端口无法打开。

产生这种奇怪现象的原因是:微软预定义的标准设备中含有“COM1”-“COM9”。所以,“COM1”-“COM9”作为文件名传递给函数时操作系统会自动地将之解析为相应的设备。但对于COM10及以上的串口,“COM10”之类的文件名系统只视之为一般意义上的文件,而非串行设备。

为了增加对COM10及以上串行端口的支持,微软规定,如果要访问这样的设备,应使用这样的文件名(以COM10为例):\\.COM10

所以,对于COM10及以上的串口,CreateFile()的调用样式应调整如下:

CreateFile(

"\\\\.\\COM10",           // 定义串口名

fdwAccess,                // 存取模式(读写)

0,                               // 共享模式:必须设置为0,表示设备独占使用

NULL,                        // 保密性

OPEN_EXISTING,      // 必须设置为OPEN_EXISTING

0,                               // 文件属性,如果是异步模式,可设置为

NULL                         // 模版,串口设备必须设置为NULL

);

 

需要注意的是:这套命名规范同样适用于COM1-COM9。

参考处:http://support.microsoft.com/?id=115831


另,MSCOMM串口控件无此问。估计是其底层程序注意到了此问题并妥善地解决了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如何通过目标追踪功能制作一个手机摄像头实时跟踪小车,该设计运用OpenCV的图像处理APP,手机APP通过摄像头实时跟踪设定的颜色目标,并且通过手机蓝牙将目标坐标位置和大小等信息输出,配合蓝牙串口模块和我写的配套Arduino数据接收库,就可以做成一个简单的手机跟踪寻迹小车。 手机实时跟踪寻迹小车视频演示: 手机实时跟踪寻迹小车手机APP截图: 安装方法: 1.直接安装Trace.apk,Android5.0以上系统需要到设置里赋予应用相机和蓝牙权限 2.在豌豆荚搜索“迹”安装,同上 使用方法: 1.进软件之后可以点击连接蓝牙,选择你的蓝牙模块(模块需要事先在手机系统蓝牙设置里面配对好),连接上之后如果有目标信息就会通过蓝牙发送到模块上,Arduino进行读取就可以了。 2.点击左上角的按钮进入预览画面,此时在预览窗中点击任何一个你想追踪的物体,就会自动进行处理输出数据了,顶栏会显示你选中的颜色。 3.这里说明一下,跟踪原理是以颜色为特征的,所以应该尽量避免视野中出现颜色相同的物体,同时如果发现跟踪物体的周围出现大量小块的目标块,可以适当调大屏幕下方的进度条,直到杂块消失只剩一个目标。 说明一下屏幕下方各个控件的含义: 1.左边的按钮是切换手机前后镜头的(现在应该没有不带前置镜头的手机了吧…) 2.进度条用于调节图像处理阈值,这个值用于色块过滤,可以理解为,用于设置最小的目标块的限制,也就是当目标小于一定程度就过滤掉。 3.T、X、Y三个参数是目标的信息,XY是坐标大家都知道(坐标的最大值跟手机镜头分辨率有关);T是目标的大小信息,如果检测到多个目标或者没有检测到任何目标这里会显示E(error)。T可以用于粗略得判断物体的远近(近大远小),不过更推荐的方式是用Y轴判断远近(见后文的小车)。 手机实时跟踪寻迹小车设计总结: 这个小车大家可以随意搭建,只要能把你的手机放上去就行。Tmp上我用了两个舵机改造成轮子,把180度的舵机改成可以连续旋转的360舵机,这样就省下了电机驱动以及麻烦的减速箱,而且只用一根信号线就可以控制电机的正反转和速度,这部分要是大家感兴趣可以上网搜搜相关改造教程。 然后我们需要把小车和手机联系起来,通过蓝牙模块: 需要使用从机模块,最好把波特率设置为115200,连线如下: 蓝牙模块 Arduino Tx -> Rx Vcc -> 5V Gnd -> Gnd 1.注意蓝牙的Rx是不接Arduino的,因为Arduino只需要接收APP的数据而不需要发送,这样的话留出的Tx就可以通过Serial.Print()打印到电脑端的串口助手。 2.当然,考虑到一般Arduino都只有一个硬件串口,这样串口被蓝牙模块占用了之后每次下载都需要拔下蓝牙以避免数据串扰,解决办法是换用软串口或者换用Mega等不止一个串口的板子。 3.软件部分,提供已经封装好的Arduino库,放到library文件夹后打开示例就会用了 需要自己完成的部分就是,把获取到的x,y坐标转换为小车电机的速度,思路是这样的: 1.假设我们希望目标始终在屏幕中间,那么当y坐标大于屏幕y最大值的一半时让车有一个往前的基础速度V,反 之则是向后的基础速度-V; 2.如果x坐标大于屏幕x最大值的一半,那么让车子有一个旋转速度Vt,反之有个旋转速度-Vt; 最后赋值给小车的速度是:左轮 = V+Vt,右轮 = V-Vt,也就是所谓的差速驱动了。 最后给出APP和Arduino库,见“相关文件”下载。
单片机原理与接技术课程设计 课程名称: 单片机原理与接技术 设计题目: 基于51单片机的数字温度计设计 专 业: 信 息 工 程 设 计 者: 指导老师: 摘要 随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测 和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的 成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有 一定的误差。与传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广 ,测温精确,数字显示,适用范围宽等特点。选用AT89C51型单片机作为主控制器件,D Sl8B20作为测温传感器通过2位共阴极LED数码管串口传送数据,实现温度显示。通过DS l8B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好, 在0 ~100 最大线性偏差小于0.1 。该器件可直接向单片机传输数字信号,便于单片机处 理及控制。另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理 过程。 关键字:AT89S52 51单片机 DS18B20 温度计 目 录 1 系统硬件设计方案 - 3 - 1.1 温度传感器介绍 - 3 - 1.2 温度传感器与单片机的连接 - 6 - 1.3 复位信号及外部复位电路 - 7 - 1.4 电源电路 - 7 - 1.5 显示电路 - 8 - 2 软件设计 - 9 - 3 数据测试 - 11 - 4 总结与体会 - 11 - 参考文献 - 13 - 附录1 仿真图 - 14 - 附录2 程序源代码 - 15 - 1 系统硬件设计方案 1.1 温度传感器介绍 AT89C51作为温度测试系统设计的核心器件。该器件是INTEL公司生产的MCS一5l系列单片 机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准 的MCS—51的CMOS产品。不仅结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,而且 继承和扩展了MCS—48单片机的体系结构和指令系统。单片机小系统的电路图如图2所示。 图1 单片机小系统电路 AT89C51单片机的主要特性: (1)与MCS-51 兼容,4K字节可编程闪烁存储器; (2)灵活的在线系统编程,掉电标识和快速编程特性; (3)寿命为1000次写/擦周期,数据保留时间可10年以上; (4)全静态工作模式:0Hz-33Hz; (5)三级程序存储器锁定; (6)128*8位内部RAM,32可编程I/O线; (7)两个16位定时器/计数器,6个中断源; (8)全双工串行UART通道,低功耗的闲置和掉电模式; (9)片内振荡器和时钟电路; DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电 压适用范围。分辨率设定,及用户设定的报警温度存储在EPROM中,掉电后依然保存。 温度传感器DS18B20引脚如图3所示。 8引脚封装 TO-92封装 图2 温度传感器 引脚功能说明: NC :空引脚,悬空不使用; VDD :可选电源脚,电源电压范围3~5.5V。当工作于寄生电源时,此引脚必须接地。 DQ :数据输入/输出脚。漏极开路,常态下高电平。 GND :为电源地 DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警 触发器TH和TL、配置寄存器。 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码 。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自 身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作 用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的 。 DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二 进制补码读数形式提供,以0.0625 /LSB形式表达,其中S为符号位。 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前 面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可 得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可 得到实际温度。 例如+125 的数字输出为07D0H,+25.0625 的数字输出为0191H,- 25.0625 的数字输出为FF6FH,-55 的数字输出为FC90H。 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的 E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 暂存存储器包含了

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值