此篇文章用于说明如何在WinCE系统上实现串口蓝牙,希望给想在CE上实现这个功能的“新手”朋友一个帮助。

先说一下我的硬件环境:CSR BC4 ROM蓝牙芯片,S3C6410,WinCE6.0系统。

硬件连接:把蓝牙的RX,TX,CTS,RTS和板子上的相应口连接,注意是交叉连接,我这里连接的是UART1。还有就是给蓝牙供电,地,天线等。

硬件连接好之后,给蓝牙上电,先来搜一把?我当初就是这么干的,我的目的是想验证一下蓝牙有没有接好之类的,掏出手机一搜,结果什么也没有搜到,当时我很郁闷,但是今天回头来想想,认为当时什么也没搜到才算是正常的,如果当时能搜到这个蓝牙,那么,估计这个蓝牙在系统上也不会被认到了(指的是想在系统的控制面板里面,使用CE自带的蓝牙进行搜索配对等操作)。

好了,现在也搜不到蓝牙,也不能验证模组有没有接好,还是不管那么多了,下面开始上软件,用软件来验证。首先来实现让系统认到这个硬件(使用CE自带的程序进行搜索配对等)。

1、请先到http://lailzhihou.download.csdn.net/这里下载蓝牙驱动,这个驱动编译后会生成一个bthbcsp.dll的文件。

2、把该驱动加到你的BSP包里面,便于编译。

3、在Platform.reg文件中添加如下的注册表项目:

[HKEY_LOCAL_MACHINE/Software/Microsoft/Bluetooth/Transports/BuiltIn/1]
  "driver"="Bthbcsp.dll"
  "flags"=dword:4
  "name"="COM2:"
  "baud"=dword:1C200
  "FlashChip"=dword:0
  "Priority256"=dword:84
  "PacketSize"=dword:C0
 "SerialTimeoutConstant"=dword:5
 "SerialIntervelTimeout"=dword:ffffffff
 "ReopenDelay"=dword:64
  "resetdelay"=dword:1388

这里最关键的就是

"name"="COM2:"
  "baud"=dword:1C200

两项,"name"="COM2:"这个是到时候驱动会使用这个名字的串口和蓝牙硬件通信,结合前面我的硬件连接,我的硬件是连接在UART1上,所以,我的系统中有把UART1这个串口设定为“COM2“,当然,这个名字是可以改的,但是必须要保证这里的,"name"=?这个的名字要和你连接的UART上映射的串口名字一样就可以。

"baud"=dword:1C200,这个很明显是在指定串口的波特率,十六进制表示,我这里设定的是115200,设定这个波特率的原因是,我蓝牙模块的默认波特率是115200,也就是说,这里设定的波特率应该要和你的蓝牙模块的默认波特率一样。原因是:驱动在加载的时候,首先会使用这里设定的波特率打开串口,和模块通信,此时,驱动会给模块进行初始化操作,会使用到一系列的PSKey值。模块只有在经过了这个初始化操作之后,才会开始工作。当然可以再这个PSKey的设置中更改模块的波特率,这样就可以提高蓝牙的传送速度等,关于这点我讲在后面来讲述,首先还是把这个波特率设定为你的蓝牙模块的默认波特率。

4、在Platform.bib文件中加入类似:

bthbcsp.dll     $(_FLATRELEASEDIR)/bthbcsp.dll     NK  SHK

PSConfig.psr                 $(_FLATRELEASEDIR)/PSConfig.psr              NK    U

这样的信息。

5、添加组件,这里,使用系统在创建工程时候默认添加的组件即可:

a、core os->cebase->communication service and networking->networking-personal area network(PAN)->bluetooth->Bluetooth profiles support->Bluetooth HS/HF and Audio Gateway

b、core os->cebase->communication service and networking->networking-personal area network(PAN)->bluetooth->Bluetooth Protocol Stack with Transport Driver Support->Bluetooth Stack with Universal Loadable Driver

注意:在b这个同级目录下的组件,只添加这一个,其它的请不要添加。

6、编译系统,下载NK,如果不出意外,那么此时你就可以再系统的控制面板中搜索和配对蓝牙了。

如果运气不好,没反应,那么可以从以下几个方面着手查找,先确认相应的DLL和注册表文件是否有加入到系统中。查找驱动是否有加载(bthbcsp.dll)正常情况下,次驱动被加载,会跑到HCI_BCSP.cpp文件的HCI_OpenConnection函数中去,所以可以再这个函数中加上打印看看,是否有跑进来。如果跑进来了,而没有成功,那么请跟进看看跑到哪里就失败退出了之类的,以我的板子上为例,我的在打开串口后进行串口配置的时候就有个地方失败了,所以我在提供的驱动中也是屏蔽了这里的,具体的位置在HCI_BCSP.cpp文件的OpenConnection函数中:

