本人手上有原子哥的战舰板,也有ST的nucleo-429板,考虑到经典的移植只涉及到LED和串口,所以决定使用nucleo-429板子来移植。 首先使用STM32CUBE配置引脚并生成源码。由于nucleo板的ST ZIO接口的串口是串口2且映射到PD5\PD6两口,所以配置是要按照上述情况选择配置。串口配置成异步模式,不配置中断。 由于直接使用hal库,为了使用hal库的串口发送函数,定义一个uint8_t out_char[20];数组 并增加代码如下: 编译、下载到板子,运行结果led闪烁,串口输出结果 现在建立RT-Thread工程,将所需要的文件复制到工程文件加下,我是在主目录下新建了一个RTT文件夹,并把相关资料复制到该文件夹下。 在工程组中新建Kernel和CORTEX_M4两个文件夹,并增加相应文件。 添加头文件路径,比书中多一步的是增加“rtconfig.h”文件路径。 编译提示错误,两个函数重复定义。我们把cube生成的it文件中的函数删除(另一个是.s文件内的,我搞不定,只能修改cube生成文件) 再次编译,提示rt_hw_board_init函数没有定义。由于我们使用cube生成文件,自然是没有这个函数的。 我们自己处理一下。把cube自动生成的初始化函数打包复制到自定义的rt_hw_board_init函数中。 编译成功,下载到板子上,跟原程序基本相同。led闪烁,串口反复输出10。
现在配置时钟。 在cube生成的main.c和stm32f4xx_it.c中添加头文件包含#include "rtthread.h"
增加代码如下: 现在使用rt的延时函数运行一下程序,为了观察方便,我们把串口的结果调整为带时间戳的十六禁止显示。结果如下: 可以看到,原输出是0.5S一次,之后是1s一次,时钟配置成功。
现在实现控制台输出。 对照书本,由于rt系统使用的串口输出是bsp_uart_send函数,我们自己写一个(使用uart2),并编写其他相应代码。 编译,下载查看输出。 控制台输出成功。
最后实现动态堆内存管理。 增加和调整代码如下。
rtconfig.h中增加宏定义 主函数的初始化增加动态内存初始化部分 主函数中增加相应的宏定义,并变更代码为: 编译,下载查看输出。 与书上相同,动态内存管理ok。
以上是我根据书上的内容,移植RTT到NUCLEO-429板子的过程,希望路过的大神批评指正。谢谢!
|