HAL库如何成功移植到RT-Thread Nano操作系统?

2026-05-25 04:501阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计617个文字,预计阅读时间需要3分钟。

HAL库如何成功移植到RT-Thread Nano操作系统?

一、移植RT-Thread Nano至STM32并使用CubeMx软件配置:

教程链接:[RT-Thread Nano移植与CubeMx使用](https://www.cnblogs.com/jzcn/p/16313803.)

二、STM32开发版介绍:

我使用的STM32开发版是STM32F103C8T6。

三、使用CubeMx生成HAL库:

通过CubeMx生成HAL库,以下是最简单的LED程序示例。

一、移植RT-Thread Nano准备
  1. keil软件
  2. CubeMx软件
    STM32 CubeMx使用教程:www.cnblogs.com/jzcn/p/16313803.html
  3. STM32开发版
    我使用的是STM32F103C8T6。
二、使用CubeMx生成HAL库

这里就以最简单的LED程序作为移植工程,由于使用CubeMx生成HAL库生成比较简单,这里就不详细说明了,有不明白的地方可以参考STM32 CubeMx使用教程

三、添加RT-Thread Nano


如果找不到RT-Thread Nano,可以在Pack Installer中安装

四、屏蔽SystemClock_Config函数的调用

系统时钟已经在RT-Thread中完成了初始化,所以在mian中就不用再次进行系统时钟的初始化,否则RT-Thread无法正常运行,只需在mian函数中屏蔽SystemClock_Config函数的调用即可,如下图所示:

HAL库如何成功移植到RT-Thread Nano操作系统?

五、 错误处理

编译后会有如下错误提示

解决办法

  • 将stm32f1xx_it.c文件中的void HardFault_Handler(void)、void PendSV_Handler(void)、void SysTick_Handler(void)三个方法屏蔽即可

  • 或者在CubeMX生成代码时将,取消这三个函数模板的生成,如下图所示:

    处理完成后编译即可

六、编写测试程序需

由于需要使用RT-Thread中的函数,所以在需要在使用到的地方加入头文件rtthread.h。

#include <rtthread.h> 静态线程测试

  1. 创建线程函数

    static struct rt_thread led_thread; static char led_thread_stack[256]; static void led_thread_entry(void *parameter) { while (1) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET); rt_thread_mdelay(500); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET); rt_thread_mdelay(500); } }

    如下图所示:

  2. 在面函数中调用线程

    rt_err_t rst; rst = rt_thread_init(&led_thread, "ledshine", led_thread_entry, RT_NULL, &led_thread_stack[0], sizeof(led_thread_stack), RT_THREAD_PRIORITY_MAX - 2, 20); if (rst == RT_EOK) { rt_thread_startup(&led_thread); }

    如下图所示:

    注意: 需要在mian函数中加入rt_thread_startup(&led_thread)延时,防止主线程被杀死

动态线程测试
  1. 需要在rtconfig.h文件中取消RT_USING_HEAP宏的屏蔽

  2. 将静态调用的程序修改一下,不用修改线程函数,如下图所示

编译后下载测试即可,如果led能正常闪烁说明移植RT-Thread成功

如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! computer_wx@foxmail.com

本文共计617个文字,预计阅读时间需要3分钟。

HAL库如何成功移植到RT-Thread Nano操作系统?

一、移植RT-Thread Nano至STM32并使用CubeMx软件配置:

教程链接:[RT-Thread Nano移植与CubeMx使用](https://www.cnblogs.com/jzcn/p/16313803.)

二、STM32开发版介绍:

我使用的STM32开发版是STM32F103C8T6。

三、使用CubeMx生成HAL库:

通过CubeMx生成HAL库,以下是最简单的LED程序示例。

一、移植RT-Thread Nano准备
  1. keil软件
  2. CubeMx软件
    STM32 CubeMx使用教程:www.cnblogs.com/jzcn/p/16313803.html
  3. STM32开发版
    我使用的是STM32F103C8T6。
二、使用CubeMx生成HAL库

这里就以最简单的LED程序作为移植工程,由于使用CubeMx生成HAL库生成比较简单,这里就不详细说明了,有不明白的地方可以参考STM32 CubeMx使用教程

三、添加RT-Thread Nano


如果找不到RT-Thread Nano,可以在Pack Installer中安装

四、屏蔽SystemClock_Config函数的调用

系统时钟已经在RT-Thread中完成了初始化,所以在mian中就不用再次进行系统时钟的初始化,否则RT-Thread无法正常运行,只需在mian函数中屏蔽SystemClock_Config函数的调用即可,如下图所示:

HAL库如何成功移植到RT-Thread Nano操作系统?

五、 错误处理

编译后会有如下错误提示

解决办法

  • 将stm32f1xx_it.c文件中的void HardFault_Handler(void)、void PendSV_Handler(void)、void SysTick_Handler(void)三个方法屏蔽即可

  • 或者在CubeMX生成代码时将,取消这三个函数模板的生成,如下图所示:

    处理完成后编译即可

六、编写测试程序需

由于需要使用RT-Thread中的函数,所以在需要在使用到的地方加入头文件rtthread.h。

#include <rtthread.h> 静态线程测试

  1. 创建线程函数

    static struct rt_thread led_thread; static char led_thread_stack[256]; static void led_thread_entry(void *parameter) { while (1) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET); rt_thread_mdelay(500); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET); rt_thread_mdelay(500); } }

    如下图所示:

  2. 在面函数中调用线程

    rt_err_t rst; rst = rt_thread_init(&led_thread, "ledshine", led_thread_entry, RT_NULL, &led_thread_stack[0], sizeof(led_thread_stack), RT_THREAD_PRIORITY_MAX - 2, 20); if (rst == RT_EOK) { rt_thread_startup(&led_thread); }

    如下图所示:

    注意: 需要在mian函数中加入rt_thread_startup(&led_thread)延时,防止主线程被杀死

动态线程测试
  1. 需要在rtconfig.h文件中取消RT_USING_HEAP宏的屏蔽

  2. 将静态调用的程序修改一下,不用修改线程函数,如下图所示

编译后下载测试即可,如果led能正常闪烁说明移植RT-Thread成功

如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! computer_wx@foxmail.com