风诰杂记

天下有风,姤。后以施命诰四方。

0%

制作 rt-thread 的 bsp 软件包

获取 rt-thread 软件包

使用 git 工具,在 rt-thread 官网或者 gitee 的代码库获取最新的 rt-thread 源代码。

源代码目录结构如下所示:

rt-thread目录结构

源码的目录结构就不进行详细的说明了,相关的资料可以在 rt-thread 的官网查到。

有了 rt-thread 的代码,下面就是制作符合我们硬件实际情况的 BSP软件包了。

BSP 软件包制作

rt-thread 的源代码针对 STM32 系列的应用提供了移植模板,移植起来非常的方便。

根据 rt-thread 官方提供的资料,在进行 BSP 制作是主要分为以下几步:

1
2
3
4
5
1. 复制通用模板
2. 使用 CubeMX 工具配置工程
3. 修改 BSP 中的 Kconfig 文件
4. 修改构建工程相关文件
5. 重新生成工程

1. 复制通用模板

把 \bsp\stm32\libraries\templates 目录下的 stm32f10x 模板复制到 \bsp 目录下,并命名为 stm32f103rct6-robot-controller :

stm32f103rct6-robot-controller

复制好了之后,就可以进行 bsp 软件包的移植了。

2. 使用 CubeMX 配置工程

开发板原理图

根据开发板的原理图,使用 CubeMX 工具对工程进行基本配置。进入工程目录下的 board\CubeMX_Config 目录,使用 CubeMX 工具 打开 CubeMX_Config.ioc 文件,即可进入工程配置。

PS:CubeMX 是 ST 官方提供的一个图形化配置工具,使用 CubeMX 可以非常方便对 ST 的芯片进行片上外设的配置,大大减低了工程配置的时间,加快了开发的进度。

CubeMX配置

2.1 修改芯片为 stm32f103RCTx

首先,根据实际使用的 ST 的芯片,选择 stm32f103RCTx 系列的芯片。

选芯片

然后根据原理图,配置好 stm32f103RCTx 的各个管脚功能。

2.2 配置 stm32f103RCTx 基本配置

根据原理图配置外部高速时钟、串口1、串口2、串口3、SPI总线以及芯片时钟等。

配置完成

配置完成后,直接使用 CubeMX 生成芯片的配置代码。

生成的代码文件

把生成的目录中 MDK-ARM 目录以及 Drivers 目录删除。并将 /src/main.c 文件中的 SystemClock_Config 函数复制到 board/board.c 文件中,替换原来的 SystemClock_Config 函数。

配置系统时钟

2.3 堆内存配置讲解

通常情况下,系统 RAM 中的一部分内存空间会被用作堆内存。下面代码的作用是,在不同编译器下规定堆内存的起始地址 HEAP_BEGIN 和结束地址 HEAP_END。这里 HEAP_BEGINHEAP_END 的值需要和后面 [3.4.1 修改链接脚本](# 3.4.1 修改链接脚本) 章节所修改的配置相一致。

在某些系列的芯片中,芯片 RAM 可能分布在不连续的多块内存区域上。此时堆内存的位置可以和系统内存在同一片连续的内存区域,也可以存放在一片独立的内存区域中。例如在 L4 系列的芯片上,就可以将堆内存配置在起始地址为 0x20000000 的大小为 96k 的内存空间,而将 0x10000000 开始的 32k 内存空间用作系统运行内存。

配置FLASH

2.4 修改 Kconfig 选项

在本小节中修改 board/Kconfig 文件的内容有如下两点:

  • 芯片型号和系列
  • BSP 上的外设支持选项

芯片型号和系列的修改如下表所示:

宏定义 意义 格式
SOC_STM32F103Rc 芯片型号 SOC_STM32xxx
SOC_SERIES_STM32F1 芯片系列 SOC_SERIES_STM32xx

然后,打开 board/Kconfig 文件把文件的内容更改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
menu "Hardware Drivers Config"

config SOC_STM32F103RC
bool
select SOC_SERIES_STM32F1
select RT_USING_COMPONENTS_INIT
select RT_USING_USER_MAIN
default y

menu "Onboard Peripheral Drivers"

endmenu

menu "On-chip Peripheral Drivers"

config BSP_USING_GPIO
bool "Enable GPIO"
select RT_USING_PIN
default y

menuconfig BSP_USING_UART
bool "Enable UART To USB"
default y
select RT_USING_SERIAL
if BSP_USING_UART
config BSP_USING_UART1
bool "Enable UART1"
default y

config BSP_UART1_RX_USING_DMA
bool "Enable UART1 RX DMA"
depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA
default n

config BSP_UART1_TX_USING_DMA
bool "Enable UART1 TX DMA"
depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA
default n

endif

config BSP_USING_PWM_OUT
bool "Enable Tim module generate output"
default n

config BSP_USING_TIM_ENCODER
bool "Enable Tim module Encoder module"
default n

source "../libraries/HAL_Drivers/Kconfig"

endmenu

menu "Board extended module Drivers"

endmenu

endmenu

至此,rt-thread 的 bsp 软件包就基本制作完成了。