#if 0
    if (!SetupComm (serialPortHandle, serialBufferSize, serialBufferSize))
 {
  RETAILMSG(1, (TEXT("SetupComm/r/n")));
  IFDBG(DebugOut(DEBUG_BCSP_ERROR, TEXT("<BcspCommunication::OpenConnection@%s> UNABLE TO SET BUFFERS"), name));
  return GetLastError();
 }
#endif

这里可以根据你的具体情况放开试试。

另外提醒一下:请在每次重启系统前的时候,最好给模块进行重新上电的操作!!!

如果顺利的话,此时,你已经可以搜索配对了,但这还不够,我们还需要传送文件看看,这个需要加入OBEX组件:

Core OS->CEBASE->Applications and Services Development->Object Exchange Protocol(OBEX)

依次展开这个目录下的所有子项,并添加它们。 添加后编译NK就可以传送文件了。

如果,在这里你出现了这样的现象,就是当下载完NK之后的第一次系统启动后,可以传送文件,一切都很正常,但是当重启之后,就不能传送文件了,在手机端老是提示连接失败,那么可以尝试在Platform.reg文件中加入如下注册表信息尝试:

[HKEY_LOCAL_MACHINE/Services/OBEX]
  "FriendlyName"="OBEX"
 "DLL"="OBEXSrVr.dll"
 "Keep"=dword:1
; "Order"=dword:9
 "Order"=dword:A
  "Prefix"="OBX"
  "Index"=dword:0

这里是把OBEX这个驱动的启动顺序靠后了。

另外:

[HKEY_LOCAL_MACHINE/Software/Microsoft/Obex/Services/{00000000-0000-0000-0000-000000000000}]
    ;"BaseDir"="//My Documents//DefaultInbox"
    "BaseDir"="//NandFlash//DefaultInbox"
    "Server"="obexinbx.dll"

这段信息可以设定保存文件时候的默认路径。

如果一切顺利,到这里你已经可以随心所欲的传送文件了,但是,可能此时你会觉得传送的速度太慢了,要提高传送的速度就需要设定更高的通信波特率。这里需要涉及到修改2个地方,一个是PSConfig.psr文件,这个文件是一个配置文件,用于来初始化蓝牙芯片。打开这个文件,里面有一些地址和值的配置,这里只需要修改波特率这一项即可:&01be=01d8,后面的01d8表示速度(默认的115200,和我的蓝牙模块的默认波特率一样),修改这个为你想要速度即可,注意这个的速度的修改应该参考一下的公式来进行换算:

修改完这个地方,还需要修改驱动中的打开串口的波特率。在HCI_BCSP.cpp文件中,HCI_OpenConnection函数中,有:

result = bcspCommunication.OpenConnection(szComPortName, dwBaud, dwDefaultPacketSize, dwThreadPriority, TRUE);

把这里的dwBaud参数,修改为你在上面PSCONfig.psr文件中设定的波特率一样的即可。此时还应该在OpenConnection函数中开启硬件控制(波特率太高的情况下)。

修改这2个地方之后,重新编译,下载NK,注意这里在下载NK的时候,一定要做到给蓝牙复位,或重新上电。否则,你会发现连接不上蓝牙了。

如果你的串口驱动足够OK的话,那么此时你的速度应该会提升到你设定的(串口速度/8/2)K/s,很遗憾的是我的速度并没有提升,估计是我的串口驱动不够强,没有使用上硬件控制流的功能.....

至此,完成了一个最基本的文件传送的蓝牙的设置,如果希望两个蓝牙之间使用文本数据的方式来通信,可以采用Socket的方式来进行,在下载的文件中有2个别人写的示例程序(在此感谢原作者),一个是CE上的Socket方式的通信,一个是PC上的蓝牙程序。另外,在PC上进行蓝牙的Socket开发的时候,你可能还需要先安装一个XP SP2的SDK,然后才可以进行开发。

Baud rate = pskey_value/0.004096

这里还列有一些典型的速度值:

38k4 baud - 157 (0x009d)

57k6 baud - 236 (0x00ec)

115k2 baud - 472 (0x01d8)

230k4 baud - 944 (0x03b0)

460k8 baud - 1887 (0x075f)

921k6 baud - 3775 (0x0ebf)

