前言
-
最近购买了一块 STM32F407VET6开发板【魔女】,http://www.stm32er.com/
-
通过原理图了解到,开发板板载 CMSIS-DAP 调试下载口,例程部分大部分以裸机程序为主
-
目标:打算移植适配到 RT-Thread
适配 RT-Thread
-
RT-Thread 支持 STM32F407 系列的 MCU,因此不同的 STM32F407 开发板,可以通过【拷贝】一个类似的 BSP,快速搭建开发环境
-
本篇通过通过初步搭建 【魔女】STM32F407VET6开发板 RT-Thread BSP
整理RT-Thread工程目录
-
如果通过 github 拉取 RT-Thread 最新的代码,发现包含大量的 BSP,也就是工程目录体积比较大,因此,可以基于 RT-Thread 最新代码,搭建一个【最小】的精简目录,只保留 STM32F407 依赖的代码工程
-
RT-Thread 内核代码(不含 BSP)
-
STM32F407 HAL 库(包括驱动库)
-
STM32F407 BSP,这里可以使用
rt-thread\bsp\stm32\stm32f407-st-discovery
(1)内核目录
- 这里部分没有使用的目录与文件就不添加到工程里面了
(2)libraries目录
-
rt-thread\bsp\stm32\libraries
下有多个STM32 MCU 系列的 HAL 库 -
当前开发板使用:STM32F407VET6,因此只需要
STM32F4xx_HAL
-
rt-thread\bsp\stm32\libraries\HAL_Drivers
下面包含常用的设备驱动,因此也拷贝到工程中
(3)bsp目录
- 这里直接拷贝
rt-thread\bsp\stm32\stm32f407-st-discovery
即可,后面基于这个 bsp 做一些适配操作
构建适配修改
-
构建编译,需要根据目录的调整,修改一下配置
-
当前的 IDE 使用 Keil MDK5,版本 5.36
-
RT-Thead ENV 工具: 2.0
调整 RT-Thread 目录配置
-
stm32f407-st-discovery/Kconfig : 修改
RTT_DIR := ../rt-thread
-
stm32f407-st-discovery/SConstruct : 修改
RTT_ROOT = os.path.normpath(os.getcwd() + '/../rt-thread')
更新配置并编译
-
通过 RT-Thread ENV 工具: menuconfig 打开图形配置,然后保存退出,更新 rtconfig.h 文件
-
通过 RT-Thread ENV 工具:
scons --target=mdk5
更新生成 Keil MDK5 的工程project.uvprojx
-
使用 Keil MDK5 打开
project.uvprojx
,或者 双击project.uvprojx
打开 工程 -
全编译,发现编译通过
适配与修改
-
更改 Keil MDK5 STM32 MCU 型号:STM32F407VET6
-
后续可以进一步确认链接脚本的配置:Flash 与 RAM 大小是否合适:
stm32f407\stm32f407-st-discovery\board\linker_scripts\link.sct
- 更改调试下载器为 : CMSIS-DAP
- 点击 Keil MDK5 下载按钮,发现正常下载
更改 LED 引脚
- 通过查看 【魔女】 STM32F407VET6 开发板, LED 红灯引脚为
PC5
/* defined the LED_RED pin: PC5 */
#define LED_RED_PIN GET_PIN(C, 5)
int main(void)
{
/* set LED0 pin mode to output */
rt_pin_mode(LED_RED_PIN, PIN_MODE_OUTPUT);
while (1)
{
rt_pin_write(LED_RED_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED_RED_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
return RT_EOK;
}
- 修改引脚后,再次编译并下载,发现 开发板 LED 红灯正常闪烁, RT-Thread 初步运行起来了
小结
-
本篇记录 STM32F407VET6 开发板 RT-Thread BSP 的搭建过程,由于 RT-Thread 支持 STM32F407 系列的 BSP,因此通过拷贝 相似 平台 BSP,可以快速搭建工程
-
接下来确认 RT-Thread MSH 串口驱动是否正常