文章目录
一、使用stm32cubemx生成rtthread工程
官方文档已经说的很清楚了,这里就不赘述了:基于 CubeMX 移植 RT-Thread
二、一些小坑
1.finish未添加

可以看到编译器给我们报错了,这种情况我们需要去打开rtconfig.h文件,有两种方式解决
一是直接取消注释:

二是使用Use Configuration Wizard in Context Menu:在上下文中使用配
置向导来配置 rtconfig.h 中的宏定义。


到此编译就会通过了。
2.重映射rt_kprintf和rt_hw_console_getchar
这个很简单,只需要进入board.c,可以发现官方已经帮我们做好了。

当然我们不能直接使用,除非官方的UartHandle句柄和cubemx中配置的串口一样,所以我们需要进行一点修改,进入cubemx生成的usart.c,复制里面自动生成的句柄,然后修改程序(让UartHandle绑定我们配置的串口):

INIT_BOARD_EXPORT是初始化宏,感兴趣可以搜一下。
这时编译一下,成功。
但是当我们下载进开发板,连接串口准备使用的时候,却发现:

没有msh命令行出现,这是因为cubemx生成的main函数中有while(1);main线程比finish线程优先级高,main一直运行导致finish线程一直没有运行。我们这里把while(1)删除,加入return 0,再烧录。

大功告成!
2.rt_hw_console_getchar的大坑

可以看见我们想用ps打印线程却发现只返回了p,这是因为getchar是通过轮询实现的,同时又增加了rtthread_delay(10)挂起自身便于比finish线程低的线程运行,我们可以将delay删除看看效果。


可以看见可以了,不过建议还是将轮询改为中断方式比较好。
STM32CubeMX移植RT-Thread遇到的问题及解决
本文介绍了如何使用STM32CubeMX生成RT-Thread工程,并分享了在移植过程中遇到的两个主要问题及解决方法。第一个问题是finish未添加导致的编译错误,通过修改rtconfig.h或使用配置向导解决。第二个问题涉及rt_kprintf和rt_hw_console_getchar的重映射,需要修改board.c和usart.c,确保UartHandle与配置一致。最后,由于main线程的while(1)阻碍了finish线程执行,通过删除while(1)并加入return 0修复。对于rt_hw_console_getchar的轮询问题,建议改为中断方式以提高效率。
3109

被折叠的 条评论
为什么被折叠?



