如何添加板子和芯片型号到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 测试你的板子

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值