RT-Thread是一款国产的开源嵌入式实时操作系统,相对于ucos,它有一个finsh shell系统,它可以除了完成一般shell的功能外,甚至还可以自定义命令,这个功能十分惊艳,而且该系统的维护团队专门为各种mcu单独开发分支,这也为我们的移植提供便利,RT-Thread基于stm32芯片一共有4个分支,分别为F0、F1、F2、F4各一款芯片设置分支。由于stm32芯片各系列兼容性非常好,所以在stm32f446上的移植也不用费多大力气。
RT-Thread最新稳定版是2.02版,从官网上下载好源码之后,我们可以在bsp文件夹下面看到有一个stm32f40x的分支,这是专门为f407芯片而设立的一个分支,在这个分支的基础上吧RT-Thread移植到F446上。
首先在st官网上下载最新版的外设库,我移植所用到的外设库是1.5.1版,最新的应该是1.6以上的版本了,不过1.5.1已经可以支持到F446了。下载好后,对stm32f40x文件夹Libraries下的文件进行替换,这个文件夹主要是放置一些外设库和启动文件等等,启动文件我们用startup_stm32f446xx.s替换startup_stm32f4xx.s。
在boart.h里面配置好一些关于芯片的信息,比如sram,finsh使用的串口等等
编译通过就ok啦,
由于finsh使用串口2,故把PA2、PA3连接到stlink 的tx rx上,打开putty软件,设置好串口号、波特率上电就可以看到finsh已经运行起来了,不过前提是已经安装好stlink虚拟串口工具
按下TAB便可以返回当前有效的命令。
好像拿到新开发板第一个程序都是点灯呵呵,按照惯例还是点灯,可以看到里面有led_on和led_off两条命令,这个是根据nucleo板上面的用户led写的两条命令,可以利用对led灯进行操作,原理也是很简单,只要模仿系统的代码写出对应的就可以了
void led_on(void)
{
rt_pin_mode(54,0);
rt_pin_write(54,1);
rt_kprintf("LED has been opened");
}
FINSH_FUNCTION_EXPORT(led_on,set_led_on);
void led_off(void)
{
rt_pin_mode(54,0);
rt_pin_write(54,0);
rt_kprintf("LED has been closed");
}
FINSH_FUNCTION_EXPORT(led_off,set_led_off);
最后附上移植后的程序
stm32f446.zip
(1.42 MB)
|