MCU application

How to use STM32CubeAI on STM32CubeMX

前言 這邊ST推出STM32CubeAI與NanoEdge AI Studio 2款軟體針對不同用戶族群,這邊會針對SRM32CubeAI做初步介紹與使用(STM32CubeAI 目前是掛載在STM32CubeMX底下的軟體包X-Cube-AI,這邊STM32CubeAI僅針對第3方軟體做轉換,不能自動生成AI model) STM32CubeAI 這邊會由STM32CubeMX去更新下載軟體包,並將其第三方生成的軟體轉譯成C code掛在STM32CubeMX專案中 這邊直接照一般步驟生成專案後把X-cube-AI加上專案中 下一步驟針對STM32CubeMX加入X-Cube-AI轉譯軟體包 如範例這邊如果都完成按下分析會跑成功 在專案上就會出現對應接口,且model也會放置在middlewares上 結構 參考

How to use STM32CubeAI on STM32CubeMX Read More »

Discovery STM32H750XB-External Loader

前言 由於 STM32CubeProgrammer 中,對 Flash 支持的型號有限,只能覆蓋一部分 MCU和 Flash 的型號,無法完全滿足客戶的需求。stm32CubeMX 製作 external Flash loader 的方法。客戶可以根據自己的型號,進行定制化的生成。這邊使用Discovery STM32H750XB為基準-從CubeIDE+CubeMX建立Eternal Loader 給CubeProgrammer使用 STM32CubeMX設定 建立QSPI配置以及DriverFlashMemory 官方有寫好的Code複製到資料夾內 這邊官方有提供範例可以下載,可以再依照範例修改 STM32CubeIDE Code修正 quadspi.h的部份將官方提供的資料複製 要在CubeProgrammer上面顯示的資訊 建立linker.ld檔以及產生出stldr檔 根據所使用的FlashMemory做配置 Complier產生stldr檔 放到STM32CubeProgrammer可以存取到的資料夾內 參考

Discovery STM32H750XB-External Loader Read More »

Internal Temperature Sensor On STM32

前言 STM32 微控制器具有內部溫度傳感器。 該傳感器非常粗略 (±1.5 °C),並在內部連接到 ADC 通道的一個,這使得輕鬆獲取設備溫度成為可能,無需任何額外組件即可使用。但請注意此溫度為相對溫度非絕對溫度,且有溫度最高與最低限制無法完全取代一般sesnor 內部計算方式 這邊選用STM32WB35為主要參考(It support the temperature range –40 to 125 °C.)這部分可以參考各系列的reference manual未經校準的內部溫度傳感器更適合用於檢測的應用溫度變化而不是絕對溫度。 數值位置要點 這邊是TS_CAL1/TS_CAL2要從Datasheet中抓取出對應Flash位置數值TS_CAL1_TEMP與TS_CAL2_TEMP分別就是對應30與130 計算公式及修正如下 STM32CubeMX設定 這邊需要再ADC部份把Temperature Sensor Channel 與Vrefint Channel開啟,針對Vrefint Channel是可選的未得確定內部實際Vref電壓來提高精準度 STM32CubeIDE Code 這邊有2種方式可以選擇一種是直接寫公式如下code區域或使用官方給出Function 這邊主可以參考網路範例TMPSENSOR_getTemperature把其數值抓取下來公式部分修正即可 Note 有反映讀取內部溫度時不是標準3.3V時會建議使用__HAL_ADC_CALC_TEMPERATURE()The value returned by __HAL_ADC_CALC_TEMPERATURE() seems to be closer to the temperature measured on the microcontroller’s casing.在電壓Vref不是3.3時會建議使用__HAL_ADC_CALC_TEMPERATURE() refer Web 參考

Internal Temperature Sensor On STM32 Read More »

STM32 USB_Device IAP practice

IAP前言 IAP(In Application Programming,應用內編程),是指程序在運行過程中對User Flash的部分區域進行燒寫,目的是為了在產品發布後可以方便地通過預留的通信口對產品中的固件程序進行更新升級。 IAP流程 這邊是開啟2包專案,其中一包是DFU另一包APP則是看需求撰寫,流程如圖,為便捷開發我們都會以DFU為起始位置 USB DFU實作注意事項 這邊因是燒2包程式,把Flash切割成2個區塊,因此需要留意DFU在程式中所占比的空間與要轉跳到APP的指向位置 如圖這邊第一步是需要先確認DFU程式占比,一般會預留一些空間避免蓋到APP Flash 這邊要留意預留空間盡可能以一個page為單位,這邊範例以STM32CubeMX生成因DFU抓64kb為主體因此APP會燒入在0x8010000為起始,詳細參考各系列的reference_manual(這邊範例以STM32G0系列為出發) APP端燒入注意事項 使用STM32cubePrg燒入記得要去留意Start address避免去覆蓋到DFU程式區域,且要確定DFU轉跳位置須為APP起始位置 這邊一樣要去修訂ld檔,但要修訂ld檔啟示位置 這邊最後一步是要去修訂中斷向量表的Offset這邊就需要依照各自需求去做變化 這邊有個小要點,就是部分MCU會沒有RCC初始化這區塊,如果APP轉跳後不會動,可以把這塊初始化移植上去這塊在sample code上都會有但由STM32CubeMX生成檔案可能會缺少這區塊 轉跳參考機制 這邊提供官方範例是以按鈕做轉跳,如果也可以變通為特定flash位置數值判斷是否要執行DFU還是直接跳APP,這邊以APP起始位置為0x08010000作為範例 參考

