yj hung

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 »

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 »

Finding absolute path in C code

前言 近期因客戶臨時要求須要把原先相對路徑的指向,全部修改成絕對路徑,查詢後這個方式僅能使用windows API去組合,但因開發工具特別被綁定只能使用C,C++的語法會出現無法編譯現象,因此這邊會搭配特數字串裁切方式協助各位製作出尋找絕對路徑的方式 相對位置 這邊先介紹相對位置,因撰寫比較簡單而且只要確定執行檔案開啟參照點使用以下方式去撰寫即可操作可以看到這邊僅從exe執行檔位置起走,找尋對應參照 但使用相對位置會出現從其他地方指向該資料夾執行exe會導致,周邊相對位置無法正常被執行,因路徑找不到,因此這邊如果有需求是需要從其他路徑指向或CMD方式從其他目錄去開起執行檔,就需要改成絕對位置 絕對位置 絕對位置這邊就會需要使用到windows API,因但純C會有點難實作主要借助主要使用到的Function為GetModuleHandleEx與GetModuleFileName,這邊就可以獲取到目前執行檔的絕對位置,但這邊還包含執行檔本身名稱,因此會需要再把執行檔名稱去除,但目前有些project不支援C++因此PathRemoveFileSpec可能會無法使用下面提供一小段範例去找出絕對路徑 結果圖如下 去除執行檔字串 這邊提供2種方法第一種是使用C++ windows API 另一種方式須先轉義成char在操作,基本上就是搜尋關鍵字位置,然後再複製到新的區域截掉不需要部分 參考

Finding absolute path in C code 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 »

Single-shunt VS Three-shunt

前言 這邊因設計參考需要,深入研究 single-shunt and three-shunt ,此篇文章會深入探討這2者差異與新舊版MCSDK的差異,另外深入介紹這2者Sensing的流程與差異 Shunt電阻設計 前一篇有提到不同Shunt電阻設計,這邊簡單針對系統回顧 基本上會分成3個部分Filter/offset/OPA,其中Filter是不一定會加上的部份,因為加上RC Filter會讓響應速度變慢,這邊會在一些速度控制上來說不一定是好的,但加入RC Filter可以提高在快速降速上避免OverShut的過大導致偵測錯誤Offset部分基本上一定要加因為ADC是無法收到負值,最後OPA部分就是看需求條配Gain值大小 3 shunt 介紹 3 shunt 電流偵測偵測的彈性度會比較高因公式𝐼𝑎 + 𝐼𝑏 + 𝐼𝑐 = 0 這邊3 shunt各取2項就可以推算出全部因此,相對1 shunt偵測不會有複雜的演算法和偵測死區,但成本上3 Shunt會比 1 Shunt設計來的高 The threeshunt technique can bounce sampling between current signals, selecting two out of three phases eachperiod, which allows long time periods for the current signals to

Single-shunt VS Three-shunt Read More »

Adding ADC channels and PINs in MCSDK 5.X

前言 馬達控制使用MCSDK時候因為ADC已被使用來採樣Shunt電流,這邊在現有的ADC上要再增加通道會需要考慮到取樣率等問題,如果直接用STM32CubeMX加ADC通道沒有做成是排成修改,會讓系統排成Fail,這邊主要是提供資訊如何在馬達專案上增加通道用在飛Shunt電阻採樣 實際操作 關鍵步驟 把標頭檔文件加入宣告,另外需要加入引用 新增 ADC 連接埠配置初始化程序以及控制引腳電平 最後使用內建函數配合排成 ADC channels注意事項 這邊如果依照原先增加方式通道是只有2可存放單純改通道數目會出現Hard Fault 仔細研究後會發現除了改以上通道外標頭檔的宣告文件RCM_MAX_CONV內也需要跟著修改 參考

Adding ADC channels and PINs in MCSDK 5.X 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 »

Shopping Cart