前记:
环境:
1.MCU:STM32F103VCT6
2.RTOS Version:V4.1.0
目录
2.1 从源码打开 STM32F10x BSP 通用模板路径.
2.2 复制 STM32F10x 模板文件夹 到 STM32 的BSP目录。
3.4 在 CubeMX 工程中将芯片型号为 STM32F103RCTx
3.13 在 RT-Thread源码模板的board.h 文件中配置 FLASH 和 RAM 的相关参数.
5.4 gcc 编译器使用的链接脚本 link.lds修改.
严文年 -- 记于苏州
1. 准备工作
1.1 下载RT-Thread 4.10源码.
参考:通过git / SVN 管理源代码的相关章节.
1.2 下载并配置ENV工具.
参考:ENV配置及使用的相关章节.
1.3 下载并安装CubeMX工具.
参考:CubeMX下载及安装的相关章节.
2. 复制通用模板
2.1 从源码打开 STM32F10x BSP 通用模板路径.
2.2 复制 STM32F10x 模板文件夹 到 STM32 的BSP目录。
2.3 修改为自己的项目名称。
3. 使用 CubeMX 工具配置工程
3.1 打开CubeMX配置文件.
3.2 选择使用RT-Thread源码配置的版本.![](https://img-blog.csdnimg.cn/59dcbb4ff302460d8594b7e19f3dc699.png)
3.3 CubeMX自动加载到选定的版本配置.
备注:
1.此过程需要访问CubeMX服务器,电脑要连接互联网.
2.需要检查防火墙是否拦截CubeMX的自动更新进程。
3.4 在 CubeMX 工程中将芯片型号为 STM32F103RCTx![](https://img-blog.csdnimg.cn/6e6eb52266ce4e35b2fb3c4c86c47bee.png)
3.5 保存CubeMX工程.
3.6 配置下载方式.![](https://img-blog.csdnimg.cn/29362a2dd83549a58eb11419b73c6e82.png)
3.7 配置时钟源.![](https://img-blog.csdnimg.cn/8dd3bbb5273a40f1aa71d5e61474953e.png)
3.8 配置串口外设.![](https://img-blog.csdnimg.cn/18d45abee97c4ba3ba1466c1133bf011.png)
3.9 配置时钟树.![](https://img-blog.csdnimg.cn/c39acb24e68042309b844564ca5f2526.png)
3.10 设置Cube MX工程名和保存路径.![](https://img-blog.csdnimg.cn/7f1eae46c15e485e84e2b06f56190010.png)
3.11 生成CubeMX工程文档.![](https://img-blog.csdnimg.cn/9a007043cb9440b3888c4e08e362ff2a.png)
3.12 拷贝系统时钟配置初始化函数.
备注:
1.RT-Thread默认使用MCU内部时钟.
1.在RT-Thread源码 board.c 文件中存放了函数 SystemClock_Config() ,该函数负责初始化系统时钟。当使用 CubeMX 工具对系统时钟重新配置的时候,需要更新这个函数。
2.该函数由 CubeMX 工具根据实际配置重新生成,默认存放在../board/CubeMX_Config/Src/main.c 文件中。但是该文件并没有被包含到我们的工程中,因此需要将这个函数从 main.c 中拷贝该函数到 board.c 文件中,替代源码中默认的内部时钟配置函数。
3.13 在 RT-Thread源码模板的board.h 文件中配置 FLASH 和 RAM 的相关参数.
1.这个文件中需要修改的是 STM32_FLASH_SIZE 和 STM32_SRAM_SIZE 这两个宏控制的参数。本次制作的 BSP 所用的 STM32F103RCTx 芯片的 flash 大小为 256k,ram 的大小为 48k,因此对该文件作出如下的修改:
备注:
部分MCU的FLASH和RAM空间是不连续的,修改时参考Keil配置界面的空间分段信息设置。
3.14 堆内存配置预习.
1. 通常情况下,系统 RAM 中的一部分内存空间会被用作堆内存。下面代码的作用是,在不同编译器下规定堆内存的起始地址 HEAP_BEGIN 和结束地址 HEAP_END。这里 HEAP_BEGIN 和 HEAP_END 的值需要和后面 [第5章节修改链接脚本] 章节所修改的配置相一致。
2.在某些系列的芯片中,芯片 RAM 可能分布在不连续的多块内存区域上。此时堆内存的位置可以和系统内存在同一片连续的内存区域,也可以存放在一片独立的内存区域中。例如在 L4 系列的芯片上,就可以将堆内存配置在起始地址为 0x20000000 的大小为 96k 的内存空间,而将 0x10000000 开始的 32k 内存空间用作系统运行内存。
4. 修改 BSP 中的 Kconfig 文件
4.1 Kconfig文件路径.![](https://img-blog.csdnimg.cn/8359e98683ee461fbb8ce583f8b3630a.png)
4.2 芯片型号和系列修改.
1. 芯片型号和系列修改规则.
4.3 BSP 上的外设支持选项添加.![](https://img-blog.csdnimg.cn/2326503fb0ea4be69b9a5cdba86735f6.png)
5. 修改构建工程相关文件
5.1 修改链接脚本.
1. 脚本文件路径.
备注:
部分MCU的FLASH和RAM空间是不连续的,修改时参考Keil配置界面的空间分段信息设置。
5.2 MDK 使用的链接脚本 link.sct修改.![](https://img-blog.csdnimg.cn/14b460e212fa4dd4aeff64a2dfc21648.png)
5.3 iar 使用的链接脚本 link.icf修改.![](https://img-blog.csdnimg.cn/d8ee25331a9544f4848d62d68008bb7c.png)
5.4 gcc 编译器使用的链接脚本 link.lds修改.![](https://img-blog.csdnimg.cn/856d121c300a4ca1b3f991ec604c12bc.png)
5.5 修改构建脚本
1. SConscript 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件。在这一步中需要修改芯片型号以及芯片启动文件的地址.
2. 在CubeMX生成的工程文件中查询启动文件名称.
3. 在启动文件中查询MCU目标芯片型号的宏定义,HAL库将使用这个宏定义做判断.
4. 修改构建脚本中的启动文件和目标芯片型号宏定义.
5.6 修改工程模板.
1. 工程模板路径.
2.打开并配置工程模板的目标芯片.
3.配置工程模板的输出文件信息.
4.配置工程模板的debug配置.
6. 重新生成工程
备注
重新生成工程需要使用 Env 工具。
6.1 在项目工程根目录,打开ENV工具.
1. 在项目工程根目录,打开ENV工具.
6.2 在 Env 界面输入命令 menuconfig对工程进行配置.![](https://img-blog.csdnimg.cn/ab180340e7c14b458dc2f60a3a905880.png)
6.3 生成 MDK5 工程.
1.输入命令 scons --target=mdk5 -s 重新生成 MDK5 的工程.
2.重新生成工程成功.
7. BSP功能验证.
7.1 打开MDK 5 工程.![](https://img-blog.csdnimg.cn/f09085d906844d79849cb14ebe6bd45d.png)
7.2 编译MDK 5工程.![](https://img-blog.csdnimg.cn/0d6f0f33b2b14eb49601161305ffbf87.png)
7.3 烧录Hex文件.
备注:
也可以选择自己常用的烧录工具.或者使用debug工具直接烧录.
7.4 结果验证.
8. 制作完成的BSP工程源文件.
后记: