1、工程移植
为了让RT_Thread在自己的板子上跑起来,首先应该进行工程移植,但作为初学者,连整个操作系统概念都还不是特别明白的时候,自己去移植无疑是巨大困难,也打击信心。最直接的方式是打开现有的工程,在已有工程上做小小修改,让自己工程能跑起来,程序能简单控制板子上的设备。
移植的时候,选用的是stm32f407ZGT6。这个芯片正好和正点原子出品的stm32f407-Discovery开发板一致。但是板子上没有SRAM和Flash,只有一个32芯片和基本电路。有一个LED灯在PE5口。这些都不影响移植。
首先在RT-Thread官网下载源代码:https://www.rt-thread.org/page/download.html。本次使用的是4.02版本的。同时在官网下载系统说明手册《RT-THREAD 编程指南》:https://www.rt-thread.org/document/site/um4003-rtthread-programming-manual.pdf做备用。
源码下载后解压。得到工程源码。进入路径:RT_THread->bsp->stm32->stm32f407-Discovery。在里面找到对应的工程,双击打开。进入工程后,不做其他任何改动,首先全局编译工程。原子的代码还是挺给力,一次通过(ps:另一个F07开发板代码编译有错误!未深入研究!)。
不管工程代码如何,对板子进行了啥操作,直接进行程序下载(ps:本次使用的板子外设少,不管程序怎么作用,均不会造成物理损坏)。
以上就是程序移植的前期步骤,意在确定如下事项:
A、程序代码是可编译的:如果代码都不能编译通过。对刚接触操作系统的小白来说,简直是不可克服的困难,后面的事也不用考虑做了。
B、程序目标代码是可下载的:程序目标代码不能在板子上运行是没有任何意义的。
确定这两点后,后面的移植才有进行下去的可能。
2、程序下载(板子已经确认好的)
本次验证选择的BSP代码,编译正常通过。同时生成了.hex文件。下载器为经典的20Pin的J-link。因板子为别人开发的,上面只留了SWD下载接口。这无所谓,在网上查找一下,使用杜邦线连接一下就行。引出线如图所示:
各个连线接好,确认各电路模块正常。在Keil中完成相关设置,然后进行程序下载。怀着无比激动的心情,本以为程序一次下载成功。结果下载到一半,弹出了如下提示:
瞬间心情不美了,但问题还是要解决。找万能的百度,发现还不止我遇到了这种情况。有两个经典的讲解:
https://blog.csdn.net/yufengzheyang/article/details/76954121
https://blog.csdn.net/LeonSUST/article/details/85225142
看了后大概明确问题点了。要么程序有问题,要么下载线有问题。那怎么办?一个个验证吧!
验证过程:验证程序问题,确定板子、下载器、下载设置是好的!怎么验证?还是扒正点原子的代码,在正点原子官网下载:http://www.openedv.com/thread-13912-1-1.html。找到f407的最简单的demo-LED,直接打开,编译并下载。发现问题一样。很明显。问题不在程序上了。猜测多半是下载问题。根据查找资料,将下载速率调整一下试试:将速率从5MHZ调整为200kHz,点击下载,成功!!将下载速率调整为500KHz,下载失败。问题解决。因为使用杜邦线的原因,下载速率不能太高。后期将下载线整理加固了下500K时也能正常使用了。
2、下载后无反应
为了稳妥点,还是先将LED-Demo程序下载进去。程序下载进去后无反应。这在预料之中,因为实际使用的LED口都不一样嘛。将LED口更改过来后,程序正常运行。OK!到此证明了板子基本工作条件可以了。下面进行操作系统的移植。
首先还是从点亮一个LED灯开始。进入程序的main函数中,直接修改灯的接口,编译下载,一切顺利,但是灯没反应!!又来问题了。把程序核对了一遍,都没问题,查找半天,发现是Debug中有个下载后Reset选项未勾选。勾选上后,灯闪烁,程序正常运行!
3、串口调试
灯亮了,说明操作系统移植成功了。连接串口,查看log一下。但是串口没有输出(串口工具使用的是正点原子的Xcom)。一样的思路,直接使用正点原子标准串口代码。直接下载运行(PS:本次使用板子引出了串口一使用的是PA9、PA10引脚,和下载代码对应的板子一样,故直接使用)。下载程序后,板子打印出信息。说明板子串口和串口工具,以及波特率设置均没问题。问题在哪?只能是下载的操作系统程序!因系统log是默认串口,故需深入了解一下,有个经典的博客:连接如下:https://blog.csdn.net/qq_40452910/article/details/102522054
在该博客中详细讲解了串口的启动过程。对比代码以及stm32串口的启动配置过程。初步怀疑串口引脚配置错误,因串口1可以挂载到PA9、PA10,也可挂在PB6、PB7引脚上。但这引脚是在哪定义的呢?分析程序源码,深入理解博客内容后,定位为文件:stm32f4xx_hal_msp.c。
直接在工程中查找该文件。打开源码,印证了猜想!修改引脚后,程序运行正常,串口打印正常。
至此,基本环境搭建完成!