完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文主要分析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:UsersxxAppDataLocalArduino15packagesSTM32 二、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 (唤醒管脚、u***数据管脚定义) ----》variant.cpp (与variant.h中管脚定义对应的stm32管脚数组定义,stm32时钟定义) ----》variant.h (开发板管脚定义、其它功能定义) 三、创建自己的开发板 通过上面分析,可见arduino是对应开发板进行编程的。variants里肯定就没有我使用的山寨板,也没有我使用的同型号芯片的开发板,所以需要自己添加一些信息。 建立文件夹variantsSTM32_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。 执行后将输出ArduinoSTM32F103R(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_F103XXldscript.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_F103XXvariant.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生成的时钟配置进行修改,切勿直接替换! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1763 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1617 浏览 1 评论
1059 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
723 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1933浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
726浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
592浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
550浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 15:45 , Processed in 0.899939 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号