电竞比分网-中国电竞赛事及体育赛事平台

分享

資料開源!基于STM32和FreeRTOS DIY炫酷智能手表

 limao164 2024-07-13 發(fā)布于四川

圖片

這是一個基于STM32F411CUE6和FreeRTOS和LVGL的低成本的超多功能的STM32智能手表~

圖片

系統(tǒng)組成

??系統(tǒng)框圖如下所示,主控使用STM32F411CEU6,操作系統(tǒng)使用FreeRTOS,圖形庫使用的LVGL。

傳感器部分:手勢識別使用6軸MPU6050;心率血氧使用的是EM7028,EM7028的資料很少,之前自己寫的局部尋峰算法來計算心率但是效果不好,現(xiàn)在改成了使用官方的庫;海拔測量用的氣壓計SPL06-001;電子指南針使用LSM303DLHC;V2.4版本,藍牙芯片換成了KT6368A,有SPP功能,可以無線升級。

圖片

軟件架構(gòu)

??手表的軟件架構(gòu)如下所示,具體的細節(jié)詳見倉庫的代碼。

圖片

??V2.4版本以后的手表的代碼分為Bootloader和APP了,為的是方便用戶戴在手上進行不用拆解的升級,BOOT區(qū)后面劃分了一個Flag區(qū),用于記錄是否是完整的APP,這個位置是APP傳輸完成后才記錄的,為的是保證程序完整性。

圖片

功能說明

大致功能表如下圖所示:

圖片

  1. 電源部分:手表使用的是3.7V鋰電池,通過TPS63020提供3V3電源,V2.2版本之后,充電口留了兩個焊盤,用來接觸磁吸充電口。特別注意,V2.0版本使用的無線充電,使用了芯片T3168,但是用無線充電的話,加上線圈和多的器件,體積就非常大了,同時還有散熱問題。

  2. 藍牙部分:V2.2用的是HC-04(郵票孔封裝),后面的V2.3版本改成了用國產(chǎn)芯片KT6328A,V2.4換成了KT6368A。

  3. 輔助功能部分:計算器:當(dāng)時做帶浮點數(shù)的計算器做得很煩,字符串處理很麻煩。現(xiàn)在這個計算器是通過一個數(shù)字棧和一個符號棧實現(xiàn)的,具體看代碼。

  4. NFC部分(現(xiàn)已刪除):V2.0版本的IC卡復(fù)制器模塊介紹詳見:https:///no_chicken/ICka-fu-zhi-qi.
    在V2.2版本中,為了精簡減小體積,僅有UID卡,可以被外部讀卡器讀寫。而在V2.0版本中,用的是RC522和一張UID卡組成的,可以自行復(fù)制外部IC卡,然后也可以被外部讀卡器讀寫如下圖所示:

圖片

版本更新的功能說明

V2.4.2增加的功能:

  1. 加入PageManager.c, 方便進行頁面管理, 代碼框架有較大改動.

  2. 加入HWDataAccess.c, 用于UI層訪問BSP層, 當(dāng)需要移植到仿真器時, 復(fù)制Func文件夾和GUI_App文件夾過去, 將HW_USE_HARDWARE定義為0即可.

  3. 同步更新了LVGL的Vscode仿真工程.

V2.4.1增加的功能:

  1. 睡眠時DeInit串口的IO口,設(shè)置為輸入,修復(fù)休眠功耗很高的情況,現(xiàn)在休眠狀態(tài)電流800多uA.

  2. BootLoader和APP都加入長按KEY1關(guān)機功能.

  3. APP中按鍵KEY的BSP改動,現(xiàn)在是按鍵按下松開才發(fā)生作用,避免了一些誤觸情況.

如何燒錄

由于具體的步驟太多這里不放了, 詳細見Firmware中的README文件: BootLoader和APP說明

如果你覺得帶BootLoader可無線升級的V2.4.0版本比較麻煩, 可以自行下載ver2.3.2分支, 用以前的代碼.

實物圖

圖片圖片
圖片圖片
圖片圖片

軟件部分設(shè)計細節(jié):

1.低功耗設(shè)計

??手表的模式分為3個。第一個是正常的運行模式,手表正常運行;第二個是睡眠模式,MCU進入STOP模式,MPU6050仍在記步數(shù);第三個是關(guān)機模式,TPS63020直接關(guān)閉使能,此時無3V3供電,只有Vbat有供電。

??在最開始的時候,手表從睡眠到喚醒使用的是MPU6050的運動功能,打開中斷,喚醒,但是這樣嘗試過,有個問題就是需要抖動幅度很大才能觸發(fā)中斷。所以最后還是用的RTC定時中斷,然后定時檢測當(dāng)前手勢狀態(tài),如果有抬腕動作則喚醒。

