用arduino对stm32编程(一)

用arduino对stm32编程(一)本文主要分析stm32duino文件和自建stm32开发板的过程。一、开发环境开发板:xx(未知,用别人买的山寨板mini_stm32)stm32:stm32f103rct6arduino版本:1.8.9stm32duino:https://github.com/rogerclarkmelbourne/STM32duino-bootloader(在arduinoIDE文…

本文主要分析stm32duino文件和自建stm32开发板的过程。

一、开发环境

开发板:xx(未知,用别人买的山寨板mini_stm32)

stm32:stm32f103rct6

arduino版本:1.8.9

stm32duino:https://github.com/rogerclarkmelbourne/STM32duino-bootloader

(在arduino IDE 文件->开发板管理器网址:https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

stm32duino相关文件都存在C:\Users\xx\AppData\Local\Arduino15\packages\STM32

二、stm32duino文件分析

stm32duino文件夹说明

STM32

—->hardware

——–>stm32

————>1.6.1

—————->CI                                                   (xx,未知)

—————->History                                            (开发板历史信息,boards.txt历史)

—————->libraries                                           (一些stm32duino作者自己写的库)

—————->system                                             (stm32底层驱动文件)

—————->variants                                            (开发板信息)

—————->platform.txt                                       (包含stm32使用到的编译器,编译参数,烧录工具等)

—————->boards.txt                                         (包含开发板的信息)

—————->keywords.txt                                      (包含编程时的关键字)

—————->programmers.txt                                (空)

—->tools                                                                 (编译工具,创建自己开发板的工具)

 

分析一下stm32duino中的开发板variants/PILL_F103XX,其芯片型号STM32F103CBT6与我的相似,包含如下文件

variants/PILL_F103XX

—->ldscript.ld                                       (链接文件,)

—->PeripheralPins.c                            (管脚复用功能定义,如serial、spi、iic、adc、pwm等等)

—->PinNamesVar.h                              (唤醒管脚、usb数据管脚定义)

—->variant.cpp                                     (与variant.h中管脚定义对应的stm32管脚数组定义,stm32时钟定义)

—->variant.h                                         (开发板管脚定义、其它功能定义)

三、创建自己的开发板

通过上面分析,可见arduino是对应开发板进行编程的。variants里肯定就没有我使用的山寨板,也没有我使用的同型号芯片的开发板,所以需要自己添加一些信息。

建立文件夹variants\STM32_F103XX,芯片型号与PILL_F103XX开发板相似,拷贝PILL_F103XX文件夹中的文件到STM32_F103XX进行修改。

1、修改PeripheralPins.c和PinNamesVar.h

这两个文件可以通过作者提供的python工具进行生成(在tools文件夹中),命令:python genpinmap_arduino.py -m STM32F103R(C-D-E)Tx.xml。

执行后将输出Arduino\STM32F103R(C-D-E)Tx文件夹里。复制到STM32_F103XX中替换。

2、修改boards.txt

在最后加入自己开发板信息,

# MINISTM32_F103RC board
GenF1.menu.pnum.MINISTM32_F103RC=MiniStm32 F103RC                                     (arduino中选择开发板可见)
GenF1.menu.pnum.MINISTM32_F103RC.upload.maximum_size=262144                    (stm32的flash大小)
GenF1.menu.pnum.MINISTM32_F103RC.upload.maximum_data_size=49152             (stm32的ram大小)
GenF1.menu.pnum.MINISTM32_F103RC.build.board=MINISTM32_F103RC
GenF1.menu.pnum.MINISTM32_F103RC.build.product_line=STM32F103xE                (stm32型号和容量类型)
GenF1.menu.pnum.MINISTM32_F103RC.build.variant=STM32_F103XX                      (variants中创建的文件夹)

3、修改STM32_F103XX\ldscript.ld

/* Specify the memory areas */
MEMORY
{

RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE                                                                    (按照stm32型号修改ORIGIN)
FLASH (rx)      : ORIGIN = 0x8000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE – LD_FLASH_OFFSET     (按照stm32型号修改ORIGIN)
}

4、修改STM32_F103XX\variant.cpp和variant.h

在variant.h中进行功能管脚功能定义,如serial、spi、iic等。需要注意NUM_DIGITAL_PINS定义是可用gpio的数值。NUM_ANALOG_INPUTS和NUM_ANALOG_FIRST需要adc管脚连续排列,但硬件设计经常不是连续的,不知道怎么用好它。

在variant.cpp中修改digitalPin与variant.h定义的管脚一致。SystemClock_Config函数可以参考STM32CubeMX生成的时钟配置进行修改,切勿直接替换!

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35683.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注