<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > STM32WB調試總結

STM32WB調試總結

發(fā)布人:345dog 時(shí)間:2020-02-17 來(lái)源:工程師 發(fā)布文章

去年四月份入手了STM32WB系列的一個(gè)開(kāi)發(fā)板,入手之后一直閑置了起來(lái)。其實(shí)還是因為懶。懶惰不僅能使綠洲變成廢墟,而且還能使好的開(kāi)發(fā)板變成了廢物。當初還動(dòng)了把它掛在咸魚(yú)上賣(mài)了的念頭,但是想了想還是不了,畢竟當初買(mǎi)的時(shí)候很費勁,還需要從米國才能買(mǎi)到。而且到手的時(shí)候正坐在研究生復試的教室里。還是好好保存了起來(lái)?,F在覺(jué)得自己沒(méi)有把它賣(mài)掉真是英明的決策。

因為實(shí)驗室項目需要就開(kāi)始調試這塊板子,因為買(mǎi)的開(kāi)發(fā)板套件(如圖1)里包含了2塊板子,正好可以做P2P通信實(shí)驗。但是小的板子并沒(méi)有把串口和U口連接,這在調試時(shí)輸出信息方面就很不方便。為了調試方便并且測試Router功能,就重新買(mǎi)了一套開(kāi)發(fā)板。

圖1 開(kāi)發(fā)板套件

以前接觸的藍牙都是用它當做數據透傳模塊,用藍牙模塊懟上MCU就OK。但是ST這款芯片是雙核芯片,一個(gè)是M4核主要負責數據的收集和計算,也就是說(shuō)我們開(kāi)發(fā)者可以只關(guān)心M4核,我們編寫(xiě)的應用程序都在M4核上進(jìn)行去跑。M0核主要負責藍牙協(xié)議棧。藍牙協(xié)議棧直接以bin文件的形式固化在M0核上,其實(shí)就是一個(gè)“黑匣子”的形式存在。兩個(gè)核之間通過(guò)“郵箱”進(jìn)行去通信。

ST附帶的P2P通信只是兩個(gè)模塊之間連接以后可以相互點(diǎn)亮LED,雖然并沒(méi)有實(shí)際的用途,但是至少給了足夠的幫助,只要認認真真地讀源碼然后更改關(guān)鍵點(diǎn)就可以讓它為自己所用。當然對于經(jīng)驗資深的藍牙開(kāi)發(fā)大咖來(lái)說(shuō)可能很快就解決。但是我作為剛接觸藍牙的初學(xué)者著(zhù)實(shí)費了一番功夫。

首先要搞清楚該芯片的啟動(dòng)過(guò)程,這對讀程序有很大的幫助,不然一會(huì )這個(gè)文件中的函數又跳到那個(gè)函數,很容易出現當前文件中的函數讀懂但是不知道在哪里調用這種情況。 芯片的啟動(dòng)過(guò)程如下。

1 在main函數中調用響應的函數來(lái)初始化時(shí)鐘,功耗模式,RTC服務(wù)器,調度器。

2 進(jìn)入app_entry.c文件中

3 調用APPE_Init()函數初始化BSP,初始化系統通道,初始化用戶(hù)自己的應用程序。關(guān)于系統通道初始化的問(wèn)題。郵箱的系統通道只有M4核來(lái)初始化。

1)在app_entry.c文件中的APPE_Init()函數中調用appe_TL_Init()函數初始化對于CPU2的系統和存儲通道

2)在appe_TL_Init()調用TL_Init()函數進(jìn)入tl_mbox.c文件初始化CPU2共享的SRAM2的表。

3)返回到app_entry.c文件中

4)調用shci_init()函數進(jìn)入shci_tl.c函數中初始化CPU2的系統通道

5)在shci_tl.c文件中調用TL_SYS_Init()函數進(jìn)入tl_mbox.c文件中

6)從tl_mbox.c文件中返回到shci_tl.c文件中再返回app_entry.c文件中

7)在app_entry.c文件中調用TL_MM_Init()文件進(jìn)入tl_mbox.c中初始化CPU2的內存通道

8)從tl_mbox.c文件中返回到app_entry.c文件中

9)在app_entry.c中調用TL_Enable.c文件中進(jìn)入tl_mbox.c文件中開(kāi)始CPU2.然后返回到main函數中等待系統通道就緒

10)Tl_mbox.c文件中將“收到系統就緒事件”傳送給shci_tl.c文件中采用IPCC中斷調用shci_notify_asynch_evt()函數進(jìn)入app_entry.c中報告給app_entry.c

11)由于此時(shí)整個(gè)系統處在等待狀態(tài)。此時(shí)在等待狀態(tài)下調用shci_user_evt_proc()進(jìn)入shci_tl.c文件中再向應用程序報告之前先正確處理報告事件

12)處理后從shci_tl.c文件中調用APPE_SysUserEvtRx()進(jìn)入app_entry,c文件中向用戶(hù)程序報告此時(shí)系統通道已經(jīng)就緒。