1382k4 baud - 5662 (0x161e)

http://blog.csdn.net/lailzhihou/article/details/5817994

WinCE串口蓝牙的实现 .相关推荐

  1. linux 蓝牙脚本,arm linux串口蓝牙工具移植及使用(示例代码)

    ap6212中串口蓝牙在linux下的使用记录 一.linux蓝牙工具移植 主要使用到的工具及相关库如下: bluez-libs-3.36 libxml2-2.7.4 dbus-1.0.2 glib- ...

  2. wince串口驱动分析(转)

    wince串口驱动分析 串行通讯接口主要是指UART(通用串行)和IRDA两种.通常的串行连接电气连接上有3wire和9wire两种.3wire的接线方式下定义了发送.接收和地三根连接.其用途就如名称 ...

  3. 第十篇,STM32串口蓝牙编程

    1.串口蓝牙概念 串口蓝牙是一个蓝牙模块,内部有蓝牙模块和程序,可以进行蓝牙通信,同时提供一个串口接口,通过串口可以配置蓝牙模块进行数据传输. 2.使用串口3连接蓝牙模块 3.手机上安装蓝牙调试器 4 ...

  4. STM32+HC05串口蓝牙设计简易的蓝牙音箱

    一.环境介绍 MCU:  STM32F103C8T6 蓝牙模块:  HC05 (串口蓝牙) 音频解码模块:  VS1053B OLED显示屏:  0.96寸SPI接口OLED 开发软件: Keil5 ...

  5. 最简单DIY串口蓝牙硬件实现方案

    51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 文章目录 51单片机物联网智能小车系列文章目录 前言 一.最简单DIY串 ...

  6. WinXP与WinCE串口的运行机制之比较

    //======================================================================== //TITLE: //    WinXP与WinC ...

  7. wince 串口调试信息输出

    不管在WinCE5.0还是在WinCE6.0中,我们在调试驱动或者应用的时候都会用到打印函数.在驱动里面,我们可能会用DEBUGMSG(..),RETAILMSG(..),还有NKDbgPrintfW ...

  8. WINCE串口通讯经验小结

    这两天由于工作要求,需要在WINCE上开发一个通过串口传输文件的小工具,经过测试,调用WriteFile一直写数据时,当数据长度超过50K就会返回WriteFile出错,而且使用GetLastErro ...

  9. WINCE串口WriteFile阻塞问题解决方法

    最近在MSTAR2521平台弄串口读写的时候,经常遇到WriteFile函数阻塞,不返回,后来发现是设置的写超时不对,太长了.现在修改了写超时,就可以了. 写超时了其实也没有关系,实际上WINCE系统 ...

最新文章

  1. python之6-3嵌套函数
  2. 面试之数据库SQL编写实战案例
  3. 小白的python之路11/3总结
  4. DES加密解密算法Java实现
  5. 每天一道LeetCode-----在给定序列中找到满足nums[i]nums[i-1]nums[i]nums[i+1]的位置,要求时间复杂度是O(logN)
  6. java中判断两个方法是否相同
  7. python命令行进入帮助模式_python命令行模式直接查看帮助
  8. c语言打印菱形_没事了,搞一下C语言打印大小可变的菱形图案?
  9. 笔记本安装win7和arch linux双系统+xfce4桌面
  10. 1000道Python题库系列分享19(81道填空判断题)
  11. 《Ext JS权威指南》节选:树的动态加载及节点维护
  12. 英文字母信息熵与冗余度计算Python实现
  13. TempData[a]多个Action方法之前共享数据
  14. PMP第六版-49个子过程ITTO总结
  15. python获取本机IP地址
  16. 不花冤枉钱就能回家 --- 程序员教你如何高效抢票
  17. thinkphp 的 whereIN() 、where IN 如何使用?
  18. oracle 建分区索引_Oracle分区索引
  19. 【车载以太网】【测试】架构及测试工具
  20. java定义文章的难度系数

热门文章

  1. servlet web.xml配置详解
  2. 008-SDK框架之LYWSDKPlatformManager.h
  3. 西文是指什么_儒家君子文化:何为君子?为什么要做君子,而不做小人?
  4. Android下的Linux
  5. Java基础:IO流之File类
  6. Android性能优化典范 - 第6季
  7. 2021-11-04Oracle19c 图形化安装,在windoes上)
  8. 无需数据线,在Windows电脑上就可以浏览和编辑华为的手机文件
  9. 网络ip功放连接图_精耕新基建:智能IP网络构筑稳固的连接基石
  10. 非华为手机可以鸿蒙,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...