RTT学习

发布于:2024-04-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

STM32系列驱动介绍

在RTT实时操作系统中,各种各样的设备驱动是通过一套I/O设备管理框架来管理的。
设备驱动框架给上层应用提供了一套标准的设备操作API,开发者通过调用这些标准设备操作API,可以高效地完成和底层硬件外设的交互。
在这里插入图片描述
使用同一套标准的API开发应用程序,使应用程序具有更好的移植性。
底层驱动的升级和修改不会影响到上层代码。
驱动和应用程序相互独立,方便多个开发者协同开发。

驱动分类介绍

对于一个BSP而言,有如下三类驱动:

  • 片上外设驱动:指MCU芯片上的外设,例如硬件定时器,ADC和看门狗等。
  • 板载外设驱动:指MCU之外,开发板上外设,例如TF卡,以太网卡和LCD等。
  • 扩展模块驱动:指可以通过扩展接口或者杜邦线连接的开发板的模块,例如ESP8266模块。

在这里插入图片描述

STM32系列BSP制作教程

为了让广大开发者更好、更方便地使用 BSP 进行开发,RT-Thread 开发团队重新整理了现有的 STM32 系列的 BSP,推出了新的 BSP 框架。新的 BSP 框架在易用性、移植便利性、驱动完整性、代码规范性等方面都有较大提升,在新的 BSP 框架下进行开发,可以大大提高应用的开发效率。

和RTT以往提供的BSP不同,在新的BSP文件夹中将不会包含固件库、外设驱动等可以被多个BSP引用的代码文件。
将这些通用的文件统一存放在Library文件夹中,通过在特定BSP中引用这些文件的方式,来包含BSP中所需的库文件或者驱动文件。
这种方式不仅大大提高了代码复用率,降低了 BSP 的维护成本,而且可以更方便地给开发者提供更丰富的驱动文件,让开发者可以更容易地找到自己需要的资源。

新的 BSP 框架还引入了 CubeMX 工具,可以使用该工具来对 BSP 中使用的外设引脚进行配置。
CubeMX 工具提供了图形化的配置界面,这种图形化的配置方式对开发者来说更加直观,不仅可以让开发者灵活地配置 BSP 中使用的资源,并且可以让开发者对资源的使用情况一目了然。

BSP框架介绍

在这里插入图片描述
每一个STM32系列的BSP由三部分组成,分别是通用库、BSP模板和特定开发板BSP。

  • 通用库:stm32/libraris,用于存放HAL库以及基于HAL库的多系列通用外设驱动文件。
  • F1系列BSP工作模板:stm32/libraries/templates/stm32f10x,F1系列BSP模板,可以通过修改改模板制作更多F1系列BSP
  • 特定开发板BSP:stm32/stm32f103-atk-nano,在BSP模板的基础上修改而成

RTT的构建与配置系统

在这里插入图片描述

KConfig在RTT中的工作机制

C语言项目的裁剪配置本质上是通过条件编译和宏的展开来实现的,RTT借助KConfig这套机制更方便的实现了这一功能。
以Windows下Env工具中的使用为例,简述Kconfig在RTT的工作机制。

Kconfig机制包括了Kconfig文件和配置UI界面(如menuconfig,pyconfig等)。

Kconfig文件中的配置项会映射至rtconfig.h中
Kconfig文件可以随源码分散至各级子目录,便于灵活修改

在这里插入图片描述
Kconfig文件在源码中呈现树形结构,需要在工程的根目录下存在一份顶层Kconfig文件,顶层Kconfig文件在文件中通过source语句显示地调用各子目录下的Kconfig文件。
Env在根目录下执行menuconfig命令后会递归解析各级Kconfig文件,然后提供如下配置界面,完成相应的配置后并保存,根目录下会存在一份.config文件保存当前选中的配置项,并将**.config文件转化为RTT的系统配置文件rtconfig.h**。

Kconfig源于Linux内核的配置构建系统。

语法

注释

# This is a comment

config语句
定义了一组新的配置项

config BSP_USING_GPIO
	bool "Enable GPIO"
	select RT_USING_PIN
	default y
	help 
	config gpio
  • .config表示一个配置选项的开始,紧跟着的BSP_USING_GPIO是配置选项的名称,config下面几行定义了该配置选项的属性。属性可以是该配置选项的类型、输入提示、依赖关系、默认值、帮助信息。
  • bool表示配置选项的类型,每个config菜单项都要有类型定义,变量有5种类型
    bool 布尔类型
    tristate 三态类型
    string 字符串
    hex 十六进制
    int 整型
  • select是反向依赖关系的意思,即当前配置选项被选中,则RT_USING_PIN就会被选中。
  • default表示配置选项的默认值,bool类型的默认值可以是y/n。
  • help表示帮助信息。

通过env选中以上配置界面的选项后,
最终可在 rtconfig.h 文件中生成如下两个宏

#define RT_USING_PIN
#define BSP_USING_GPIO
config BSP_USING_WDT
	bool "Enable Watchdog Timer"
	select RT_USING_WDT
	default n
#define BSP_USING_WDT
#define RT_USING_WDT
config RT_CONSOLE_DEVICE_NAME
	string "the device name for console"
	defalut "uart1"
#define RT_CONSOLE_DEVICE_NAME "uart1"
config BSP_I2C1_SCL_PIN
	int "I2C1 scl pin number"
	range 1 176
	defalut 116
#define BSP_I2C1_SCL_PIN 116

menu/endmenu语句

menu语句用于生成菜单

menu "Hardware Drivers Config"
	config BSP_USING_COM2
        bool "Enable COM2 (uart2 pin conflict with Ethernet and PWM)"
        select BSP_USING_UART
        select BSP_USING_UART2
        default n
    config BSP_USING_COM3
        bool "Enable COM3 (uart3 pin conflict with Ethernet)"
        select BSP_USING_UART3
        default n
endmenu

menu之后的字符串是彩蛋猫,menu和endmenu之间有很多config语句

if/endif语句

menu "Hardware Drivers Config"
	menuconfig BSP_USING_CAN
	bool "Enable CAN"
	default n
	select RT_USING_CAN
	if BSP_USING_CAN
		config BSP_USING_CAN1
			bool "Enable CAN1"
			default n
	endif
endmenu

当没有选中“Enable CAN”时
在这里插入图片描述
在这里插入图片描述

menuconfig语句

menuconfig语句表示带菜单的配置项

menu "Hardware Drivers Config"
	menuconfig BSP_USING_UART
		bool "Enable UART"
		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
        endif
endmenu

在这里插入图片描述
在这里插入图片描述
menuconfig与config语句很相似,但它在config的基础之上,要求所有的子选项作为独立的行显示。

depends on表示依赖某个配置选项,depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA,表示只有当BSP_USING_UART1和RT_SERIAL_USING_DMA 配置选项同时被选中时,当前配置选项的提示信息才会出现,才能设置当前配置选项

source语句

用于读取另一个文件中的Kconfig文件