MCU application

STM32H5 USB Composite(DFU+HID)

前言 很多人在使用STM32建置USB Composite官方基本上僅給H503 CDC+HID,但部分客戶會有需求為DFU+other,這邊依據外掛包去修改 I-CUBE-USBD-Composite I-CUBE-USBD-Composite是一個非官方的軟體包,他協助我們快速建立一個模板,基本上把部分物件修改即可使用 如何安裝軟體包 下載地址:I-CUBE-USBD-Composite 1. Download AL94.I-CUBE-USBD-COMPOSITE.1.0.0.pack from repo. 2. Add AL94.I-CUBE-USBD-COMPOSITE.1.0.0.pack to CubeMX. Enable the classes you want Coding 第一步在usbd_conf.h修改數字0變成1 第二步在usbd_conf.修改&hpcd_USB_FS;變成&hpcd_USB_DRD_FS;因H5定義不同第三步在usbd_dfu.c數字要設定相反(如圖右邊NBR為1) 第四步增加usbd_dfu.h右側定義 第五步把usbd_composite.c中DFU順序往上 再來是生成時候會少的部分在usb.c中並把中斷優先序往上 在中斷stm32h5xx_it.c需要加上TP1_Set();和TP1_Reset(); 這部分在使用軟體包生成stm32h5xx_it.h會缺少需要額外加上 修改以上後基本上USB DFU剩下依據各系列去調整usbd_dfu_if.c/usbd_dfu_if.h這2塊即可HID或其他部分記本上已經完整所以不太需要修正 Driver Setting 因微軟Driver這邊沒有設定好所以需要手動讓系統認到需要照以下方式使用 這時會出現一個未知的裝置需要再次操作 參考

STM32H5 USB Composite(DFU+HID) Read More »

Azure RTOS ThreadX on STM32 MCU

前言 目前在最新系列H5/U5/U0 /C071使用STM32CubeMX建置出USB的基底都變成USBX是以Azure RTOS ThreadX 架構去撰寫,變成如果需要使用舊的FreeRTOS會必須自己搬移code相對變得麻煩許多,但因新的Azure RTOS在結構上優化這邊就嘗試研究撰寫整理文章 簡介Azure RTOS Azure RTOS 的核心是 ThreadX,它是一種即時內核,ThreadX 擁有多種競爭優勢,其中包括多種安全關鍵認證。Microsoft 提供Azure RTOS 也能夠最大限度地減少品質和可靠性問題,大大降低此類問題可能引發的冗長調試會話,總體上有利於 RTOS 用戶。 ST支援與架構 這邊會以主要THREADX架構往下生成 這邊留意Azure RTOS有支援USB PD但ST還未整合完全需要自己寫USB-PD is supported by ST USBPD library and applications provided in STM32Cube MCU packages. But it is not yet integrated with STM32 Azure® RTOS MW solution. THREADX簡介 ThreadX 是一個即時作業系統 (RTOS),專為嵌入式系統而設計 ThreadX 支援表如下 ThreadX操作 從

Azure RTOS ThreadX on STM32 MCU Read More »

STM32CubePrg API(example project)

前言 這邊因協助客戶需要把ST更新軟體鑲嵌在客戶自訂的軟體上面,因此這邊就深挖STM32CubePrg原始的接口,並把他逐步整合到客戶指定的樣板上,基本上架構是以STM32CubePrg為主,這邊interFace會以USB DFU為主介紹(HID等客製化方式不再此介紹範圍) STM32CubePrg Project 結構 這邊主要會拆成2部分一部份是設定連接MCU的資料與連接上更新的interface,首先我們會先到以下路徑開啟project 該資料夾是在安裝STM32CubePrg後就會存在C曹個人資料夾中 第一部分是Set MCU更新資料 這邊幾個注意事項這邊已USB為例 該路徑事需要指向Database內,確認需要被更新MCU為哪顆保留一個該檔案即可,也可以先使用ST-LINKV2連線該資料會出現在STM32CubePrg Information上,可以不用全部都採納,但指向路徑必須設定正確 更新主軸API(USB為例) 再來是選擇InterFace去完成,這邊選用USB 這邊基本上做FW download Function就是downloadFile 其他都是在檢測是否有正常連線到,這邊有測試該Function是否能帶入絕對路徑,結果是部分會fail,可能在內部最佳化部分絕對路徑相對資源所以會建議使用相對路徑去執行 參考

STM32CubePrg API(example project) Read More »

USB device custom HID class on STM32

