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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

stm32wb55 基于rtt的ble sample制作过程

發布時間:2023/12/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32wb55 基于rtt的ble sample制作过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

stm32wb55 基于rtt的ble sample制作過程

準備活動

硬件

  • stm32wb55 nucleo開發板
  • stm32wb55 dangle

軟件

  • rtthread stm32wb55 bsp
  • st官方 stm32wb固件包

開發環境

  • keil MDK
  • vscode
  • rtthread env

概述

本文的目的是將ST官方的STM32WB55 固件包里的BLE sample移植到RT-Thread,最終變為rtt生態的一個軟件包,讓更多開發者都可以直接做基于rtt開箱即用。

移植前準備

生成基于rtt的stm32wb55的最小工程

首先需要clone rtthread的stm32wb55的bsp,然后創建基本的工程,這一步很簡單,從官方github倉庫clone最新的代碼,然后定位到stm32wb55的bsp,使用env scons --dist生成wb55最小工程。如下所示:

xph@XPHPC D:\GitHub\rt-thread\bsp\stm32\stm32wb55-st-nucleo > scons --dist scons: Reading SConscript files ... make distribution.... => stm32wb55-st-nucleo => start dist handle => copy stm32 bsp library => copy bsp drivers => components => include => libcpu => src => tools update mdk5 project update iar project done!

然后用keil打開,編譯燒錄到nucleo開發板中驗證。當開發板LED1藍燈開始閃爍,同時串口有打印信息輸出,則表示基于rtthread的最小工程生成成功。

\ | / - RT - Thread Operating System/ | \ 4.0.3 build Jan 7 20212006 - 2020 Copyright by rt-thread team msh >

st官方固件包刪除不相關代碼

我們從最基礎的beacon工程開始移植,刪除其他不必要的工程文件和文件夾,方便代碼分析工具分析和定位。如果工程文件夾太多,諸如vscode source insight這類代碼工具就很難做到精確跳轉。
如下圖所示,我只保留基于keil mdk的beacon工程,其他的不相干的工程全部刪除。

檢查的方法也很簡單,在固件包中搜索一下main.c函數,看一下有沒有多余的就行了。
然后打開這個beacon工程,編譯一下,沒有錯誤,沒有警告,那么準備工作就做好了。

移植

我的移植思路是,將ST官方的sample當作rtt中的一個線程,這樣子即不影響其他線程的使用移植起來也比較方便。

工程創建

  • 創建ibeacon線程
  • static int ibeacon_thread_init(void) {rt_thread_t ibeacon_thread;ibeacon_thread = rt_thread_create("ibeacon",ibeacon_thread_entry,RT_NULL,1024,2,10);if (ibeacon_thread != RT_NULL){rt_thread_startup(ibeacon_thread);}return RT_EOK; }INIT_APP_EXPORT(ibeacon_thread_init);
  • 將st官方sample中的main函數移植過來,放在ibeacon線程的入口函數中
  • static void ibeacon_thread_entry(void *parameter) {LOG_D("ibeacon thread entry...");/*** The OPTVERR flag is wrongly set at power on* It shall be cleared before using any HAL_FLASH_xxx() api*/__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);HAL_Init();Reset_Device();Init_Exti();MX_GPIO_Init();MX_RTC_Init();/* Init code for STM32_WPAN */APPE_Init();while (1){UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);rt_thread_mdelay(10);} }
  • 將STM32_WPAN中間件整體復制過來,然后根據st的sample工程將BLE相關文件都加進去

  • 編譯,根據編譯錯誤將缺失的文件加入到工程中去,直到編譯完成

  • 關于文件的分組

  • STM32_WPAN這個文件夾里面存放的是ST關于無線協議的中間件,包括BLE、thread、zigbee等等,所以移植的時候直接整體搬過去就好了,至于里面的東西可以暫不做考慮。
  • STM32WB特有的低功耗管理組件和列表單獨做通用分組
  • 其他需要用到的文件統一放到ibeacon分組中
  • 移植注意事項

    以上工作全部完成后,編譯運行后程序運行正常,但是通過nrf connect是無法掃描到beacon的,對比分析后發現兩部分地方需要修改。

    中斷處理函數需要移植

    之前的固有印象是STM32的HAL庫中斷處理函數全都是虛函數方式然后通過注冊回調函數來最終執行用戶自己的中斷服務函數。這也是忽略該步驟的重要原因之一,因為之前的STD或者寄存器版本沒有寫中斷服務函數是會編譯報錯的。

    將以下三個中斷服務函數放在ibeacon線程.c文件中。

    /*** ! RTC timeserver處理中斷服務函數 */ void RTC_WKUP_IRQHandler(void) {HW_TS_RTC_Wakeup_Handler(); }/*** ! IPCC 通訊收發中斷處理函數 */ void IPCC_C1_TX_IRQHandler(void) {HW_IPCC_Tx_Handler();return; }void IPCC_C1_RX_IRQHandler(void) {HW_IPCC_Rx_Handler();return; }

    這三個中斷服務函數主要是用來處理CPU1和CPU2之間的通訊的,這部分內容后面再介紹。

    link文件需要更改

    STM32WB是一顆雙核MCU,他們共享了部分flash和RAM,所以不能像傳統的單核M4內核那樣定義link文件,需要將部分flash和RAM資源留出來給協處理器使用。具體的更改直接參考ST的sample工程中的link文件。

    經過以上兩步的修改,編譯燒錄后就可以正常使用了。

    備注

    名詞解釋

    • ACI: Application command interface 應用層命令接口
    • CLI: Command line interface 命令行接口

    總結

    以上是生活随笔為你收集整理的stm32wb55 基于rtt的ble sample制作过程的全部內容,希望文章能夠幫你解決所遇到的問題。

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