本文主要分析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