如何添加板子和芯片型號到STM32duino的支持列表中

前言

這一份文檔是STM32duino的github的wiki裏面所包含的教程,目前這一個項目支持的板子(他們叫做varient,變體)還很少,所以就有了這樣一個自己添加板子的教程。

正文

Frederic Pillon 在6月12日的時候編輯了這一個頁面 · 23 revisions

此文檔中顯示了以下所有步驟的示例: Add Nucleo-F207ZG (無視最後兩項)

自從此PR創建以來,已經做了一些改進。

  • 不需要定義CMSIS啓動文件,因爲它們現在都是在覈心中定義的。 See #70
  • 現在可以定義自定義的啓動文件了(startup file). #353
  • variant.h.中使用define而不是enum來定義引腳 詳情見 #356
  • 不需要做更多對STM32 HAL 庫的配置了. See #518

 

創建一個新的板子

到STM32 core的variant' 文件夾下
可以參考這一個頁面: Where are sources

 

1 - 建立一個stm32/variants/board_template 文件夾的新的拷貝,你可以隨便命名它

舉個例子: 添加一塊 Nucleo-F207ZG

cp -a board_template NUCLEO_F207ZG (linux)

也可以複製最相似的板子的文件

 

2 - 添加引腳映射

適用於所有STM32 MCU的STM32工具包還有PeripheralPins.c 文件和PinNamesVar.h 文件都已提供了,你可在這裏獲得你想要的資料: Arduino_Tools/genpinmap/Arduino

也可以手動生成它們,請參見genpinmap。

將PeripheralPins.c和PinNamesVar.h文件複製到創建的板子文件夾中。

Nucleo-F207ZG爲例:

genpinmap/Arduino/STM32F207Z(C-E-F-G)Tx/PeripheralPins.c

genpinmap/Arduino/STM32F207Z(C-E-F-G)Tx/PinNamesVar.h
放在
variant/NUCLEO_F207ZG/

文件夾裏面

 

3 預覽引腳映射

添加PeripheralPins.c之後,請仔細檢查。
如果針對相同的IP多次生成了引腳,則註釋一行
如果不使用該引腳(例如,在板上屏蔽掉一些硬件)

你可以使用相關的用戶手冊來定義最佳的引腳映射:
Nucleo-F207ZG 爲例
UM1974: STM32 Nucleo-144 boards

也可以檢查mbed os的等效文件: ST-Nucleo-F207ZG

 

4 - 查看引腳和信號引腳編號

按需求來編輯variant.h和variant.cpp文件。
在variant.cpp中:

  1. 你要填寫數組const PinName digitalPin []。 該數組的功能是將Arduino引腳號(Dx或x或PYx)對應到STM32引腳(PY_x)。

variant.h文件中:

  1. 對齊variant.h中digitalPin []數組中上面定義的PinName的數量。
    定義所有可用的引腳及其鏈接的引腳號,該數字是digitalPin []數組中的索引。

舉個例子:

#define PG9  0
#define PG14 1
#define PF15 2
#define PE13 3
#define PF14 4
  1. 查看宏以指向正確的引腳名稱/編號:LED_BUILTIN,MOSI,MISO,SCLK,SDA,SCL,...
    請注意,其中一些在內核中具有默認值。 僅當與默認值不同時才重新定義它們。
    參考: https://github.com/stm32duino/Arduino_Core_STM32/blob/c392140415b3cf29100062ecb083adfa0f59f8b1/cores/arduino/pins_arduino.h#L142
    到這裏,你能添加自定義的定義,去匹配你的需求了

 

5 - 系統時鐘配置

variant.cpp文件中, void SystemClock_Config(void) 需要定義。
可以通過STM32CubeMX或複製自STM32CubeYY項目示例(其中“ YY”是MCU系列)

關於操作STM32CubeMX :

  1. 運行STM32CubeMX,創建一個新項目,然後選擇目標MCU或開發板(如果列表中有列出)。
  2. 轉到“引腳分配”選項卡,啓用所需的外圍設備:I2C,SDIO,SPI,USB,...

配置時鐘:

  •      如果電路板具有外部晶振:在“ Pinout”選項卡RCC-> HSE外設中設置爲Crystal。
  •      在“時鐘配置”中,將HSE輸入頻率設置爲晶體1,然後將PLL Source Mux設置爲HSE。
  •      將HCLK設置爲最大頻率,STM32CubeMX將自動配置時鐘樹並解決衝突問題。

生成代碼:

  1. 設置工具鏈/ IDE:SW4STM32
  2. 在生成代碼的時候,還將生成外設的時鐘配置
  3. 將src / main.c中生成的void SystemClock_Config(void)複製到variant.cpp中

 

6 - 更新 ldscript.ld

可以通過STM32CubeMX或
複製自STM32CubeYY項目示例(其中“ YY”是MCU系列)
將變體文件夾中的ldscript.ld替換爲根文件夾中STM32CubeMX生成的STM32YYxxxxxx_FLASH.ld。
Nucleo-F207ZG的示例:STM32F207ZGTx_FLASH.ld

 

7 - HAL庫的配置

如果說你的核心版本大於1.5.0,那麼每個STM32系列均提供默認的STM32 HAL配置。 請參閱hal-configuration。

在variant.h中添加任何其他的HAL庫的模塊定義。

以Nucleo-F207ZG爲例:

/ *額外的HAL模塊* /
#定義HAL_DAC_MODULE_ENABLED
#定義HAL_ETH_MODULE_ENABLED

在variant.h中添加任何其他HAL配置。

Example #define HSE_VALUE 25000000U

 

8 - 聲明板子,添加到ArduinoIDE

仍然要手動的添加菜單並添加相關信息(閃存和SRAM大小,CPU頻率等)。
更多可選項可以看這一份文檔 Arduino Boards.txt specifications
編輯boards.txt 文件,操作如下:

  1. 複製文件中與你的芯片最類似的部分內容
  2. 通過menu.pnum。<new_board_name>重命名所有menu.pnum下的<old_board_name>
  3. 將build.mcu =和build.cmsis_lib_gcc =更新到正確的cortex-mX版本
  4. 將build.series =更新爲正確的STM32YYxx(其中YY是MCU系列,比如F4比如G0)
  5. 將build.product_line =更新爲正確的STM32YYXXxx MCU版本。
  6. 將upload.maximum_size =和upload.maximum_data_size =更新爲正確的Flash和SRAM大小

 

9 - 重新啓動

重新啓動Arduino IDE,並且使用Blink-example 測試你的板子

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章