ST Tool Introduction

STM32CudeProgrammer/MX/IDE introduction

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 »

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 firmware library package

前言 有時必須给别人自己的code應用,但是又不想直接给C源碼,這時候就可以把某些機密 .c 文件編譯成 .lib 文件给别人用,但如何使用cubeIDE把project編譯成lib?這邊就會教學如何使用cubeIDE編輯lib和如何應用lib(因部分lib引用會出現不可預期錯誤) STM32CubeIDE   如何能生成 Lib? 這邊會有2種方把可以生成Lib Project setup:在創建檔案時就先設定 在專案屬性上設定 這邊先來看到第一個設定,可以直接在生成專案選擇靜態lib 第二種是在專案屬性上更改設定 默認生成的是以lib开头,並以.a為名的文件。可以把圖中的a改成lib,並最下面的lib删除,這樣生成的檔案,就是的TEST_STM32F103CBT6.lib的形式 STM32Cube IDE使用lib、a文件方法 在使用STM32Cube IDE,如果需要使用别人寫好的.lib或者.a,直接將文件的路徑包含進去並不能正常使用,在編譯會報錯誤“ undefined reference to `XXXXX’” 就可以照下面幾步驟正常引用 lib加入到目錄,路徑不能有中文; 配置文件路徑 將静態lib添加到C Linker中; 注意!不要在下圖所示位置加入lib路徑: 在官方文件中其實有有提到如何引用(P87~P89) 參考 stm32CubeIDE 如何生成Lib STM32Cube IDE使用lib、a库文件方法 STM32CubeIDE user guide

STM32 firmware library package Read More »

STM32 Porting On Another MCU

前言 使用ST MCU做開發的應用越來越多,ST也針對不同MCU不斷翻新在相同類別MCU上不斷演進,就出現同系列MCU程式移植問題,如果是嶄新的程式區塊搬移是相對簡單的,但如果是非常龐大模組功能不變全部移植要怎操作?這邊提供其中一種方式作為同類別轉換(L412KB 改成L432KCU6)參考 Porting 同系列 MCU 這邊因客戶需求想把專案直接轉移到不同MCU上這邊提供2種方式移植,起先有發現使用CubeIDE被鎖定所以無法直接改動 這邊因為同為L4系列只是不同款MCU因此作了以下幾步驟 到這邊stm32l412xx.h替換成stm32l432xx.h所build出來的,將bin檔燒進STM32L432進行測試可能會出現以下錯誤資訊讀到的MCU version與期望的不符,接著MCU利用SPI向後端獲取ACK有錯誤WARNING: MCU version mismatch (expected:00.02.06, got:D01.00.00)ERROR: received wrong ACK type (0xFF)ERROR: failed to read REQ_MULTIPLE_SPI ackERROR: failed to start the gateway這邊參考開源軟體Semtech code for STM32L412 => https://github.com/Lora-net/sx1302_spi_usb_bridge Flash配置可以用以下方是修改(但建議限同類型這樣轉移) Porting 不同系列 MCU使用智能雲 這邊參考網路由F103移植到L496並follow以下大步驟操作 Create the STM32CubeMX project file(這邊先生成要移植的MCU專案) Import the Gizwits configuration template Special processing (only for the

STM32 Porting On Another MCU Read More »

STM32Cube Tool Introduction-2

Preface  上篇章針對STM32CubeMX做完介紹後,這章節會進入程式編譯CubeIDE與燒入方式CubeProgram做深入介紹 STM32CubeIDE 網路資源主要撰寫主要以MDK與CubeIDE為大宗,這邊以CubeIDE為主軸介紹。第一步來先介紹基本介面如下圖 黃框:設定欄列表,主要最常使用到的是甲蟲符號的Debug與播放按鍵的燒入扭 紅框:為已開的專案型態 藍框:為程式編輯視窗 綠框:在程式燒入後可以去跑RAM等使用比率但非Stack/Heap Debug mode 這邊進入到Debug mode時候,可以看到分成3大區塊,最左手邊是可以看到目前程式運行到哪邊詳細確認,右邊眼鏡EXP位置可以即時去監控目前內部變數的狀況,中間程式區塊就是目前跑到的涵式區域。紅框區域是主要用在程式執行下一步或停止Debug mode,而黃色區塊跟一般程式一樣可以設定斷點 STM32CubeProgram 目前CubeProgram主要是用到是在於燒入與option byte setting,在於配置Flash等等是一個相對方便的軟體,下面可以看一下基本操作介面這邊注意一般ST給的公版都會支援ST-LINK,如果要使用SPI與I2C燒入等等就需要使用ST官方的ST-LinKV3 紅框:連接或燒入方式選定方式 黃框:燒入設定與實際燒入使用 橘框(OB):option byte setting 藍框:擦拭全部記憶體位置 中間區塊是顯示Flash位置與資料,且快按滑鼠左鍵2下可以直接修改內部數值 在燒入部分可以看到上圖,主要設定3個區塊 綠框:首先選擇要燒入的檔案,這邊可以選擇Bin檔或Hex檔 藍框:設定燒入的起始位置(一般是使用到雙Bank或切割APP才會需要設定此位置一般不特別設定) 紅框:開始燒入 下圖我們可以來看到Option Bytes設定(STM32與STM8最大不同在於Option Bytes已不會再額外生成檔案,因此再批量燒入時都會用Command line形式燒入) 上圖比較需要注意的設定是Read out Protection與User Configuration,這邊RDP一般是設定AA,設定BB可以防阻由外部程式讀取內部程式。但這邊切記如果CC是不可逆,一但切成CC燒入MCU就等同燒斷,無法在讀取與燒入其他程式。PS:這邊設定BB切回AA時,會觸發Flash資料全部擦除,因此設定BB就不用怕程式被盜取在User Configuration最常被使用到是Boot0/Boot1與IWDG設定,這邊每顆MCU在此區況設定都會有些許不同需詳細閱讀其reference manual更動Option Bytes時切記中途不要斷電(會導致系統錯誤可能會使Option Bytes錯亂無法復歸),等修改完成後在斷電重新上電,讓系統確實吃到新的設定 STM32CubeProgram Command Line 這邊ST有給予2種版本可以開啟CubeProgram,其中CLI開啟如下圖,可以在Bin的資料夾中找到指令部分可以參考ST官網UM2237文件,這邊提供一個當設定IWDG設定出錯無法在正常修改Option Bytes時的解法(以G031為例) .\STM32_Programmer_CLI.exe -c port=swd mode=UR -ob rdp=1              //RDP 設定為level1  (0xBB) .\STM32_Programmer_CLI.exe

STM32Cube Tool Introduction-2 Read More »

STM32Cube Tool Introduction-1

Preface  ST官方推出許多針對自家產品MCU的方便使用工具,在不同應用有不同的工具可以對應使用,本章節會針對STM32CudeMX做入門操作介紹。 STM32CubeMX ST在前置作業時為了方便大家能夠快速建置底層的code出了一款STM32CubeMX,CubeMX主要是用在前期MCU設置階段使用,後續編譯程式需要使用到其他軟體 由上圖有三個方框處分別是 綠框:之前所建置過的專案 黃框:初始乾淨的MCU專案(適用在自己製作板子使用) 紅框:以ST官方給的板子為基礎所建置出來的專案(EX:Nucleo board系列) 這邊可以透過上圖MCU/MPU Selector來去挑選所需要的MCU,其中Peripheral是一個很方便的塞選,可以依照所需求的腳位去塞選出對應的MCU選項(EX:ADC*3 CAN*2可以透過這個選取) Pin Setting 這邊以ST官方版子新建置Nucleo-64(STM32L433)為範例接續下去說明 上圖操作主要分成3大區塊下面就提點幾個區塊要注意的地方與簡單設置操作 綠框:主要是選擇各項功能開啟設定區域(EX:Can bus /UART/I2C等等) 黃框:主要是建置流程設定依序由左至右設置 紅框:這區域主要是看你所設定腳位圖示化區域 第一個要注意的地方是在SYS選單這邊,這邊是主要要注意試燒入設置的地方,這邊選擇Serial Wire,在最右側圖形化部分就會出現燒入時候預設的PIN腳(!!注意!!不要把腳位全部設置完畢,才發現沒預留燒入腳位要重新設計!!) 這邊綠色腳位是以使用開啟的,灰色部分則是還未使用,滑鼠可以移動到灰色區域然後左鍵,就會出現上圖選單。這邊就可以知道該腳位可以來做什麼用途(這邊建議是先使用上面所教先設置,在使用此方法更換所需要PIN腳位置)PS:這邊有一個小技巧是滑鼠壓住+ctrl壓住你綠色設置腳位,會出現黑色閃爍腳位,這就表示你可以更換的位置,直接拖移即完成更換 Clock Setting 該區域主要是在設置各線路所使用Clock的狀態,可以在方框內直接填入數字即可完成設置這邊要注意的是要依照datashhet做Clock分配,不然clock為MCU主要控制項目錯亂了會DeBug很久~沒特別就可以直接跳過 Final Setting 這邊主要是要設置下圖下拉式選單,後續要使用什麼編輯器去撰寫你的程式,因為我們主要使用ST官方給的STM32CubeIDE,我們這邊是選STM32CubeIDE,專案存取路徑與名稱設置好後,就基本設置完畢,按下右上方GENERATE CODE就可以生成專案程式了。 Other Setting 下圖是主要設置把GENERATE CODE的涵式庫單獨區分檔案出來方便你去編修(EX:I2C.h等等) 下圖區塊主要是設置涵式庫使用的層級,HAL為應用層為ST官方所提供,部分專業會想使用LL,LL主要是底層的程式方塊選用LL後最好搭配上面把.c/.h分離開來方便去撰寫 小結 本章節主要針對CubeMX做介紹適合新手閱讀,下章節會針對CubeIDE與CubeProgram作介紹 參考 STM32CubeMX STM32筆記(9):使用STM32CubeMX與Keil開發環境

STM32Cube Tool Introduction-1 Read More »

Shopping Cart