山姆的編程實作分享。。。

Sam Blog, Sam Sharing, Sam Studio

2020年12月21日

[STM32] Hello STM32Cube with Blinking LED


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 驗收你的成果吧!


以上參考資料來自

STM32 step by step - Blink LED

How to use STM32CubeIDE

2020年12月20日

[STM32] Why STM32 ?


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 開發環境的組成可以看以下這篇文章

STM32 Software Tools

這裡有一點想 Highlight,那就是 CubeIDE 是這些應用的開發環境中,最能完整發揮 MCU 控制/變化的;透過 ST-Link 還能做到 real-time debugging 功能 (SWD, JTAG),若你是 Advance User,這個開發環境是不能放掉的。


STM32duino : 

這是 STM32 MCU 針對 Arduino 開發環境推出的套件,相對於 STM32Cube 開發環境,有較低的進入門檻;相反的,MCU 的功能也就無法被百分百的發揮了,但其實這也蠻符合 Arduino 易學的初衷,不是嗎 ? !


MicroPython : 

這應用就不必我再多說了吧!不清楚的,可以看我這兩集的教學影片。

MicroPython 開發環境

Should I Learn 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







 


2020年12月19日

[Embedded] STM32 Software Tools


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。


以上資料都是來自 https://wiki.st.com/stm32mcu/wiki/STM32StepByStep:STM32MCU_basics

[Embedded] Arm Cortex-M Processor


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 


[Embedded] MPU vs. MCU


最近在研讀 STM32 的相關資料,突如期來的一個疑問猶然而生,那就是

"為什麼 STM32 是 MCU 而不是 MPU " ?

MPU 和 MCU 的定義又是如何,真的可以簡單的一分為二 ?

經過了一番爬文,最後倒是這篇文章給我解惑了!

MPU vs. MCU

尤其文章中的這張圖也畫得恰到好,一圖道破了 “究竟是 MPU 還是 MCU”這問題了,

也畫出了 MPU 與 MCU 這十多年的發展。

 


2020年12月16日

[教學影片] MicroPython 開發環境 | Python 學堂 #2



教學影片中利用 MicroPython 和 Arduino 的比較,協助對 MicroPython 有興趣的初學者能快速的了解 MicroPython 的開發流程以及開發環境。 影片的後段則是介紹最佳的 MicroPython IDE 軟體程式。 影片中的相關教學文章 :


 


2020年12月12日

[咖啡烘培] 重現咖啡烘培曲線


透過 ”設定 Profile Background” 再加上風力以及火力的紀錄,真的可以達到 "重現" 烘培曲線嗎 ?

於是,今天準備了 3 份 200 克的 "巴拿馬水洗百合花" 來測試一下了喔!

這是第一鍋的烘培曲線

下豆溫度在 214.8 度,烘培時間是 15:27

第二鍋就以第一鍋的烘培曲線為藍本,下圖就是第二鍋的烘培曲線

下豆溫度也在 214.8 度,烘培時間則是 15:48


透過 Artisan "Comparator” Tool ,來看一下兩鍋烘培曲線的差異

下圖則是兩曲線的比較圖 ,個人覺得很滿意,那你呢 ?

第三鍋同樣以第一鍋的烘培曲線為藍本,下圖就是第三鍋的烘培曲線

下豆溫度也在 213.3 度,烘培時間則是 16:15 

PS: 在烘焙過程中,發現第三鍋的烘培時間有點拉長了,所以我刻意提前下豆溫度

下圖則是 3 曲線的比較圖 !




心得:

透過 Arduino 的資源,以 UNO 這塊板子來模擬 TC4 的功能,然後結合 Artisan 咖啡烘焙軟體, 就能在 Quest M3 這台機器上達成 "重現" 咖啡烘培曲線,你還能不滿意這結果 !?


2020年12月7日

[咖啡烘培] Artisan 的 "背景曲線 "


 Artisan - Profile Background


下圖是設定 Profile Background 的路徑

Profile Background 的設定頁面

Artisan Profile Background 除了可將先前的烘培曲線設定為背景圖外,還有 " Align”的功能,上圖的 Align 就是設定在 "CHARGE" 點,也就是說當正在烘培的曲線碰觸到 CHARGE 點時,Artisan 就會將 "正在烘培曲線" 和 "背景烘培曲線" 的  CHARGE 點做對齊的功能,以方便烘培師及時觀測到兩曲線的差異,然後做即時的烘培調整。