STM32 USB_Device IAP practice Read More »

ST TOF Sesonr-VL53L5(Turnkey gesture)

簡介 VL53L5CX系統由硬件模塊和運行在主機上的ULD軟件(VL53L5CX ULD)組成。 硬件模塊包含飛行時間 (ToF) 傳感器。 ST 提供軟件驅動程序,在本文檔中稱為“驅動程序”。 本文檔描述了主機可以訪問的驅動程序的功能。 這些函數控制傳感器並獲取測距數據,進一步使用ST Turnkey gesture來做到手勢辨識。 ToF 傳感器系統 1.1驅動架構和內容 VL53L5CX ULD 包由四個文件夾組成。 驅動程序位於文件夾/VL53L5CX_ULD_API 中。VL53L5CX主要適用於陣列式量測距離sensor,解析度式8*8或4*4可以選擇,由多點距離資訊可以演變出不同應用,在此介紹為手勢辨識應用(須先把VL53L5的驅動包先掛載起來) X-CUBE-TOF1 這邊也可以選用ST擴充包把code附加在STM32CubeMX上,可以照VL53L5CX configuration steps P11後照順序執行即可 線路參考 這邊要注意PWE_EN和INT與I2C_RST這幾PIN是需要接上的,因在初始化時會針對這個測試沒接上會出現錯誤 應用 SW Setting 這邊其實只需要下載F401範例其他部分直接incude即可使用 如圖這邊主要GesturesMZ這個資料夾主要是AI手是辨識主要檔案,可以由Example看input輸入項,使用ST的Nonaedge AI做擴充即可完成更多手勢辨識 參考

ST TOF Sesonr-VL53L5(Turnkey gesture) Read More »

STM32 USB_Device(CDC_Standalone)

前言 使用USB中的CDC類來虛擬串口 Virtual COM Port (VCP)進行通訊,一方面對於上位機來說顯示出來的就是個串口,所有操作都還是對串口的操作;另一方面實際數據傳輸是基於USB的,數據傳輸速度得到大大提升。本文將對STM32作為從設備使用USB的CDC類虛擬串口(VCP)進行通訊的相關內容做個說明。 USB簡介 從USB版本來說目前STM32系列MCU可以認為都是USB2.0的(現在還有了UCPD,對外接口外形可以是Type-C的,但是這個是只能用於PD3.0充電使用的,無法用於數據通訊)。對於STM32系列MCU而言,USB FS的使用只要使用 DM / D- 和 DP / D+ 這兩個引腳就行了,最多也就加上ID、SOF、VBUS這三個引腳。而使用USB HS大多數還需要外接PHY芯片(比如USB3300),這樣使用的引腳就多了,至少也要用到12個引腳。STM32系列MCU在使用USB功能的時候建議使用外部時鐘,外部無源晶體或有源晶振這些,因為USB對時鐘精度要求比較高。STM32 CDC VCP對於win10和較新版本的linux來說是免驅的,對於低版本的windows系統需要安裝驅動,驅動下載地址如下:STSW-STM32102 STM32 Virtual COM Port Driver STM32CubeMX建置 #注意這邊VCP USB中斷必須要開啟USB才能被電腦認到 Code結構 上述配置生成的代碼中,對於用戶來說USB使用相關的代碼都在 USB_DEVICE > App 中,這其中最重要的就是 usbd_cdc_if.c 文件,大多數時候我們只要改寫這個文件就可以實現相關需求了,該文件主要結構與說明如下: 參考

STM32 USB_Device(CDC_Standalone) Read More »

STM32 USB_Device(DFU_Standalone)

前言 目前,ST的USB驅動有兩套,一套是早期的獨立版USB驅動,官方培訓文件中稱為Legacy library;一套為針對其Cube系列的驅動,根據晶片不同可能有區別,具體見對應晶片的Cube驅動包,官方培訓文件中稱為Cube library。 USB結構 下圖為USB應用整體系統架構 USB device library USB驅動的整個驅動庫的架構如下圖: USB device library process USB device library 使用方法 第二步: 在usb_bsp.c/h文件中,實現 USB 需要使用的底層硬件資源。具體函數見上文及附件源碼文件的註釋。第三步: 在文件usbd_desc.c/h文件中,實現USB Device的各種描述符。具體函數見上文及附件源碼文件的註釋。第四步: 根據需要修改usbd_usr.c/h文件。第五步: 根據源代碼進行各種配置 第六步: 實現USB Device所使用的類的源文件。例如本文使用了USB Device 的CDC類,所以上圖中出現了usbd_cdc_vcp.c/h文件。第七步: 在自己芯片對應的stm32f4xx_it.c文件中添加USB中斷處理函數。第八步: 在main.c文件中,定義USB_OTG_CORE_HANDLE USB_OTG_dev全局變量,然後調用如下函數初始化USB Device 即可 參考

