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

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 年時間會是全日照,於是就將草地變菜地,種起菜了 :-)。

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



熱門文章