博客專欄

        EEPW首頁 > 博客 > STM32WB調試總結

        STM32WB調試總結

        發布人:345dog 時間:2020-02-17 來源:工程師 發布文章

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

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

        圖1 開發板套件

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

        ST附帶的P2P通信只是兩個模塊之間連接以后可以相互點亮LED,雖然并沒有實際的用途,但是至少給了足夠的幫助,只要認認真真地讀源碼然后更改關鍵點就可以讓它為自己所用。當然對于經驗資深的藍牙開發大咖來說可能很快就解決。但是我作為剛接觸藍牙的初學者著實費了一番功夫。

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

        1 在main函數中調用響應的函數來初始化時鐘,功耗模式,RTC服務器,調度器。

        2 進入app_entry.c文件中

        3 調用APPE_Init()函數初始化BSP,初始化系統通道,初始化用戶自己的應用程序。關于系統通道初始化的問題。郵箱的系統通道只有M4核來初始化。

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

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

        3)返回到app_entry.c文件中

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

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

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

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

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

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

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

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

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

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

        14)在APP_BLE_Init()函數中調用hci_init()函數進入hci_tl.c文件再調用BLE_TL_Init()函數進入tl_mbox.c文件中初始化BLE傳輸層(注系統剛開始是初始化了所有層,然后再在這里才開始初始化BLE的傳輸層)

        15)完成BLE傳輸層初始化以后調用SHCI_C2_BLE_Init啟動BLE協議棧

        16)CMO接收到啟動命令后返回一個命令

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

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

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

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

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

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

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

        有關源碼和相關文檔鏈接如下:

        ?STM32WB P2P.zip:

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

        ?STM32WB器件文檔手冊.zip:

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

        ?STM32WB點對點通信:

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

        ?STM32WB點對點通信相關文檔:

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

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞:

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宜兴市| 木里| 宾川县| 治多县| 古蔺县| 镇雄县| 盐城市| 犍为县| 白水县| 日土县| 天水市| 寿阳县| 通河县| 新干县| 阿拉善右旗| 庆阳市| 思南县| 邹平县| 将乐县| 抚宁县| 平罗县| 新郑市| 华阴市| 古田县| 惠州市| 芜湖县| 修文县| 淮安市| 河源市| 那曲县| 无锡市| 沂南县| 嵩明县| 大悟县| 南郑县| 精河县| 霍林郭勒市| 阳春市| 济宁市| 鄂州市| 高密市|