STM32 USB_Device(DFU_Standalone) Read More »

VL53L0X TOF Sensor Introduction

一、介紹 1、原理 採用940nm垂直腔面發射激光器(Vertical-Cavity Surface-Emitting Laser,簡稱VCSEL)發射出激光,激光碰到障礙物後反射回來被VL53L0X接收到,測量激光在空氣中的傳播時間,進而得到距離。VCSEL相關知識 2、參數 超小體積:4.4 x 2.4 x 1.0mm 最大測距:2m 發射的激光對眼鏡安全,且完全不可見。 工作電壓:2.6 to 3.5 V 通信方式:IIC,400KHz,設備地址0x52,最低位是讀寫標誌位。0表示寫,1表示讀 二、HW接線 這邊接上I2C線路必須要上pull up 電阻規範比照I2C user manual 三、HW Cover規範 這邊Cover的安裝等規定,會有AIR GAP與COVER對於940nm穿透度的限制ST官方針對這個部分提供AN4907 Application note 做詳細說明 理想的蓋玻片有如下特點: (1)塑料或玻璃材料無結構缺陷 (2)無可導致指紋光散射或污跡敏感的表面缺陷 (3)在近紅外(940nm±10nm)和低霧度條件下,透過率>90% (4)不降低指紋免疫性的外塗層(抗指紋或抗反射塗層) (5)單一材料。使用雙重材料可能會改變性能。   理想的結構設計(蓋玻片蓋在VL53L0X上的結構)有如下特點: 氣隙小(<0.5 mm) 蓋玻片薄 蓋玻片與VL53L0X表明的傾角低於2度 嚴格的公差。 四、校準流程 (1)Data init          調用VL53L0X_DataInit()函數一次,設備上電後調用一次。把VL53L0X_State從VL53L0X_STATE_POWERDOWN改爲 VL53L0X_STATE_WAIT_STATICINIT。VL53L0X_State是初始化狀態機,看此變量的值可以就可以知道當前的初始化進度。 (2)Static Init

VL53L0X TOF Sensor Introduction Read More »

USB-HID on STM32H750(Host)-1

USB-HID的初步認識 Descriptor即描述符,是一個完整的數據結構,可以通過C語言等編程實現,並存儲在USB設備中,用於描述一個USB設備的所有屬性,USB主機是通過一系列命令來要求設備發送這些信息的。USB有5種標準描述符:設備描述符 、配置描述符、字符描述符、接口描述符、端點描述符  。 HID描述符是關聯於接口(而不是端點)的,所以設備不需要爲每個端點都提供一個HID描述符。 設備描述符 配置描述符 字符描述符 接口描述符 端點描述符 HID讀寫設備 參考 USB初學(一)—USB-HID的初步認識 USB-HID相關筆記 MOOC-STM32 USB Training

USB-HID on STM32H750(Host)-1 Read More »

TouchGFX Introduction(STM32H750)

TouchGFX TouchGFX Designer:TouchGFX中易於使用的GUI建構工具,讓您可以建立TouchGFX應用程式的視覺外觀。 TouchGFX Generator:STM32CubeMX外掛程式,讓使用者可以依據STM32硬體來設定並產生客製化的TouchGFX抽象層(AL)。 TouchGFX Engine:一套用以驅動UI應用程式的TouchGFX C++框架。 包含螢幕更新(screen updates)、使用者事件(user events)和時序(timing)…等等的處理。 先進的TouchGFX技術針對STM32微控制器作最佳化,可在最低的CPU負荷及記憶體用量下達到最佳的性能。 TouchGFX Key Features TouchGFX provides support for DPI (parallel RGB), DBI (FMC/SPI), and DSI display interfaces 1bpp, 2bpp, 4bpp, 16bpp and 24bpp color displays 系統架構 前置作業安裝與配置 因這次使用H750,flash部分會需要外掛,因此在起步配置上會相對較複雜,這邊直接切入記憶體配置部分詳細說明 透過CubeMX安裝TouchGFX 設定MPU(memory protection unit) Enable FreeRTOSCMSIS_V2 加入Queue傳遞Touch功能的指令 加入TouchGFXLibrary專案 設定TouchGFX參數 Start Address與Start2 Address各需要一個Frame buffer 480x272x2(RBG565) = 0x3FC00

TouchGFX Introduction(STM32H750) Read More »

Shopping Cart