目录
前言
- RT-Thread针对STM32系列有一套通用的BSP制作方法,引入了CubeMX工具,用来对BSP中使用的外设引脚进行图形化配置;还提供了多系列的参考模板以及常见厂商的开发板的BSP工程
- 此次制作的BSP使用的板卡我司自己开发的板卡,不方便放上来,但是是仿的正点原子阿波罗开发板,外设都差不多,单片机型号为429IGT6,大家看的时候可以参考阿波罗开发板硬件
- 整个驱动篇的源码可以私聊我或是从这里下载
一、BSP框架
RT-Thread针对STM32系列通用的BSP
每一个 STM32 系列的 BSP 由三部分组成,分别是通用库、BSP 模板和特定开发板 BSP,下面的表格以 F1 系列 BSP 为例介绍这三个部分:
项目 | 文件夹 | 说明 |
通用库 | stm32/libraries | 用于存放 HAL 库以及基于 HAL 库的多系列通用外设驱动文件 |
F1 系列 BSP 工程模板 | stm32/libraries/templates/stm32f10x | F1系列 BSP 模板,可以通过修改该模板制作更多 F1系列 BSP |
特定开发板 BSP | stm32/stm32f103-atk-nano | 在 BSP 模板的基础上修改而成 |
二、BSP制作
制作步骤:
- 复制通用模板
- 使用 CubeMX 工具配置工程
- 修改链接脚本
- 修改board.c/h
- 修改 Kconfig 选项
- 修改构建脚本
- 修改工程模板
- 重新生成工程
需要修改的文件:
项目 | 需要修改内容说明 |
CubeMX_Config (文件夹) | CubeMX 工程 |
linker_scripts (文件夹) | BSP特定的链接脚本 |
board/board.c/h | 系统时钟、GPIO初始函数、芯片存储器大小 |
board/Kconfig | 芯片型号、系列、外设资源 |
board/SConscript | 芯片启动文件、目标芯片型号 |
1、复制通用模板
将\bsp\stm32\libraries\templates文件夹下的 stm32f4xx BSP模板拷贝到\bsp\stm32目录下!!!!
2、使用 CubeMX 工具配置工程
打开 \board\CubeMX_Config 中的CubeMX_Config.ioc工程,根据所需要配置的硬件板卡进行如下修改:
(1)选择芯片为STM32F429IGTx
(2)打开外部时钟、设置下载方式、打开串口外设(注意只需要选择串口外设引脚即可,无需配置其他参数)
(3)配置系统时钟:
(4)设置项目名称,并在指定地址重新生成 CubeMX 工程:
3、修改链接脚本
\board\linker_scripts 文件夹下分别存放了MDK、IAR、GCC三种编译器的链接脚本link.sct、link.icf、link.lds。我们使用的是IAR,所以需要修改link.icf文件
STM32F429IGT6的FLASH为1MByte;RAM大小分别256KByte,其中包含了64KByte的CCM data RAM(core coupled memory),而CCM在F4中只连接到了数据总线上,只能被CPU访问不能直接被DMA访问且只能存放数据,所以这里只使用了192KByte的SRAM1区。如果想使用CCM可参考:链接
4、修改board.c/h
(1)将 \board\CubeMX_Config\Src\main.c 中CubeMX生成的系统时钟初始化函数 SystemClock_Config() 拷贝到 board.c 中
(2)修改board.h
5、修改 Kconfig 选项
\board\Kconfig 中主要需要修改 芯片型号和系列、BSP的外设支持选项(基础工程仅需支持GPIO驱动和串口驱动即可)
kconfig语句分析:
(1)config 语句表示一个配置选项的开始,紧跟着的 BSP_USING_COM7 是配置选项的名称,config 下面几行定义了该配置选项的属性。属性可以是该配置选项的 类型、输入提示、依赖关系、 默认值、帮助信息:
- bool 表示配置选项的类型,每个 config 菜单项都要有类型定义,变量有5种类型。
(1)bool 布尔类型
(2)tristate 三态类型
(3)string 字符串
(4)hex 十六进制
(5)int 整型
- select 是反向依赖关系的意思,即当前配置选项被选中,则RT_USING_UART就会被选中
- default 表示配置选项的默认值,bool 类型的默认值可以是 y/n
(2)menu/endmenu 语句用于生成菜单
(3)if/endif 语句是一个条件判断
(4)menuconfig 语句表示带菜单的配置项
(5) depends on 表示依赖某个配置选项
(6)source 语句用于读取另一个文件中的 Kconfig 文件
在上述所以选项被选中后,会在rtconfig.h中生成如下宏:
#define SOC_STM32F429IG
#define SOC_SERIES_STM32F4
#define RT_USING_COMPONENTS_INIT
#define RT_USING_USER_MAIN
#define BSP_USING_COM7
#define BSP_USING_UART
#define BSP_USING_UART7
#define BSP_USING_GPIO
#define RT_USING_PIN
#define RT_USING_SERIAL
#define BSP_UART7_RX_USING_DMA
6、修改构建脚本
\board\SConscript 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加的文件。在这一步中需要修改芯片型号以及芯片启动文件的地址,修改内容如下图所示:
STM32F429xx 宏标识会在stm32f4xx.h中作为宏条件判断,包含目标芯片的头文件
7、修改工程模板
template 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式
8、重新生成工程
在 env 中输入 menuconfig 对工程进行配置,生成新的 rtconfig.h 文件。如下图所示:
使用 env 中输入命令 scons --target=mdk5/mdk4/iar 重新生成MDK5/MDK4/IAR工程
三、BSP验证
(1)BSP制作完成生成目标工程后,修改main.c中的 LED0_PIN 的引脚
/* defined the LED0 pin: PH2 */
#define LED0_PIN GET_PIN(H, 2)
(2)使用 scons --dist 生成一个独立的BSP,此命令会在 BSP 目录下生成 dist 目录,dist中的工程可拷贝到任何目录下
(3)连接shell使用com口(UART7),使用IAR编译下载到板卡,会打印出RTT信息