下圖是我將先前花神烘培曲線設定為 Profile Background 的圖面



下圖則是前後兩次花神烘培曲線的結果

心得:

使用過 Artisan - Profile Background 的功能後,發現這功能對於 "重現" 烘培曲線,真的有很大的助益,真的是好功能啊!


2020年12月1日

[Building Embedded Linux] Part 3: Target Board


 “Building Embedded Linux” 總是要有 "Target Board" 吧!

若你已經有 Target Board 了,那這篇文章,你就不用再繼續閱讀了;若你還在挑選 Target Board ,那底下的 2 點可以參考一下。

  1. 普遍性:這一點有兩項好處,第一項好處就是板子的取得價格 "低",不會太傷荷包;第二項好處是 "社群支援多";例如 Arduino 以及 Raspberry Pi 的板子,使用的人多,想問問題,到相關的社群都可以得到幫助。

  2. 成功的案例:以一人之力而言,Building Embedded Linux”也算是一項 "大工程",個人建議先找到成功的案例,然後模仿案例走一趟過成功的路徑,接著在改變 Target Board,再走一遍;這樣的模式,雖是 Build 了兩回 Image ,但成功率絕對會是很高的,不會讓你灰心喪志。

個人手邊有 Raspberry Pi 3 Model B+ 以及 10年前買的 S3C2440A,依照上面兩點,所以我會先以 Raspberry Pi 3 為 Target Board ,再 Port S3C2440A。 




[農作] 荒地變菜地


     這是柚子園的草地


前陣子柚子園做了矮化,把大部分的樹枝都砍了,所以這片草地大約有 1 年時間會是全日照,於是就將草地變菜地,種起菜了 :-)。

從除草、整地、加熟石灰粉 (殺菌、土質中性化),整整花了一周的時間,終於在今天種下了,大頭菜、青花菜 和 大陸妹 :-)。



2020年11月30日

[Building Embedded Linux] Part 2: Buildroot vs. Yocto


Building Embedded Linux 的做法,在業界有 Buildroot 和 Yocto,兩種做法;兩者的差異,也有人做了一番比較,原文為底下連接。

Buildroot vs Yocto


對於 Linux 不是很熟悉的人, 建議可以直接看 Page 28, 29 以及 31。

Page 28: Buildroot minimal build takes 15+ minutes, Image size is 2.2MB

Page 29: Yocto minimal build takes 50+ minutes, Image size is 4.9MB

相信從這兩張 Slides, 就可以清楚明白這兩種做法的差異度了,這兩種做法沒有好壞之分,只有取捨問題而已。

那如何取捨呢?

原文的 Page 31 就提供了選擇的路徑


而我的選擇是 - Buildroot。

原因如下:

選擇 Buildroot ,除了他強調的 "簡單 ( Strong focus on simplicity )" 以及 “小巧 (small by default)”之外,我另一個在意點,是他保留了原有的 build tools ,如 kconfig, make ...,對於曾經嘗試 Building Embedded Linux 的我,熟悉度以及經驗的承續,都有加分的效果。

而不選擇 Yocto 的原因,是我曾經失敗過,知道 Building Embedded Linux 的 困難度,所以我目前的要求,不是細緻度。


2020年11月29日

[Building Embedded Linux] Part 1: 重拾 Embedded Linux


 


Building Embedded Linux 一直是作為工程師的我,想完成的一件事 (夢想),

那時掏寶在台灣還不盛行,所以上圖這塊板子 (S3C2440A) ,著實花了我好幾張小朋友;

自己搞了半年,雖是沒有具體的成果,但也從失敗中瞭解了更多 Embedded Linux 的知識;

而身處手機代工業的我,在 Google 推出了以 Linux 為核心的 Android 手機後,

我也就從在 "RTOS 打混" 輾轉換成在 "Embedded Linux 摸魚”了;

你說這是巧合,還是孽緣?


在 Linux 推出 20 年之際,偶然的機會又讓我看到 Buildroot 文章,

發現 Building Embedded Linux 不再是那麼瑣碎,已經可以有系統性的被建構

這著實又燃起了我的 "工程師魂" 了! 

我的 S3C2440A 是否可以重見天日 ?

還是孽緣作祟 

待續。。。


2020年11月28日

[MicroPython 教學] Ampy 基本操作


 Boot Process

