STM32 MCU

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 »

How to use “attribute” in STM32CubeIDE

前言 attribute__的作用就是將變量或者數組存在指定的地址。在實際應用中一般將程序的版本信息固定在特定的flash地址。這邊因要協助修改讓Hex燒入檔案能可以認到版本資訊,但嚐試使用STM32CcubeIDE後發現,無法使用,但KEIL卻是正常的,找尋網路方式但都試不出來會出現錯誤,最後發現正確使用方式 修改ld文件 這邊因為STM32CubeIDE這邊在Flash LD檔與KEIL方式不同,因此如果需要使用“attribute”這一快是需要修正的第一步需要先在主MEMORY那邊宣告你所需要使用區塊 第二步是在/* Sections */內部新增 在繼續在ld文件的下面進行修改。這裡就要特別注意了。 .VERSION : 是在main函數之前定義的數組的名字。KEEP(*(.MCU_version))是main函數之前定義的section()中的名字。Version尖括號後的是在前面的ld文件中添加的。到這裡 ,就能正常編譯了。在main.c內使用如下(需要宣告在main loop外) 結果圖如下可以看到最下面多出設定位置與數值 LD檔完整附錄 參考

How to use “attribute” in STM32CubeIDE Read More »

STM32 I2C Slave (HALL Lib)

前言 這邊因有I2C slave需求,但因之前使用的LL寫法在舊款MCU中部份Lib是沒有的,因此這邊只能使用HALL Lib撰寫,但HALL Lib限制就是不指定長度接收寫法相對複雜很多,這邊因使用情境式類似sensor 方式,因次HALL Lib是相對足夠的 STM32CubeMX Setup 這邊沒有麼特別的,只有跟LL Lib相同需要留意Slave address不能為0x00另外中斷部分需要開啟,包含ERROR部分因為Slave傳輸資料時候會使用到 Sample Code (HALL Lib) 這邊需要注意是中斷在主程式中是需要被開啟的這個Function是會常使用到的 這邊會宣告一個陣列去接要發送的data 另外他的Call Back也會使用到 首先要先針對Address 的Callback這邊會判讀收還是發,但這邊不管是收data還是發data都一開始都會先進到I2C_DIRECTION_TRANSMIT判讀這邊可以撰寫第一筆資訊去區分是要做哪個動作也就是RxData[0],其中參考網路範例他第一筆data是用來判讀發送data的第幾個位置這邊可以依據需求修改或刪除 傳輸資料的CallBack比較簡單,這邊只要留意是I2C_NEXT_FRAME,這邊實際去量測會發現最後一筆都是NACK但不影響Master判讀 因為傳輸最後一筆會NACK所以這邊會進到ERROR CallBack這邊主要2個ERROR要注意一個是AF和BERR,其中進到ERROR後藥劑的再把中斷開啟 結論 這邊會依照不同需求可以選用LL或HAL去撰寫I2C Slave code,HAL Lib比較麻煩的地方在於接收部定長度資料部分,會很容易卡住假如不知道傳輸資料長度,會比較建議使用LL Lib方式撰寫,但如果是依據sensor方式讀取這邊HAL其實會比較直覺化,另外一個小要點就是在傳資料與接收資料地方不要寫其他動作會延遲訊號傳輸,容易導致傳輸失敗或訊號判讀錯誤另外我非常推薦下面參考部分的影片她非常好的講述流程 參考

STM32 I2C Slave (HALL Lib) Read More »

ST Motor Control Use Case and Debug

前言 客戶使用MCSDK5.4.8生成Hall sensor的code,但在馬達有負載起轉時候會出現馬達激磁聲音,但code部分並未新增甚麼東西,僅讓馬達停止後再起轉,這邊使用DAC接口方便Debug,最終找到演算法與部分需要改動與硬體需要調整部分解決了此問題 問題 這邊在起步出現激磁聲音,先確定相電流出現異常波形長如何,又因此Case是使用Hall sensor去做回授非sensorless,這邊去量測Hall訊號組合出下圖,看的出來再Hall訊號出現快速上下震盪,有些像HFI,但在MCSDK5.4.8這塊是被拔除的。 Debug過程 第一步:因不確定是不是在不對狀態下切換導致,因此先抓取Motor控制狀態,確保到idel狀態在進入馬達起轉或停止 第二步:結果做完第一步後也還是存在問題,接下來就一步一步查詢訊號異常部分來源是在哪邊但可以看到下圖異常部分Id是正常的,沒有注入雜訊,又發現Iq是有實際指令讓馬達去達到目標 第三步:確認是軟體部分後就去切開是回授端出問題還是順向端出問題,使用senorless run後並無發生起步問題,問題縮窄至Hall 回授先做一些調整,查看公版與打版差異,使用Hall回授公版會出現錯誤無法起轉,因此這邊提高Hall的濾雜訊電容,再把其提高,發生頻率有在減小 軟體解決方案 這邊確認後MCSDK5.4.8在起轉時並不是使用六部方波起轉完後再切換至FOC,因此會有空白區域預猜現象,只要有雜訊出現就會使其猜不准出現震盪 因此這邊會從HALL_CalcElAngle in hall_speed_pos_fdbk.c下手詢問原廠後再6.1.2有針對這部分做修正,因此把修正部分加入 參考

ST Motor Control Use Case and Debug 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 »

STM32 FDCAN Introduction difference CAN lib

前言 FDCAN(Flexible Data-Rate CAN)是CAN的升級版。特點包括 FDCAN格式 CAN-FD 與 CAN 2.0 的幀架構比較 在標識符之後,CAN 2.0 和 CAN-FD 有一個不同的操作: CAN-FD 與 CAN 2.0 之間的主要差異 STM32CubeMX Setting 這邊可以參考網路上H7的設定選項,使用G4或G0會缺少Messge Ram分配這區塊設定,其他部分雷同 FDCAN傳輸參考程式 這邊可以參考輸出如下 讀取如下 參考

STM32 FDCAN Introduction difference CAN lib 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 DMA2D on STM32H7

前言 近期因為需要,所以需要幫客戶弄thermal camera顯示在MCU STM32H7顯示面板,使用STM32H750-DK,而這個開發版使用的顯示面板不是SPI驅動,所以只好開始學習LTDC+DMA2D,這個章節將會先介紹DMA2D使用方式與介紹 DMA2D的簡介 在實際使用LTDC控制器控制液晶屏時,使LTDC正常工作後,往配置好的顯存地址寫入要顯示的像素數據,LTDC就會把這些數據從顯存搬運到液晶面板進行顯示, 而顯示數據的容量非常大,所以我們希望能用DMA來操作,針對這個需求,STM32專門定制了DMA2D外設,它可用於快速繪製矩形、直線、分層數據混合、 數據複製以及進行圖像數據格式轉換,可以把它理解為圖形專用的DMA DMA2D工作模式 DMA2D操作 DMA2D的常用API要熟練掌握,後面的GUI的底層驅動加速,JPEG硬解,攝像頭等部分都要用到。這里為大家介紹如下幾個常用API: framebuffer的這種特性使得我們不能簡單使用memset這類高效的操作來實現矩形區域的填充。這邊下面展示2種方式作為比較 通常情況下,我們會使用以下方式的雙重循環來填充任意矩形,其中xs和ys是矩形左上角在屏幕上的坐標,width和height表示矩形的寬和高,color表示需要填充的顏色: 參考

How to use DMA2D on STM32H7 Read More »

Shopping Cart