RT-Thread 创建自己的bsp(stm32)

1. 知识准备

如果没有以下的知识储备,也可以根据本文的制作过程,制作出一个工程。但还是需要对rtthread的系统有准确的认知,才能更好的去开发,解决开发过程中遇到的问题,官方有详细的文档和api参考手册

制作一个 BSP 的过程就是构建一个新系统的过程,因此想要制作出好用的 BSP,要对 RT-Thread 系统的构建过程有一定了解,需要的知识准备如下所示:

  • 掌握 STM32 系列 BSP 的使用方法
  • 了解 BSP 的使用方法,可以阅读 BSP 说明文档 中使用教程表格内的文档。了解外设驱动的添加方法可以参考《外设驱动添加指南》。
  • 了解 Scons 工程构建方法
        RT-Thread 使用 Scons 作为系统的构建工具,因此了解 Scons 的常用命令对制作新 BSP 是基本要求。
  • 了解设备驱动框架
        在 RT-Thread 系统中,应用程序通过设备驱动框架来操作硬件,因此了解设备驱动框架,对添加 BSP 驱动是很重要的。
  • 了解 Kconfig 语法
        RT-Thread 系统通过 menuconfig 的方式进行配置,而 menuconfig 中的选项是由 Kconfig 文件决定的,因此想要对 RT-Thread 系统进行配置,需要对 kconfig 语法有一定了解。
  • 熟悉 CubeMX 工具的使用
        在新的 STM32 系列 BSP 中利用了 CubeMX 工具对底层硬件进行配置,因此需要了解 CubeMX 工具的使用方法。

2. clone rt-thread代码到本地

git clone https://github.com/RT-Thread/rt-thread.git

在这里插入图片描述

3. 切换到指定分支

根据需求选择不同的版本
在这里插入图片描述

4. 目录结构

 MINGW64 /d/workspace/for_confluece/rt-thread (master)
$ tree -L 1 -F
.
|-- AUTHORS
|-- ChangeLog.md
|-- Jenkinsfile
|-- Kconfig
|-- LICENSE
|-- README.md
|-- README_de.md
|-- README_es.md
|-- README_zh.md
|-- bsp/                        Board support package,RT-Thread 板级支持包(IAR/MDK 工程在 BSP 目录下的具体的 BSP 中)
|-- components/                 RT-Thread 的各个组件目录
|-- documentation/              一些说明文件,如代码风格说明
|-- examples/
|-- include/                    RT-Thread 内核的头文件
|-- libcpu/                     各类芯片的移植代码,此处包含了 STM32 的移植文件
|-- src/                        RT-Thread 内核的源文件
`-- tools/                      RT-Thread 命令构建工具的脚本文件
8 directories, 9 files

5. 开始创建bsp

5.1 到bsp目录下,找到对应的芯片的bsp

以stm32f405为例,找到对应bsp
在这里插入图片描述

进入到该目录可以看到,这是一个MDK/IAR工程,接下来的操作,均在该目录下完成
在这里插入图片描述

5.2 手动修改部分

因为目前的bsp是针对相近型号单片机,所以我们需要根据具体的型号,配置不同的参数,下表为所有需要配置的内容。

项目 需要修改的内容说明
CubeMX_Config (文件夹) CubeMX 工程:芯片型号,时钟源,下载方式,使能串口外设,配置时钟树,生成对应工程只是为了获得board/CubeMX_Config/Src/main.c下的SystemClock_Config()拷贝到board.c中
linker_scripts (文件夹) BSP 特定的链接脚本
board.c/h 系统时钟、GPIO 初始化函数、芯片存储器大小(根据具体芯片修改 FLASH 和 RAM 的相关参数)
Kconfig 芯片型号、系列、外设资源
SConscript 芯片启动文件、目标芯片型号
修改工程模板 打开mdk或IAR修改芯片。调试下载方式等

因为我们选的芯片,恰巧为该bsp默认的芯片,所以,链接脚本,和ram,rom大小都不需要再配置,只需要使用CubeMX,配置芯片的外设即可。

如果所选芯片与默认芯片不同,参考官方文档,修改其余内容

双击\board\CubeMX_Config\CubeMX_Config.ioc,打开CubeMX工程
在这里插入图片描述
配置系统时钟、外设引脚等,步骤如下图所示:

打开外部时钟、设置下载方式、打开串口外设(注意只需要选择串口外设引脚即可,无需配置其他参数):
在这里插入图片描述
配置系统时钟:
在这里插入图片描述
可以设置项目名称,并在指定地址重新生成 CubeMX 工程。也可以什么都不改,只选择IDE类型:
在这里插入图片描述
注意:在生成代码时,不要勾选以下选项(即:不让其生成单独的 .c/.h 驱动文件,直接全部更新到 rt-thread 要使用的 stm32xxx_hal_msp.c 文件中)
在这里插入图片描述
最终 CubeMX 生成的工程目录结构如下图所示(其他文件可以不删除):
在这里插入图片描述

5.3 修改board/Kconfig文件

原始文件如下:只有uart2一个外设

menu "Hardware Drivers Config"
 
config SOC_STM32F405RG
    bool
    select SOC_SERIES_STM32F4
    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"
        default y
        select RT_USING_SERIAL
        if BSP_USING_UART
            config BSP_USING_UART2
                bool "Enable UART2"
                default y
 
            config BSP_UART2_RX_USING_DMA
                bool "Enable UART2 RX DMA"
                depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA
                default n
 
        endif
 
    source "libraries/HAL_Drivers/Kconfig"
     
endmenu
 
menu "Board extended module Drivers"
 
endmenu
  
endmenu

添加uart1,处理好依赖关系

menu "Hardware Drivers Config"
 
config SOC_STM32F405RG
    bool
    select SOC_SERIES_STM32F4
    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"
        default y
        select RT_USING_SERIAL
        if BSP_USING_UART
            config BSP_USING_UART2
                bool "Enable UART2"
                default y
 
            config BSP_UART2_RX_USING_DMA
                bool "Enable UART2 RX DMA"
                depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA
                default n
 
            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
        endif
 
    source "libraries/HAL_Drivers/Kconfig"
     
endmenu
 
menu "Board extended module Drivers"
 
endmenu
  
endmenu

5.4 重新生成工程

在该目录下打开env工具(env介绍和安装参考准备工作)
在这里插入图片描述
执行menuconfig

在这里插入图片描述
配置kernel中console输出串口(默认为uart2)为uart1
在这里插入图片描述
配置串口等外设
在这里插入图片描述
使用 env 工具输入命令 scons --target=mdk5 重新生成工程,即可使打开keil工程编译烧录测试
在这里插入图片描述

总结:

通过制作bsp过程,需要思考的问题

  • cubemx生成的代码是如何与rtt生成的工程联系起来的(可以通过代码调用关系理解)
  • board下的Kconfig作用(如果添加一个spi设备该如何操作)

版权声明:本文为qq_41053994原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>