使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件;
1 自定义boards因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。
1.1 添加一个自定义boards首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置): - C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下: - 1{
- 2 "build": {
- 3 "core": "stm32",
- 4 "cpu": "cortex-m0plus",
- 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
- 6 "f_cpu": "64000000L",
- 7 "framework_extra_flags": {
- 8 "arduino": "-D__CORTEX_SC=0"
- 9 },
- 10 "mcu": "stm32g070rbt6",
- 11 "product_line": "STM32G070xx",
- 12 "variant": "STM32G0xx/G070RBT"
- 13 },
- 14 "debug": {
- 15 "default_tools": [
- 16 "stlink"
- 17 ],
- 18 "jlink_device": "STM32G070RB",
- 19 "onboard_tools": [
- 20 "stlink"
- 21 ],
- 22 "openocd_target": "stm32g0x",
- 23 "svd_path": "STM32G070.svd"
- 24 },
- 25 "frameworks": [
- 26 "arduino",
- 27 "cmsis",
- 28 "libopencm3",
- 29 "stm32cube",
- 30 "zephyr"
- 31 ],
- 32 "name": "MonkeyPi_STM32_G070RB",
- 33 "upload": {
- 34 "maximum_ram_size": 36864,
- 35 "maximum_size": 131072,
- 36 "protocol": "stlink",
- 37 "protocols": [
- 38 "stlink",
- 39 "jlink",
- 40 "cmsis-dap",
- 41 "blackmagic",
- 42 "mbed"
- 43 ]
- 44 },
- 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
- 46 "vendor": "ST"
- 47}
复制代码
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;
1.2 Arduino框架下添加board定义在目录 - C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码
下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下: - 1# MonkeyPi STM32G070RB board
- 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB
- 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB
- 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072
- 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768
- 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus
- 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB
- 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx
- 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx
- 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT
- 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math
- 12Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
复制代码
1.3 添加Arduino板的引脚定义打开目录: - C:\Users\userName\.platformio\packages\framework-arduinoststm32\variants\STM32G0xx
复制代码然后在这个目录的G070RB文件夹下复制 variant_generic.h 和 variant_generic.cpp 两个文件并更改名字为 variant_MONKEYPI_STM32_G070RB.h 和 variant_MONKEYPI_STM32_G070RB.cpp ,这个名字是之前自定义的板子名称,需要一致。 然后在variant_MONKEYPI_STM32_G070RB文件中根据板子硬件信息修改引脚定义,最后添加 SystemClock_Config 时钟配置函数如下: - 1/**
- 2 * @brief System Clock Configuration
- 3 * @param None
- 4 * @retval None
- 5 */
- 6WEAK void SystemClock_Config(void)
- 7{
- 8 /* SystemClock_Config can be generated by STM32CubeMX */
- 9#warning "SystemClock_Config() is empty. Default clock at reset is used."
- 10}
复制代码
并修改文件的定义如下: - #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
复制代码
注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。
2 使用2.1 新建项目在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:
2.2 编写测试Arduino代码打开项目中 src/main.cpp 文件,编写Arduino代码: - 1#include <Arduino.h>
- 2
- 3void setup() {
- 4 // put your setup code here, to run once:
- 5
- 6 pinMode(PB5,OUTPUT);
- 7
- 8}
- 9
- 10void loop() {
- 11 // put your main code here, to run repeatedly:
- 12
- 13 digitalWrite(PB5,1);
- 14 delay(100);
- 15 digitalWrite(PB5,0);
- 16 delay(100);
- 17
- 18}
复制代码
2.3 烧写程序烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件: - 1[env:MonkeyPi_STM32_G070RB]
- 2platform = ststm32
- 3board = MonkeyPi_STM32_G070RB
- 4framework = arduino
- 5
- 6upload_protocol = cmsis-dap
复制代码
修改完成后,点击platformio:Upload按钮即可完成烧写:
转载自:MakerInChina.cn
|