[教學影片] STM32 Cube vs Duino 開發環境 #Arduino教學 24
教學影片中簡介 STM32Cube 以及 STM32duino 兩種開發環境。
1月 04, 2021 山姆
教學影片中簡介 STM32Cube 以及 STM32duino 兩種開發環境。
1月 01, 2021 山姆
在這篇 [STM32] Why STM32 ? 筆記裡,我列出了我購買 STM32 的原因,以及STM32 開發環境的選項,其中一項軟體開發環境就是 STM32duino,所以這篇就來說明如何將 STM32 Arduino package 加入 Arduino IDE,然後透過 "Blinking LED”範例的操作,各位就可以和這篇 [STM32] Hello STM32Cube with Blinking LED 做一個 CubeIDE 和 Arduino IDE 的比較。
Install STM32 BSP into Arduino IDE
簡潔的說,就是和 ESP8266 / ESP32 的操作步驟是一樣;就是將下面的 URL 加到 Arduino IDE 的 “Additional Boards Manager URLs”內,然後安裝 STM32CubeProgrammer,因為 Arduino IDE 會呼叫它做 firmware 的 upload 。
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
Step 1: 開啟 Arduino IDE,接著點選 “File -> Preference”,然後如下圖,將上面 URL 加入“Additional Boards Manager URLs”的 diallog 內。
Step 2: 在上一步驟按下 "OK" 後,接著點選 “Tools -> Board ->Boards Manager...”。
接著在 Boards Manager 視窗輸入 "STM32”,然後將 “ STM32 Cores”下載安裝起來。
待 STM32 BSP (Board Supported Package) 安裝完成後,再次點選 “Tools -> Board ->Boards Manager...”,就可以看到如下圖,"STM32 Boards" 的選項出現在 Arduino IDE 的 Boards Manager 的清單內了。
Step 3: 到 ST 官網下載 " STM32CubeProgrammer" 然後安裝它。
因為 Arduino IDE 需要透過 STM32CubeProgrammer 來做 firmware 的 upload 。
==================================================
Blinking LED with Nucleo-F767ZI Board
Step 1: 開啟 Arduino IDE,接著點選 “File -> Examples -> 01.Basic -> Blink”。
Arduino IDE 就會載入"Blink”的範例程式碼,如下圖 。
Step 2: 接著點選 “Sketch -> Upload”,Arduino 就會依照你的設定 Upload new firmware。
到這裡,你不妨比較一下 STM32CubeIDE 和 Arduino IDE 的差異。
但有一點,我要告訴大家的是,ST 官方提供的 STM32CubeIDE 能透過 ST-Link 做到 real-time debugging 功能 (SWD, JTAG),這點是 Arduino IDE 無法做到的,若你是 Advance User 或是做比較複雜的專案,real-time debugging (SWD, JTAG) 這功能你是需要的,千萬不能放掉 STM32CubeIDE 這個開發環境的。
以上參考資料來自
https://www.arduinolibraries.info/authors/stm32duino
12月 21, 2020 山姆
Hello STM32Cube with Blinking LED
在這篇 [STM32] Why STM32 ? 筆記裡,我建議大家不要放掉 STM32Cube 的開發環境,所以這篇就利用最簡單的 "控制 GPIO- 閃爍 LED" 為題,分享我操作 STM32Cube 開發環境的過程。
Step 1: Install Software Tools - CubeMX & CubeIDE
ST 提供主要的 Software Tools中,CubeMX 和 CubeIDE 是 "必要" 的開發工具軟體程式,請先下載安裝 CubeMX & CubeIDE。
至於各項軟體程式的職司,請參考這篇 [Embedded] STM32 Software Tools。
Step 2: Launch STM32CubeMX and Download Software Package
安裝完成 ST32CubeMX 以及 STM32CubeIDE 軟體程式後,先開啟 ST32CubeMX
,然後點選 "Help -> Manage embedded software packages" 選擇你手上開發板對應的 software package 來安裝。
有了這 package,CubeMX 以及 CubeIDE 才能生成相對應程式碼 ,下圖就是以我 NUCLEO-F767ZI 開發板為例子的截圖。
Step 3: Launch STM32CubeIDE and Create project
開啟 ST32CubeIDE,然後點選 "File -> New -> STM32 Project"
接著畫面就會跳出如下的視窗,要你選擇你手上開發板的型號,點選你手上開發板的型號後,按下 Next。
完成開發板型號的選擇後,接著畫面就會跳出如下的視窗,要你輸入 Project Name 以及 Project Location。
輸入專案的名稱 "BlinkingLED" 以及專案擺放的位址後,就可按下 "Finish”,CubeIDE 就會建立你專案所需要的檔案
下圖是完成專案的建立時,CubeIDE 呈現的畫面。
這是 CubeIDE 產生的專案檔案結構,Core folder 下的 \Inc、\Src 是未來我們會頻繁改動的檔案,\Startup 則是 MCU startup assembler code。
到了這一步,CubeIDE 把你專案的 General Initial Code 建好了,下一步就必須靠我們自己去添油加醋了。
Step 4: Config LED GPIO
我是官方版本的 Nucleo Board,板子上就已經在 PB0 連接綠色的 LED,如下圖。
若你的開發板和我不同,請依照你手上板子作相對應的改變,找到連接 LED 的 GPIO腳位,然後將它設定成 GPIO_Output 屬性。
確定好腳位後,接著就是將 PB0 pin 設定成 GPIO_Output 的功能腳位。
PS: 從下圖也可以看到 PB0 可以設定成哪些功能腳位,另外若沒有將 PB0 pin 設定成 GPIO_Output ,PB0 在 CubeIDE 原生的 initial code 則會是 “Rest_State”,也就是 Tri_State,LED 是推不動的。
想更進一步的更改 PB0 的特性可以在 Pinout &Configuration 頁面 (sheet) 點選 System Core -> GPIO 接著在 GPIO Mode and Configuration 頁面選擇 PB0 做 PB0 Configuration,如下圖。
Step 5: Generate Initial Code
做完腳位的改動後,就是手動產生你改動後的 Initial Code,CubeIDE 是不會主動幫你做的,這時請點選 "Project -> Generate Code " 驅動 CubeIDE 重新產生 Initial Code。
Step 6: Add Blinking LED code into main.c
到步驟 5,還只是產生 Initial Code,PB0 / LED 是不會亮,更不會閃爍的,因為 PB0 的 Initial State 是 LOW,這時你還需要在 main.c 加入以下兩行 Code,這樣 PB0 / LED 才會以 100ms 的頻率閃爍。
HAL_GPIO_TogglePin (GPIOB, GPIO_PIN_0);
HAL_Delay (100); /* Insert delay 100 ms */
Step 7: Run & Debug
到這一步,就請大膽的連接開發板到 PC 端,然後按下 Run 或 Debug 驗收你的成果吧!
以上參考資料來自
12月 20, 2020 山姆
Why STM32 ?
從一開始接觸 Arduno 時,其實就注意到了 STM32 series MCU,但 STM32 開發版的價位,畢竟比 Arduino 官方販賣的開發版以及 ESP8266, ESP32 高了許多,所以 STM32 開發板還只是存在我的夢想清單而已,是接觸到 MicroPython 後,才決定將它放入購物車的。
採購 STM32 開發板的動機,MicroPython 只是一個觸發點而已,以下幾項應用才是我採購它的原因 ;列出的這些應用,甚至有幾項還是以 STM32 MCU 做為官方開發板的 。
STM32Cube
STM32duino
MicroPython
openmv
arm|MBED, Azure OS, FreeRTOS, Zephyr, …
STM32Cube :
這是 ST 官方提供的 C/ C++ 開發環境。Cube 開發環境的組成可以看以下這篇文章
這裡有一點想 Highlight,那就是 CubeIDE 是這些應用的開發環境中,最能完整發揮 MCU 控制/變化的;透過 ST-Link 還能做到 real-time debugging 功能 (SWD, JTAG),若你是 Advance User,這個開發環境是不能放掉的。
STM32duino :
這是 STM32 MCU 針對 Arduino 開發環境推出的套件,相對於 STM32Cube 開發環境,有較低的進入門檻;相反的,MCU 的功能也就無法被百分百的發揮了,但其實這也蠻符合 Arduino 易學的初衷,不是嗎 ? !
MicroPython :
這應用就不必我再多說了吧!不清楚的,可以看我這兩集的教學影片。
OpenMV :
這是 MicroPython 的一項延伸應用,以 MicroPython 為基底加上 "Machine Vision”algorithm 的 open source project。
arm|MBED, Azure OS, FreeRTOS, Zephyr :
這些都是有採用 ST series MCU 的專案;否值得投入?建議大家在評估時,可以參考 各專案在 GitHub 上的熱度。
STM32Fxxx or STM32Hxxx ?
至於 STM32 MCU 的選擇,個人建議從 F 以及 H series 中做選擇;只想玩 MicroPython 的,那就挑 F series,CPU、RAM 以及 ROM 的需求務必要大於 MicroPython 的最小需求。想玩 openMV 的,那就挑 H series 且有 hardware JPEG decode 功能的。
這是我挑選的板子 :
Nucleo-144 MCU Development Board - NUCLEO-F767ZI
12月 19, 2020 山姆
ST 提供的 STM32 Software Tools 有
其中 STM32 CubeMX 和 STM32 CubeIDE 是必要軟體開發工具程式
STM32 CubeMX :
It is a GUI configuration tool for STM32 MCUs, as well as the generation of the corresponding C initialization code for the Arm Cortex-M processor。
STM32 CubeIDE :
It is a C/C++ development tool that is based on Eclipse/CDT framework , GDB debugging and GCC toolchain。 It also integrates peripheral configuration, code generation, code compilation and debug features for STM32 MCUs。
The debugging feature includes the view of CPU core registers, memories, and peripheral registers, as well as live variable watch through ST-Link (SWD/JTAG)。
STM32 CubeProgrammer :
It is a programming tool for STM32 MCUs and the tool provides GUI and CLI type programs.。The developer can read, write and verify device internal memory through bootloader and ST-Link (SWD/JTAG) interfaces。
STM32 CubeMonitor :
It is a set of software monitor tools。The monitor tools have CubeMonitor-RF, CubeMonitor-Power, CubeMonitor-UCPD。
12月 19, 2020 山姆
STM32 是 based on Arm Cortex-M processor 的 MCU,所以在了解 STM32 series MCU 之前,知道 Arm Cortex-M series Processsors 之間有甚麼差異也是必要的,不是嗎 ?
Arm Developer 網站就提供這樣的資源。
下面連接就是網站提供的比較表
Arm Cortex-M series Processor comparison table
下面的截圖則是擷取自上面連結,懶得下載的人就可以直接看截圖,哈哈!
STM32 series MCU 用到 Cortex-M Processor 的有 M0, M0+,M3, M4, M33 以及 M7
STM32 MCU 家族的定位
上面兩張 STM32 MCUs 的截圖是擷取自 https://wiki.st.com/stm32mcu/wiki/STM32StepByStep:STM32MCU_basics
12月 19, 2020 山姆
最近在研讀 STM32 的相關資料,突如期來的一個疑問猶然而生,那就是
"為什麼 STM32 是 MCU 而不是 MPU " ?
MPU 和 MCU 的定義又是如何,真的可以簡單的一分為二 ?
經過了一番爬文,最後倒是這篇文章給我解惑了!
尤其文章中的這張圖也畫得恰到好,一圖道破了 “究竟是 MPU 還是 MCU”這問題了,
也畫出了 MPU 與 MCU 這十多年的發展。
11月 11, 2020 山姆
MicroPython 官方並未提供整合的 GUI 開發環境 ( IDE : Integrated Development Environment ),僅提供 Command Mode Tools,讓開發者可以更新 firmware 以及替換板上檔案而已;但這樣的開發環境著實提高了入門門檻!
還好,在 GitHub 原始碼開發平台上,無私的開發者幫 MicroPython 解決了這樣的困境;例如 Visual Studio Code 以及 PyCharm 都有無數的 Micropython 套件 (Extension / Plugin) 供開發者選用,甚至有些組織還提供 MicroPython 專屬的 IDE。
但在親身體驗這些套件或 MicroPython 專屬的 IDE 後,發覺 MicroPython 專屬的 IDE 往往是連安裝都有問題,許久未見更新;一些套件則是缺東缺西,不夠完善,往往無法同時支援 PyBoard / STM32 boards 以及 ESP8266 / ESP32;唯有 PyCharm 的 MicroPython 套件最為完善,同時支援 PyBoard 以及 ESP8266 的下載方式,並且在 IDE 的開發環境下,整合了 AMPY ( Adafruit Micropython tool ) 。
安裝
PS : 在安裝 PyCharm 前,記得先完成 Python 3 的安裝。
PyCharm 下載網址 ,安裝完成 PyCharm 後,請點選
" File -> Settings -> Plugins -> Marketplace ",然後搜尋 MicroPython 套件,並且安裝它。安裝完成 MicroPython 這套件後,請依照提示重新啟動 PyCharm ,以完成MicroPython 套件的安裝以及啟動。
New MicroPython Project
完成 IDE 以及MicroPython 套件的安裝後,接著就是來生成 MicroPython 的專案了;請點選 " File -> New Project…",接著就會跳出如下的 "Create Project”的視窗。
請在 " Location:”指定專案的開發路徑及資料夾,這裡,我的專案名稱是 "HelloMicroPython”,然後點選 " Create”生成專案。
PS : PyCharm 是一套針對 Python 語言開發的 IDE ,所以每個專案都有各自的虛擬環境 ( Virtual Environment )。
完成新專案的生成後,你應該可以看到如下圖的專案檔案結構,此時的所有檔案都只是 Python 新專案的相關聯檔案以及虛擬環境,還算不上是 MicroPython 的專案。
請點選 " File -> Settings -> Languages & Frameworks -> MicroPython ”
然後勾選 "Enable MicroPython support”。
接著在 "Device type”,點選你的開發板種類;如果你的開發板是 ESP8266 或 ESP32 則點選 “ESP8266",若是 STM32 系列,則點選 "Pyboard”。
在 "Device path” 填入 Serial Port 的路徑,如 COM3 。
最後在點選 "OK",這樣新專案的屬性才會轉換成 MicroPython 的專案。
PS : 如果是在 Ubuntu 的環境下,則是填入 /dev/ttyUSB0 或 /dev/ttyACM0
main.py
到這一步驟, 只是建立一個 MicroPython 的新專案而已,main.py 還未被產生。
請點選 " File -> New... ”
然後選擇 "Python file”並填入新檔案名稱 "main.py",接著按下 Enter 鍵。
此時 "空白的" main.py 就被建立在專案檔案結構下了。
因為是 MicroPython 的專案,PyCharm 則會在這生成 main.py 檔案後, 提醒你專案還要額外安裝 Packages,如 pyserial,ampy 。
請大膽點選右側的 "Missing reqired MicroPython packages”讓 PyCharm 幫你安裝必要的軟件。
Project Structure
接下這步驟可做也可不做,但個人建議做,因為實在沒有必要將 .idea 這目錄下的檔案也歸類為 Source Directory。
請點選 " File -> Settings ->Project: Nam of your project -> Project Structure”,然後點選 ".idea”,接著按滑鼠右鍵將 " .idea " 這目錄 “Exclude”出 Source Directory。
下圖是 " .idea " 這目錄 “Exclude”出 Source Directory 的畫面。
Hello MicroPython on PyCharm
完成以上的步驟後,是時候在空白的 " main.py" 輸入程式碼了!
不免俗的,我們也來段 "Hello World”吧!
請在空白的 " main.py" 輸入print("Hello MicroPython on PyCharm")吧!
Download main.py to board
請點選 "main.py”,接著按滑鼠右鍵,選擇 Run ‘Falsh main.py’。
若板子就緒且 COM port 設定正確,你應該可以看到 main.py 被正確的下載到板子了,如下圖。
REPL
既然 main.py 已經成功的下載到板端了,當然就應該試試在 PyCharm 跑 REPL ( Read,Evaluate, Print and Loop )。
請點選 "Tools -> MicroPython ->MicroPython REPL”執行 REPL。
接著在 Terminal 視窗則會有如下的 REPL connected 的結果
這時你不妨按下 “Ctrl+D”,來個 soft reboot,就能看到你撰寫 main.py 的執行結果了。
Run AMPY
想必你也猜得到是在 Terminal 視窗執行 ampy,以下就是執行畫面的截圖。
想省去一直敲打comport 這段字串 “-p com7',可以在 Terminal 輸入如下圖的字串,來設定 comport 路徑。
以上就是 MicroPython 在 PyCharm 的使用教學,感謝閱讀!
ESP32 / ESP8266 / MicroPython / Python / STM32