MCU application

STM32 IAP Advanced redirect using SRAM

前言 這邊因為需求在開發USB DFU 時範例都是使用外部pin腳去做切換,但實際上使用情況是會址接USB或其他Interface去下達指令,使其去切換APP or Bootloader mode,但如果使用Flash當flag使用會受限於10K 次使用次數限制,這邊其實還可以使用SRAM去做 實作 基本上要在SRAM上作區塊來使用,切記要點是不能斷電,因斷電會讓SRAM reset這邊Flag就會被清除下面就可以參考SRAM位置宣告方式 針對SRAM位置可以參考Flash ld檔 因這邊是選用STM32F401RET6因此SRAM起始區域是從0x20000000開始,另外我們要使用區域要不能被初始化,不然每次在MCU reset時會導致SRAM內資料被清除,所以我們這邊選擇的END_SRAM_ADDR 會是從0x20017FEC為最後一個,SIZE也不是原先的96KB而是96KB-所要使用區域,而這個區塊就是不會受到MCU reset等影響 這邊可以看到可以使用指標形式去存取特定位置的address來當成旗標使用 參考

STM32 IAP Advanced redirect using SRAM Read More »

MERIDIAN Thermal Imager Sensor(STM32)

前言 Meridian提供先進的CMOS熱影像解決方案,使能夠量產接收紅外線波長8~14μm的熱影像感測器,主要應用於消費與商用產品.與一般Image最大不同點在於價格低,與所需要的算力MCU即可處理大大降低應用成本其中MI0802熱影像感測模組:包括thermal sensor, Lens鏡頭, 64 KB Flash記憶體, PCBA 10-pin FPC連接器。 How do Thermal Imager sensor work? 熱影像感測器原理,物體的熱幅射經由Lens鏡頭蒐集能量,通過選定的光譜頻帶Filter,到達pixel detector轉換紅外線IR成電子訊號,透過放大器與訊號處理將電子訊號轉換成溫度影像,每一個像素pixel代表一個溫度值並且可以即時彩色顯示影像。 MI48Dx Thermal Image Processor MI48Dx 熱影像處理器是用來搭配MI0802熱影像感測模組.主要功能是處理每一個pixel的校正calibration,執行壞點修正bad pixel correction (BPC), 轉換raw data資料為溫度並抑制pixel雜訊。簡單說就是一顆小MCU,先幫你處理好前面的校準clock ,因其走的規格非常規intil 8080 可以自己對街MCU但透過MI48轉接會相對方便快速 Hardwave接線 可以看下圖總共有12pin 需要連接,留意這邊 8 ,11 ,12 pin都要接就算沒用到耶要接GND in ADDR (pin 11 of the 12 pins header) in order to use slave address of

MERIDIAN Thermal Imager Sensor(STM32) Read More »

STM32 Cryptographic Software Package

前言 客戶在部分設備中需要加密保護,ST這邊提供2種方式 V4的目錄結構 vs. V3的目錄結構 V3軟件包的目錄結構是每一個STM32系列對應一個單獨的目錄 V4的目錄結構則完全兼容Cube/X-Cube軟件包(STM32Cubexx / X-Cube-xxx)架構,方便與Cube/X-Cube包進行集成。 AES加密 這邊因客戶AES使用較多,會以AES做舉例說明。 AES介紹 AES 是一個 對稱的 加密類型。“對稱”意味著它使用 加密和解密的密鑰相同 信息此外, 都 發送方和接收方 的數據需要它的副本來解密密碼。另一方面, 非對稱 關鍵系統使用 每個不同的鍵 兩個過程:加密和解密。一個對稱系統的優勢 就像 AES 他們是 比非對稱快得多 那些。 這是因為對稱密鑰算法需要 更少的計算能力。 這就是為什麼非對稱密鑰最適合用於 外部文件傳輸。 對稱鍵更適合 內部加密. AES 流程 AES流程可以參考下面影片與圖,可以更加明白其操作 ST AES硬體加密 首先可以看到硬體加密的結構如圖ST也有提供4種模式 ST AES LIB軟體實現 這邊下載軟體包後需要把Lib加入專案中下面為Lib路徑 Middlewares\ST\STM32_Cryptographic 這邊使用以變相當便捷主要是呼叫cmox_cipher_encrypt此函數引用ST Lib即可使用 參考

STM32 Cryptographic Software Package Read More »

VL53L5CX coding structure on STM32

前言 有別於傳統 IR 感測器,VL53L5CX 採用 ST 最新一代的直接 ToF 技術,無論目標顏色和反射情況為何,都能達到絕對距離量測。它提供長達 400 cm 的準確測距,並能高速運作 (60 Hz),是目前市面上最快的多區域小型 ToF 感測器。 硬體接線 這邊因ST官方資料還蠻齊全的,針對幾個特點注意事項說明即可 這邊VL53L5線路部分基本上大多為電源與地線,主要通訊部分2 pin I2C與INT 還有一PIN GPIO output(Ln)去控制 這邊下載官方範例中可以看到定義腳位有點多,是因為這邊把左右側的小板也遇設上去 軟體移植 軟體部分可先下載STSW-IMG023,下載完成後如下圖 主要會使用到的為VL53L5CX_ULD_API與Platform,這邊官方很貼心,讓需要移植至不同平台開發者方便使用針對Platform這個資料夾中把該平台的I2C Bus Lib設定好即可使用 未定義 ST sample code已定義 如果單純只是ST 不同MCU移植可以直接拿取CubeIDE_F401RE_Example裡面Platform檔案直接覆蓋這邊僅移植至不同ST MCU上把對應Code直接搬移即可使用 但這邊會發現解析度只有4*4需要改成8*8解析度可以在code上增加 其中 X-Talk CAL 這邊範例並沒有針對Offset與X-Talk寫上去,流程圖如下只要在Ranging前把Xtalk數值抓出來即可並附加上去即可 參考

VL53L5CX coding structure on STM32 Read More »

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 »

Shopping Cart