13)在接收到“系統就緒事件”后向用戶(hù)報告系統通道就緒前,用戶(hù)可以調用app_ble.c中的APP_BLE_Init()來(lái)啟用BLE棧

14)在A(yíng)PP_BLE_Init()函數中調用hci_init()函數進(jìn)入hci_tl.c文件再調用BLE_TL_Init()函數進(jìn)入tl_mbox.c文件中初始化BLE傳輸層(注系統剛開(kāi)始是初始化了所有層,然后再在這里才開(kāi)始初始化BLE的傳輸層)

15)完成BLE傳輸層初始化以后調用SHCI_C2_BLE_Init啟動(dòng)BLE協(xié)議棧

16)CMO接收到啟動(dòng)命令后返回一個(gè)命令

17)接收到該命令后可以發(fā)送BLE命令

18)調用Ble_Hci_Gap_Gatt_Init();初始化GAP層和GATT層

初始化GAP層和GATT層完成后,就可以利用藍牙來(lái)做我們自己的的事情。官方的Demo里出了一些HAL庫驅動(dòng)和BSP驅動(dòng)外。和我們關(guān)系比較大的主要是“main.c”,“app_ble.c” “p2p_server_app.c” “p2p_client_app.c”和“p2p_stm.c”文件。

其中p2p.stm.c文件主要是在應用程序中創(chuàng )建服務(wù)和特性以更新特征,接收通知或寫(xiě)入命令,并在BLE無(wú)線(xiàn)堆棧和應用程序之間建立連接。aci_gatt_update_char_value()函數用來(lái)更新特性的值,其中的一個(gè)參數是數據的長(cháng)度,我們如果想發(fā)送任意長(cháng)度的數據,只需要把這個(gè)長(cháng)度參數更改即可,程序中的所有此函數的長(cháng)度都要與自己所需的數據長(cháng)度相一致。(長(cháng)度的范圍在0-243字節)。服務(wù)初始化函數為p2p_stm_Init()函數主要有以下功能1 注冊服務(wù)控制的點(diǎn)對點(diǎn)處理事件 2 初始化服務(wù)UUID aci_gatt_add_ser()函數將P2P服務(wù)作為主要服務(wù)。3初始化P2P寫(xiě)特性 aci_gatt_add_char()函數添加寫(xiě)特性 4 初始化P2P通知特性 aci_gatt_add_char_add notify characteristic 5 更新通知特性 P2PS_STM_update_char()    

與應用相關(guān)的函數主要在p2p_server_app.c文件和p2p_client_app.c文件中。P2PS_STM_App_Notification函數主要用來(lái)接收并響應來(lái)自GATT層的BLE堆棧的內部事件。P2PS_send_Notification()函數調用服務(wù)函數來(lái)更新通知特性。 

app_ble.c文件中主要是對BLE的一些操作,定義了一個(gè)諸如context,廣播操作函數,連接操作函數,掃描操作函數和GAP_GATT層操作函數。其中Ble_Hci_Gap_Gatt_Init(void)函數用來(lái)初始化GAP_GATT層,在函數中調用aci_hal_set_tx_power_level(1, CFG_TX_POWER);函數可以更改****功率。Adv_Request函數則廣播數據,將設備的廣播名字,設備的廣播間隔廣播出去。void BLE_SVC_L2CAP_Conn_Update(uint16_t Connection_Handle)函數主要喲用來(lái)更改連接間隔,該函數中調用aci_l2cap_connection_parameter_update_req函數可以更改連接的一些參數。

“p2p_client_app.c”文件中沒(méi)有為客戶(hù)端創(chuàng )建服務(wù),只需要注冊GATT客戶(hù)端處理程序就可以在應用程序中識別通知GATT事件。和開(kāi)始發(fā)現管理遠程P2P服務(wù)特性相關(guān)的api函數主要有aci_gatt_disc_all_char_of_service(),aci_gatt_disc_all_char_disc() aci_gatt_write_char_disc()函數。在文件中管理GATT事件用來(lái)查找和注冊遠程設別特征句柄函數為SVCCTL_EvtAckStatus_t Event_Handler()函數。 當服務(wù)和特性發(fā)現后,Client函數可以用來(lái)使用寫(xiě)特性控制遠程設備,利用接收通知來(lái)通知特性。

有關(guān)源碼和相關(guān)文檔鏈接如下:

?STM32WB P2P.zip:

下載地址 https://download.csdn.net/download/dog345/12157047

?STM32WB器件文檔手冊.zip:

下載地址 https://download.csdn.net/download/dog345/11153831

?STM32WB點(diǎn)對點(diǎn)通信:

下載地址 http://share.eepw.com.cn/share/download/id/386814

?STM32WB點(diǎn)對點(diǎn)通信相關(guān)文檔:

下載地址 http://share.eepw.com.cn/share/download/id/386815

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>