MicroPython (MPY) 在 power-up 或是 hardware  reset 後, 正規 (standard) Boot Mode 是先執行 File System 上的 boot.py,然後 configure USB, 接著就是執行 main.py。

從 MPY 官方的文件裡,boot.py 是不建議一般使用者去更改他的,除非你是高級用戶 (advance user) ;也就是說,我們寫的 script 盡可能是改寫在 main.py 或是小改 main.py 來載入你自己的模組了。而能讓 MPY 執行你改寫的 script 方法,有以下 2 種方式可以達成。

  1. 和 Arduino 一樣,將改寫好的 main.py 和 MPY source code 重新編譯 ,然後再 download 重新編譯好的 MPY firmware,這樣你的 script 就能被順利的執行了。但這方法其實已失去 MPY 的設計原意了,因為這方法應該只有在改寫或新增 MPY Library 才發生才對,區區 main.py 更改應該使用第 2 種方法。

  2. 透過 Tool 載入改寫好的 main.py ( Load File ) 並執行他 ( Run File );MicroPython 官方提供的 File System Tool 是 rshell ( Remote MicroPython shell );rshell 功能完整,但對於只是想更改 MPY File System 內容的簡單目的則是過於複雜了,而且 rshell 在 Windows OS 有跑不起來的問題

ampy - Adafruit MicroPython Tool 

ampy 是一個相對精簡於 rshell 功能的 command line tool ;精簡而不複雜,對於只是想更改 MPY File System 內容的簡單目的則是綽綽有餘,加上能跨平台 Windows OS 也能 Run,也就成就他的普及率了。

Install ampy 


以下是安裝 ampy 的方法

Windows OS: 

pip install adafruit-ampy

Ubuntu OS: 

sudo pip3 install adafruit-ampy

Ampy Usage

ampy 的使用方法說明,只要在 Command Line 或 Terminal 的視窗需要輸入 ampy 就可以看到了;如下的畫面就是 ampy 跑在 Windows OS 的截圖。


當然, 以下的指令更為正規

ampy --help 

Command Format

 從上圖的說明,我們可以得知 ampy command format

ampy [OPTIONS] COMMAND [ARGS] 


Serial Port

不管是 rshell 或是 ampy ,在做檔案操作 (File Operation) 之前,都是必須先知道你板子 serial port 的位址。例如我的板子就是在 COM7,這可以在裝置管理員查到,如下圖。

所以想知道 MPY SD 的檔案資料就可如此下指令

ampy --port com7 ls

Set Path for Serial Port

在 Command Line / Terminal 視窗, 雖是一個上鍵就可以重複上一個指令,但若是想簡化指令,不再重複出現 --port com7 這段字串,是可以在 Command Line / Terminal 下輸入以下字串來設定 serial port 的路徑的。

set ampy_port=com7



List File : ls

在 Windows 要查一個檔案目錄的資訊是透過 dir (directory) command ,在 Linux 則是 ls (list) command ,因為 ampy 是從 rshell 簡化而來的,有 Linux 的身影,所以所有的 Commands 都是和 Linux 相同。

Syntax : ampy --port comport ls


Create and remove directory : mkdir / rmdir

新增一個檔案目錄的。

Syntax : ampy --port comport mkdir new/directory

Load File : put / get

將你電腦上的檔案複製到 MPY 板子上目錄的指令是 put 。

將MPY 板子上的檔案複製到你電腦上的指令則是 get 。

Syntax : ampy --port comport put filename

Run File : run

想讓 MPY 板子馬上執行你的 script 的指令則是 run 。

Syntax : ampy --port comport run filename



Remove File : rm

刪除 MPY 板子上檔案的指令則是 rm。

Syntax : ampy --port comport rm filename

Soft-Reset / Reboot : reset

最後一個 ampy 支援的 command 是 reset,reset command 則是執行 softreset ,讓 MPY 做 reboot 的動作。

Syntax : ampy --port comport reset

小技巧

示範完所有 ampy 支援的 commands 後,你是否有發覺沒有 rename 的 command, 想直接將 test.py 改名成 main.py ,是不是只能在 PC 端改好檔名再重新上載到 MPY 板端 ?

這裡教你一個小技巧,利用 put command ,直接做到 "側妃變正宮" 的方法。

Syntax : ampy --port comport put test.py main.py



熱門文章