日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinCE串口蓝牙的实现 .

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinCE串口蓝牙的实现 . 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
此篇文章用于說明如何在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串口蓝牙的实现 .的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。