Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植

Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植

1、RT-Thread下载

这一节基于rt-thread nano版本,进行内核的移植,不包含任何组件。移植成功后,可创建任务,串口输出RT-Thread版本信息。
在这里插入图片描述

2、RT-Thread移植(基于GCC)

首先找一个模版工程

我是用的这第二节课程RCC的那个源码,因为这个工程最简单,只初始化了一个led,系统时钟,以及滴答定时器。这样移植后出现问题,也好方便排查。
RT-Thread源码解压后,我们只需要将下面几个目录copy到我们的工程中。
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第1张图片
componments目录这一节没有用到,后面会用。
src 内核源码
includ 头文件
libcpu 因为stm32F411是m4内核,所以我们只需要arm/cortex-m4那个文件夹即可。

在RCC目录下新建device/rt-thread目录,将上面四个文件夹进去。
如下:
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第2张图片

修改Makefile,将rh-thread源码编译进去。

Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第3张图片
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第4张图片
注意这里.S要改成.s

Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第5张图片

编译问题修改


我们从源码bsp下copy一个rtconfig.h放到RCC/User目录下。



CFLAG += -Wa,-mimplicit-it=thumb
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第6张图片

屏蔽掉stm32f4xx_it.c中这两个回调函数。

Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第7张图片
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第8张图片
关于systick定时器我放到了board.c里面,所以这里就不用写了。

这样应该就可以编译过了,如果有问题,请留言吧。

创建board.c文件

完善rt_hw_board_init函数。这个函数开机是这样调用的。
startup_stm32f411xe.s中 bl main我们需要改成bl entry。
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第9张图片
entry的定义在component.c中
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第10张图片
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第11张图片
rt_hw_board_init函数我们初始化我们之前那些硬件就好,比如时钟,串口,systick,led等。
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第12张图片
我这里就写了Board_Init();另外我在rtconfig.h中打开了RT_USING_HEAP这个宏,这是动态创建任务的宏定义,系统默认创建任务用的是静态创建方式。
所以要初始化heap。

初始化systick,一定要开启中断。在中断函数里调用rt-thread的节拍函数。
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第13张图片
滴答定时器初始化。
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第14张图片
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第15张图片

使用rt_kprintf打印

要重写rt_hw_console_output函数,换成自己的串口发送函数。
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第16张图片
这样开机就会有rt-thread version的log。
在这里插入图片描述

创建任务

Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第17张图片
另外
注意main函数要返回,不能跟freertos那样,写个while循环。开始我写成while死循环,任务一直创建不成功,查了好久才找到原因。
Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植_第18张图片

代码

代码下载

你可能感兴趣的:(Nucleo-F411RE,stm32,单片机,嵌入式硬件)