一、移植RT-Thread Nano准备

  1. keil软件
  2. CubeMx软件

    STM32 CubeMx使用教程:https://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函数的调用即可,如下图所示:

五、 错误处理

编译后会有如下错误提示

解决办法

  • 将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成功

HAL库移植RT-Thread Nano的更多相关文章

  1. STM32 之 HAL库(固件库) _

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  2. STM32 之 HAL库(固件库)

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  3. 【HAL库每天一例】freemodbus移植

    例程下载:资料包括程序.相关说明资料以及软件使用截图 百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1 360云盘:https://yunpan.cn/OcP ...

  4. STM32 HAL库详解 及 手动移植

    源: STM32 HAL库详解 及 手动移植

  5. STM32标准外设库、 HAL库、LL库

    工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是常用的库,后面的LL库是ST最近才添加,目前支持的 ...

  6. STM32F407 使用HAL库延时微妙实现方法(附CubeMX配置过程)

    STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置) 作者 : 李剀出处 : https://www.cnblogs.com/kevin-nancy/p/10696681.h ...

  7. 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章

    从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章  如何使用本书 1.1  本书的参考资料 本书参考资料为:<STM32 ...

  8. 【安富莱】V6,V5开发板用户手册,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔(2019-11-04)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.本次工程延续以往的代码风格,从底层BSP驱动包到应用代码,变量命名,文件 ...

  9. 【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至63章(2019-07-21)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.由于是基于HAL库的文档,所以不限制H7系列,其它F1,F2,F3,F4 ...

  10. 新建基于STM32F103ZET6的工程-HAL库版本

    1.STM32F103ZET6简介 STM32F103ZET6的FLASH容量为512K,64K的SRAM.按照STM32芯片的容量产品划分,STM32F103ZET6属于大容量的芯片. 2.下载HA ...

随机推荐

  1. 解决maven编译错误:程序包com.sun.xml.internal.ws.spi不存在

    转自https://blog.csdn.net/mn960mn/article/details/51253038 解决方法如下: 添加maven-compiler-plugin插件,并且配置compi ...

  2. 嵌入式C语言设计学习

    由C语言到嵌入式C语言设计 1.C语言的特性 C语言,最为基本的高级编程语言,已经有许多其他的延伸.而在嵌入式设计中,主要的拓展内容就是相关的硬件设备的驱动.这部分的设计为其提供了更加灵活的应用环境. ...

  3. how to install local jar to maven repository

    如何把maven不能引入的依赖安装到本地Repository: 1.比如fastdfs-client-java. <dependency> <groupId>org.csour ...

  4. https://codeforces.com/gym/496137

    AB略. C:想复杂了. 只要判断最大的那个能不能继续吃即可. D:我的做法是建完全图然后跑生成树. 实际上可以这么考虑:和a[1]不同的直接连,相同的就和上一轮和a[1]不同的店去连可以O(n). ...

  5. HTTPS&SPDY&HTTP2&QUIC&HTTP3

    HTTPS 密钥交换,加密和解密 SPDY&HTTP2 QUIC&HTTP3

  6. 关于 ThreadLocal 你需要知道的几点

    一.ThreadLocal是什么? 一个类对象类型,提供属线程本地变量,也就是同一个变量对不同线程保存了不同的值,但是和线程自身定义的自属变量不同. 通常以私有静态类型定义,用以保存特定线程特定状态属 ...

  7. #线段树,离散#nssl 1476 联

    分析 由于下标过大,考虑离散,不仅仅是区间左右端点 假设只有一个区间从1到\(x\),那么修改后答案应该是\(x+1\) 所以说还要记录右端点+1的位置,你以为这就能A了吗 为了避免标记被覆盖,无论是 ...

  8. #CDQ分治,单调栈,双指针#BZOJ 4237 稻草人 AT1225 かかし

    洛谷传送门 BZOJ 4237 稻草人 题意 在一个平面直角坐标系上给出\(n\)个点, 问有多少个点对\((i,j)\)满足\(x_i<x_j,y_i<y_j\), 而且对于\(n\)个 ...

  9. 在Keycloak中实现多租户并在ASP.NET Core下进行验证

    Keycloak是一个功能强大的开源身份和访问管理系统,提供了一整套解决方案,包括用户认证.单点登录(SSO).身份联合.用户注册.用户管理.角色映射.多因素认证和访问控制等.它广泛应用于企业和云服务 ...

  10. java中DelayQueue的使用

    目录 简介 DelayQueue DelayQueue的应用 总结 java中DelayQueue的使用 简介 今天给大家介绍一下DelayQueue,DelayQueue是BlockingQueue ...