??MPU6050不能直接使用DMP庫,初始化后功耗很高,需要進行一些改動,才能讓功耗下來,具體看工程代碼。

??如果藍牙使用KT6328A,不建議關(guān)閉藍牙使能,他的待機功耗很低。但后面2.4版本Back板改了,可以完全關(guān)閉藍牙,所以直接使用KT6368A即可,不用的時候關(guān)掉藍牙就行。

??最后接3V3測試,運行模式70-80mA,待機模式1mA左右,關(guān)機模式基本不耗電只有RTC在工作。當(dāng)然后面沒有測試電源接到Vbat端經(jīng)過DCDC供電的情況,這個功耗就完全看DCDC的效率的。

2.心率血氧

??血氧部分暫時還沒有寫。心率計算本來使用的官方的庫,但是計算太慢了,后面改為自己寫的一個簡易的峰值檢測的算法。EM7028的PPG信號如下圖所示

圖片

3.數(shù)據(jù)存儲

??目前使用的外部的EEPROM進行數(shù)據(jù)存儲,主要用于存儲設(shè)置等,詳細可以看Datasave.c文件。

4.頁面切換邏輯

??為了實現(xiàn)頁面切換,可以返回上次的界面,這里使用了一個棧來存儲頁面對應(yīng)的,例如,使用user_Stack_Pop(&ScrRenewStack);彈出上一個界面,然后進入到新的界面再使用 user_Stack_Push(&ScrRenewStack,(long long int)&ui_HomePage);入棧一個界面的指針地址。注意不能直接在push操作使用類似ui_HomePage入棧,它是會動態(tài)變化的,這是個很大的坑。

//key1 pressedif(keystr == 1){    user_Stack_Pop(&ScrRenewStack);    if(user_Stack_isEmpty(&ScrRenewStack))    {        ui_MenuPage_screen_init();        lv_scr_load_anim(ui_MenuPage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,true);        user_Stack_Push(&ScrRenewStack,(long long int)&ui_HomePage);        user_Stack_Push(&ScrRenewStack,(long long int)&ui_MenuPage);    }    else if(ScrRenewStack.Data[ScrRenewStack.Top_Point-1] == (long long int)&ui_HomePage)    {        ui_HomePage_screen_init();        lv_scr_load_anim(ui_HomePage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,true);    }}

5.計算器邏輯

??計算器的邏輯就是很經(jīng)典的計算器問題,經(jīng)典的就是開兩個棧,一個存放符號,一個存數(shù)字,然后進行出棧計算等等操作,以1+2*6/3為例,具體的過程如下動圖所示。但是會有一個問題就是小數(shù)點,這個動圖展示的只是整數(shù)計算的邏輯,帶小數(shù)點的詳細見代碼。

具體整數(shù)計算的過程是:

  1. 遍歷表達式,當(dāng)遇到操作數(shù),將其壓入操作數(shù)棧。

  2. 遇到運算符時,如果運算符棧為空,則直接將其壓入運算符棧。

  3. 如果運算符棧不為空,那就與運算符棧頂元素進行比較:如果當(dāng)前運算符優(yōu)先級比棧頂運算符高,則繼續(xù)將其壓入運算符棧,如果當(dāng)前運算符優(yōu)先級比棧頂運算符低或者相等,則從操作數(shù)符棧頂取兩個元素,從棧頂取出運算符進行運算,并將運算結(jié)果壓入操作數(shù)棧。

  4. 繼續(xù)將當(dāng)前運算符與運算符棧頂元素比較。

  5. 繼續(xù)按照以上步驟進行遍歷,當(dāng)遍歷結(jié)束之后,則將當(dāng)前兩個棧內(nèi)元素取出來進行運算即可得到最終結(jié)果。

6. LVGL在windows在vscode的仿真配置參考:

??已經(jīng)更改好的可以跑的代碼放在了lv_sim_vscode_win這個文件夾中,應(yīng)該可以直接使用vscode打開,注意,需要大家自行改一下Cmake和make等相關(guān)設(shè)置的路徑?。。?!

仿真文件也放在了附件里了。配置環(huán)境可以參考的鏈接:
https://blog.csdn.net/weixin_49337111/article/details/136536375。

圖片

轉(zhuǎn)載自:https:///no_chicken/zhi-neng-shou-biao-OV-Watch_V2.2#P4

關(guān)注公眾號,加星標,回復(fù)1024獲取學(xué)習(xí)資料,每天進步一點點。


聲明:

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多