STM32 MCU

STM32 Ethernet Sever (UDP and TCP)

前言 上篇章節初步介紹ST MCU 在Ethernet 的設定與ping ID,本章節會介紹2種Ethernet常見的UDP 和TCP Sever and Client都會介紹到。並比較2者不同處與注意事項,下一篇章節就會在更進一步討論LWIP等問題 UDP Vs TCP 2者基本上都會使用到UDP比較常使用在無線傳輸,TCP比較常用在有線傳輸比較表如下,基本上可靠度TCP會比UDP好,但傳輸效率上TCP會比較慢 STM32CubeMX setting 這邊基本上跟之前設定相同,並沒有特別不論UDP或TCP都是一樣的 Coding For SERVER 這邊可以發現大部分都有建立好Function可以使用,除了一開始IP宣告主要的要點就是接收 UDP TCP UDP主要接收是寫在callback TCP是額外寫 UDP的部分是比較簡單,TCP部分會需要額外寫除了接收外還要寫處理流程等等比較嚴謹 tcp_server_recv Server Handle 參考

STM32 Ethernet Sever (UDP and TCP) Read More »

STM32 Ethernet for H7 Series

前言 Ethernet在ST高規格MCU中存在該Funtion,但都沒有機會認真研究,這次剛好有客戶提出問題在於Ethernet如果在開機狀態下不接上,事後在接上線路會無法連上ethernet,藉由這次機會來研讀該Function的使用方式與詳細細則 STM32CubeMX設定 先設定ETH設定RMII,這邊可以參考圖設計或英文文字設定 另外開啟LWIP,這邊是以10KB為一個單位的the Heap 注意一定要把LWIP_NETIF_LINK_CALLBACK選上,不然連線狀態改變不能進入拔下或插入網路線回呼函數 Cortex-M7設定Lwip使用DMA傳遞訊息,對應的DMA記憶體定義在sram。 H7的sram分為好幾段,高速段為cpu獨享,通俗點說就是這段允許使用者寫的程式使用,但不允許DMA使用。 所以為DMA定義的記憶體或數組要避開這一段。 另外Lwip使用DMA時有互動存取問題,避開這段後,也不能讓cpu像使用普通cache那樣亂序使用,否則將可能出現嚴重問題。 (1)Lwip不被允許使用cpu專用的高速L1快取(DTCM),只能用D2 Sram區域;(2)cpu可以無序存取cache,為防止這種情況,Lwip的DMA段必須是device類型或Strongly-ordered類型,保證有序;(3)透過MPU配置這段cache,其中一段允許share、允許buffer,長度為256Byte,放置TXRX互動存取頭;另外一段不share,不buffer,不cache;長度32k Coding (添加簡單的 Hello UDP ) 在 main.c 的開頭新增以下包含檔案: 在 main.c 寫入 參考

STM32 Ethernet for H7 Series Read More »

STM32H5 DMA 2D addressing Overview

GPDMA GPDMA 是一種系統週邊設備,是 AHB 匯流排上的雙埠主設備。 它被用於透過鍊錶在外部和/或記憶體之間傳輸資料。 所有 GPDMA 可程式傳輸均在系統層面提供更高效能,並使 CPU 無需執行這些資料傳輸任務。 STM32CubeMX建置 這邊和舊的DMA不同會全部都彙整到GPDMA處設定,在所需要開啟DMA的interface,設定會直接link到GPDMA設定這邊通常都設定標準模式 這邊注意不同通道會有不同字結長度 GPDMA Coding 這邊可以參考UART範例 參考

STM32H5 DMA 2D addressing Overview 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 »

Digital Power Introduction

前言 數位電源(Digital Power)也稱為智慧數位電源(Intelligent Digital Power),是電機工程中針對電源供應設備的分類,是指用數位方式控制、調整及監控的電源供應器。在數位電源中,會有單片機或數位訊號處理器,用其中的韌體來來控制及監控輸出,但還是會有一些類比電路進行PWM控制,信號調整或是在特定頻域進行補償等。 優點與種類 數位電源不外乎是DC to DC/AC to AC /AC to DC/DC to AC等等,而會從原來類比設計更改為數位電源的設計不外乎優點如下 針對第一點,數位電源晶片透過系統管理匯流排(System Management Bus, 縮寫為 SMBus)協議相互聯繫,其所使用的電源管理匯流排(Power Management Bus, 縮寫為PMBus)協議是使用數位與功率轉換系統進行溝通聯繫的標準協議。這個標準協定可以系統整體性能提升,讓大系統更好的去做到控制 ST 數位電源方案 ST基本上在數位電源這塊主要也只有3款MCU是大多數客戶有在使用,分別是F3(非主流)G4(目前主要)H7系列(高性能),目前有在開發中的板子如下大多都是DC to DC或AC to DC後續會針對這個部分再繼續說明 參考

Digital Power Introduction 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 »

I3C (bus) using in STM32H5 series

前言 MIPI在I2C的基礎上誕生了I3C,它與I2C一樣使用兩根線,並且支援IBI中斷和熱拔插,同時頻率可以達到較高的頻率,因為它與I2C不同,I2C兩根引腳使用的 是開漏輸出,開漏內部接地是無法輸出高電平的,如果需要輸出高電平必須外接上拉電阻才能實現高電平輸出,但是電阻會阻礙電流導通,所以會比較耗時,I2C 最高也才達到5MB,但I3C可達12.5MB,且功能比I2C強大許多且它支援I2C,向前相容。 I3C Bus介紹 MIPI I3C 結合了傳統I2C和SPI介面的關鍵屬性,以提供統一的、高效能、極低功耗的解決方案。I3C介面使用的跟I2C類似,也是一條漏級數據線(SDA)和一條推挽式時脈線(SCL),該SDA線上的從設備可以控制資料匯流排,並且可以啟動中斷。主控透過此SCL線可以將匯流排的時脈頻率調節到12.5MHZ。I3C支援多種類型設備,包括Main Master(目前主設備),secondary master(輔助主設備)、I3C Slave、I2C Slave。 I2C Vs I3C 與 I2C 模式相比,I3C 還降低了功耗,並在 12.5MHz 下提供了更高的資料速率。 I3C仍然支援I2C的ACK確認方式,只是某些情況下I3C要求只能使用I3C的方式來進行ACK,這麼做的目的是忽略掉總線上I2C的設備, 例如分配動態位址是時不想讓I2C設備參與進來那麼久使用這個方式來忽略掉I2C設備,因為傳統I2C設備只會在SCL拉高時來確認ACK,如果I3C將SCL拉低那麼I2C設備會把此 次通訊視為沒有ACK訊息視為失敗則放棄本次通訊 I3C dedicated VDDIO2 supply pin 專用電源接腳 VDDIO2 降至 1.08V。 因此,包括I3C在內的所有這些通訊介面都可以工作電壓為 1.2V STM32CubeMX – I3C 配置 Bus characteristics 這邊針對2個case計算配置 Sample code 這邊以ST官方這邊提供6種模式範例提供選擇依照客戶需求確認即可 參考

I3C (bus) using in STM32H5 series 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 »

Shopping Cart