the 1st edition: 20130405
the 2nd edition: 20150119
這個系列累積了不少篇幅, 以下是所有系列的文章目錄:
bare-metal for stm32f4 discovery board content
在 《作業系統之前的程式》這系列 x86 os kernel 開發紀錄的學習經驗, 我想依樣畫葫蘆拿到 arm 的學習上, 重新學習一個完全不一樣的平台。
這是一個辛苦的開始, 縱使有了 x86 的學習經驗, 也無法帶來太多的助益, 仍然需要閱讀大量的資料, 甚至去找到相關資料也是個難題, 而程式的撰寫也只是最基本的練習。
但在開始第一個作業系統之前的程式 for stm32f4discovery 之前, 得先來打造開發環境, 這是與 x86 native toolchain 不同的地方, 別小看這部份, 這可不是一件容易的事, 最主要的部份就是 arm toolchain (cross compiler) 和燒錄程式碼到 stm32f4discovery flash 的工具。
目前市面上琳琅滿目的開發板, 要從中挑選實在不容易。Fig 1 是 stm32f4discovery, jserv 的 進階嵌入式系統開發與實作課程 (201209~201301) 就是使用這塊開發板, 以 700 NT 購得。因為參加了這個課程, 所以才選定這塊開發板, 照著課程的資源來學習, 最是省事。
選擇板子時會有一個問題, 怎麼把程式碼燒錄到那塊板子上呢? 這是個大問題。而這塊開發板珍貴的地方就是內建 ST-LINK/V2, 可以將程式碼燒錄到 flash, 再也不怕燒爛 flash; 更珍貴的地方是: 還可以使用類似 jtag 的方式 debug, 不用另外買個 jtag, 當然這些都需要搭配的軟體才能運作, openocd 或是 st-util 都可以做到, 這是開發 os 等級程式碼的利器。我知道還有一塊版子也有類似的功能, freescale m0+ 系列, 使用的是 opensda, 不過我不確定 openocd 是不是可以支援 opensda。
而 stm32 提供了 bootloader 的方式, 就算沒有 st-link 也可以燒錄程式, 但還要調整 jmp, 不是很方便。有興趣可參考: stm32f4discovery system memory - boot loader
Arduino 或是 Intel Galileo 這種開發版主打快速、簡單、好開發。看看這些書名就可窺探一二:
這些書籍都會有一些很有趣的實作專題, 例如驅動馬達、機器人互動裝置等等 ... 這些很有趣, 能做出來會有一定的成就感。不過我志不在此, 我想研究最底層的秘密, 而不是作組合積木的事情, 例如上電之後怎麼執行第一支程式, 某個 gpio 該怎麼使用? 那個按鈕要能發揮作用需要做什麼事情 ... 所以我會需要有類似 jtag 功能的版子, 這種等級的除錯很難避免, 也很難靠 printf 來除錯, 甚至要自己寫 printf。
不過偶爾看到別人用這些東西做出很好玩的東西, 例如機器手臂、機器人, 自己卻和 datasheet, c/asm code, debugger 打交道, single step 錯誤的程式碼, 而終端機畫面只有一些簡易的文字訊息, 還真是有些落漠之感, 我也想做出一些有趣的裝置。
《 maker 雜誌中文版》有更多類似這樣的作品, 每一件都很能吸引人。
回到 stm32, stm32f4 mcu 全系列可參考 這裡。
這是以 ARM Cortex-M4 為核心的開發版。沒有 mmu, 所以不能練習 page mapping, 這是我覺得比較可惜的部份; 但有個記憶體保護單元 (MPU), 可以保護某個記憶體區塊。這塊板子用的是 stm32 的 STM32F407VG, 其 基本規格:
時脈: 168 MHz
flash & ram size:
STM32F407VGT6 microcontroller featuring 1 MB of Flash memory, 192 KB of RAM in an LQFP100 package.
以下的連結可以下載 firmware, 方便寫程式, 不用辛苦的對付暫存器。
the 2nd edition: 20150119
這個系列累積了不少篇幅, 以下是所有系列的文章目錄:
bare-metal for stm32f4 discovery board content
在 《作業系統之前的程式》這系列 x86 os kernel 開發紀錄的學習經驗, 我想依樣畫葫蘆拿到 arm 的學習上, 重新學習一個完全不一樣的平台。
Fig 1. stm32f4discovery |
但在開始第一個作業系統之前的程式 for stm32f4discovery 之前, 得先來打造開發環境, 這是與 x86 native toolchain 不同的地方, 別小看這部份, 這可不是一件容易的事, 最主要的部份就是 arm toolchain (cross compiler) 和燒錄程式碼到 stm32f4discovery flash 的工具。
目前市面上琳琅滿目的開發板, 要從中挑選實在不容易。Fig 1 是 stm32f4discovery, jserv 的 進階嵌入式系統開發與實作課程 (201209~201301) 就是使用這塊開發板, 以 700 NT 購得。因為參加了這個課程, 所以才選定這塊開發板, 照著課程的資源來學習, 最是省事。
選擇板子時會有一個問題, 怎麼把程式碼燒錄到那塊板子上呢? 這是個大問題。而這塊開發板珍貴的地方就是內建 ST-LINK/V2, 可以將程式碼燒錄到 flash, 再也不怕燒爛 flash; 更珍貴的地方是: 還可以使用類似 jtag 的方式 debug, 不用另外買個 jtag, 當然這些都需要搭配的軟體才能運作, openocd 或是 st-util 都可以做到, 這是開發 os 等級程式碼的利器。我知道還有一塊版子也有類似的功能, freescale m0+ 系列, 使用的是 opensda, 不過我不確定 openocd 是不是可以支援 opensda。
而 stm32 提供了 bootloader 的方式, 就算沒有 st-link 也可以燒錄程式, 但還要調整 jmp, 不是很方便。有興趣可參考: stm32f4discovery system memory - boot loader
Arduino 或是 Intel Galileo 這種開發版主打快速、簡單、好開發。看看這些書名就可窺探一二:
這些書籍都會有一些很有趣的實作專題, 例如驅動馬達、機器人互動裝置等等 ... 這些很有趣, 能做出來會有一定的成就感。不過我志不在此, 我想研究最底層的秘密, 而不是作組合積木的事情, 例如上電之後怎麼執行第一支程式, 某個 gpio 該怎麼使用? 那個按鈕要能發揮作用需要做什麼事情 ... 所以我會需要有類似 jtag 功能的版子, 這種等級的除錯很難避免, 也很難靠 printf 來除錯, 甚至要自己寫 printf。
不過偶爾看到別人用這些東西做出很好玩的東西, 例如機器手臂、機器人, 自己卻和 datasheet, c/asm code, debugger 打交道, single step 錯誤的程式碼, 而終端機畫面只有一些簡易的文字訊息, 還真是有些落漠之感, 我也想做出一些有趣的裝置。
《 maker 雜誌中文版》有更多類似這樣的作品, 每一件都很能吸引人。
回到 stm32, stm32f4 mcu 全系列可參考 這裡。
這是以 ARM Cortex-M4 為核心的開發版。沒有 mmu, 所以不能練習 page mapping, 這是我覺得比較可惜的部份; 但有個記憶體保護單元 (MPU), 可以保護某個記憶體區塊。這塊板子用的是 stm32 的 STM32F407VG, 其 基本規格:
時脈: 168 MHz
flash & ram size:
STM32F407VGT6 microcontroller featuring 1 MB of Flash memory, 192 KB of RAM in an LQFP100 package.
以下的連結可以下載 firmware, 方便寫程式, 不用辛苦的對付暫存器。
Part Number | Description |
---|---|
STM-STUDIO | STM Studio run-time variables monitoring and visualization tool for STM8 and STM32 microcontrollers |
STM32CubeF4 | Embedded software for STM32 F4 series (HAL low level drivers, USB, TCP/IP, File system, RTOS, Graphic - coming with examples running on ST boards) |
STSW-STM32068 | STM32F4DISCOVERY board firmware package, including 22 examples (covering USB Host, audio, MEMS accelerometer and microphone) (AN3983) |
STSW-STM32142 | Using STM32F4 MCU power modes with best dynamic efficiency (AN4365) |