前言 USB 的東西,肯定是需要PC 端的軟體配合,尤其是這一種屬於比較客製化的 Custom HID 的東西,雖然HID 是不需要PC端的驅動程式,但還是得要準備自己的上層應用軟體,這個不像一般標準的Virtual COM 可以用超級終端機,這邊針對Device的HID部分較多客戶會有需求希望做成客製化因此該文章會來探討這部分 STM32CubeMX設定 這邊基本上開啟USB後再ST會有選單可以協助弄出客製化設定的HID 其中這一塊是可以針對自己需求新增和配置,可以先使用預設數值再做修正,然後就可以調整clock tree後生成檔案 STM32CubeIDE 這邊主展開專案可以看到主要有幾個c檔,這3個檔案是主要要客製化HID部分會需要確認的檔案可以看下方檔案描述Function 這邊針對Size部分可以再usbd_customhid.h看到CUSTOM_HID_EPIN_SIZE and CUSTOM_HID_EPOUT_SIZEdefinesto 0x40 (64 bytes):這部分主要是因一開始STM32CubeMX設定64 USB裝置標準描述符會在usbd_custom_hid_if.c 這個file內可以詳細看 Information for Developers | USB-IF: 再來是上報資料給電腦CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE],建議使用 HID descriptor tool工具產生報告符,這裡要注意的是報告描述符大小USBD_CUSTOM_HID_REPORT_DESC_SIZE,一定要與實際產生的報告描述符大小(使用HID descriptor tool可查看)相對應,否則會導致HID設備配置失敗。 再來就是定時發送report來更新數據了,USBD_CUSTOM_HID_SendReport,這個函數在usbd_customhid.c中定義 參考

USB device custom HID class on STM32 Read More »

STM32 OneWire for Charger

前言 目前客戶需求有接觸到包code部分,需要協助開發完成1 wire對於電池的感應等等,會走UART OneWire需要去驗證是否可以正常work ,在下一版規劃上面也會有些許不同,這邊因先把one wire資訊統整併做驗證方法上做比較細部說明。 簡介 OneWire匯流排操作,將stm32的串列的TX接腳與RX接腳短接後與1-Wire匯流排連接 基本上在STM32CubeMX上設定和一般UART是相同的 線路上外部對接即可 這邊Code部分 1-Wire/UART 位元時序 UART 可作為匯流排主控器,因此在 TX 輸出引腳從高電平到低電平的轉換時開始所有通訊。當電氣介面將緩衝的 TX 訊號連接到 RX 輸入接腳時,UART 每發送一個位元組就會接收一個位元組。 圖 6 和圖 7 產生的讀取時隙使用的波特率為 115,200。從 1-Wire 讀取 0 接收的 RX 位元組範圍從 0xFE 到 0x00,取決於從裝置的內部時基和 IO 上升時間。 參考

STM32 OneWire for Charger Read More »

ECDSA_SignVerify(SHA256) STM32F4 series

前言 針對驗證簽名部分,因近期客戶需求但MCU部分被綁定無法放入SBSFU去做更新,而且SBSFU更新部分目前提供範例也僅UART,其他interface需要自己coding,最後這邊討論後只做簽名驗證來防程式被修改,該章節會介紹簽名驗證流程和原SBSFU流程 參考軟體包 這邊因單純驗證簽名因此直接參考x-cube-cryptolib即可,因這邊使用F4系列所以這邊參考比較舊相近系列L152,因G4或L4是相對較新的系列避免有些Function不存在 圖解流程基本上如下 其實可以看到MCU會需要處理部分主要是把資料轉換,因這邊選用是SHA256所以是把檔案轉換SHA256格式,再透過ECC校驗,這邊公/私鑰匙的生成是透過OpenSLL生成,使用為外部軟體非在MCU內執行生成 SBSFU簡介 因SBSFU是包含加密更新部分,而F4是屬於比較舊款因此支援部分沒有到這麼多參考圖如下 而已更新步驟來說會如圖,因此你可以看到如果需要加密更新你的code size不能太大另外,或你的Flash size需要夠大(APP Code需要2倍大小,這邊大概說明流程,因這次只使用到驗證簽名部分所以這邊就不詳細說明 ECC驗證簽名Code 在程式上會分成2部分 Boot code和APP code,App code部分比較簡單會透過外部軟體所增加標頭檔部分打包起來 這邊主要2個檔案需要修改1.system_stm32f4xx.c2.ld檔案 這邊是用python寫外部加密打包檔案這邊跟MCU較不相關未來再詳細說明 把APP剛剛規劃標頭檔相關位置填入,因驗證部分會需要知道相關資料位置 在執行檔中需要把Key引用帶入,在執行檔最後加入下方 鑰匙部分也是需要call外部軟體生成(OpenSLL) 最後在main.c部分就比較簡單主要是把加密驗證簽名部分補上即可,前半在做把鑰匙BIN和簽名BIN輸入陣列中 參考

ECDSA_SignVerify(SHA256) STM32F4 series Read More »

ST7735 TFT LCD Module with 4 IO 128*160

前言 LCD的選擇有很多種,尺寸也很多,但若需要顯示彩色的畫面,這邊推薦ST7735, CP值最高,效果也不錯的。本範例將介紹ST7735 彩色1.8吋顯示螢幕與STM32的使用方式。這邊參考Arduino Adafruit函式庫,函式庫為所有的LCD和OLED顯示器提供了通用語法和圖形功能。 接線說明 這邊可以參考以下說明 Sample Code 這邊可以直接移植Arduino或網路直接抓Driver這塊因為便宜有更多人選用開放資源也很多 以下2個是最常使用到Function 下面可以看到是常用Fuction詳細內容 影片參考 ST7735驅動程式設計要點 參考

ST7735 TFT LCD Module with 4 IO 128*160 Read More »

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 »

Shopping Cart