NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植

news2024/11/29 2:52:53

NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植

1、准备工作

a、用stm32cubemx新建一个工程。

时钟配置

st-link提供8M的mco输出,所以配置hse 8m,sysclk最高100M,设置如下:
在这里插入图片描述
在这里插入图片描述

配置LED

连接pa5,设置pa5为输出模式。
在这里插入图片描述

配置串口

st-link可以做虚拟串口用,这样可以省下一个usb转串口的模块。st-link连接f411的PA2 PA3,也就是uasrt2。
在这里插入图片描述

配置SWD

在这里插入图片描述

生成Makefile工程

选择hal库,因为rt-thread的deriver调用的是hal库。
在这里插入图片描述

修改main函数

在这里插入图片描述

修改Makefile

平时用的是iMac以及MacBook,所以烧录我用的是pyocd,将烧录命令添加到Makefile里,执行make的时候,就会自动烧录软件。
在这里插入图片描述
在这里插入图片描述
看下,灯是不是闪烁起来了?

b、用rt-thread studio新建一个nucleo-f411re的工程,将生成的代码拷贝出来待用。

生成的代码目录结构如下:
在这里插入图片描述

RT-Thread的移植

1、将rt studio 工程里的libraries目录、rt-thread目录copy到stm32cubemx生成的工程里。

在这里插入图片描述

2、修改Makefile,添加rt-thread的编译

在这里插入图片描述
在这里插入图片描述

3、第一次编译

报错信息,rt-thread/include/rtthread.h:24:10: fatal error: rtconfig.h: No such file or directory
在这里插入图片描述
这里缺少rtthread的配置文件,我们从rt studio生成的目录里copy rtconfig.h到
Core/Inc目录下。
在这里插入图片描述

第二次编译

因为这个rtconfig.h的配置比较全,所以也包含了finsh组件,而我们前面并没有将finsh编译进去。
在这里插入图片描述
修改Makefile如下
在这里插入图片描述
在这里插入图片描述

第三次编译

这是老问题了,不管移植freeRTOS还是RT-Thread都会遇到这个问题。
在这里插入图片描述
修改如下:
在这里插入图片描述
在这里插入图片描述

第四次编译

编译通过,烧录进去后,灯在闪烁,那么RT-Thread跑起来了吗?
很遗憾,并没有,现在还是裸机程序再跑,继续修改。

修改systick回调函数

在这里插入图片描述

修改启动文件startup_stm32f411xe.s

之前是跳到main处执行,而RT-Thread是到entry处执行。
在这里插入图片描述
所以修改如下:
在这里插入图片描述

第五次编译

在这里插入图片描述
因为entry往下执行,会调用到rtthread_startup()函数,这个函数里的rt_hw_board_init需要自己定义。

在这里插入图片描述
在Core/Src目录下新建board.c,里面内容如下:
在这里插入图片描述
屏蔽掉main函数的初始化外设的函数
在这里插入图片描述
并修改延时函数。
在这里插入图片描述
make后,是不是发现灯开始闪烁了?

创建任务

在这里插入图片描述
在这里插入图片描述
执行完make,是不是发现灯还在闪烁,那么现在rt-thread跑起来了吗?
答案是的,到这rtthread内核已经移植完成。

代码

代码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习-进化算法

进化算法 遗传算法(Genetic Algorithm,GA)crossovermutation 进化策略(Evolutionary Strategies,ES)基因编程(Genetic Programming)Multi-objective Evolutionary Algorithms 遗传算…

certbot 申请免费SSL证书、自动续期

简介 Certbot是一个免费、开源的软件,是Let’s Encrypt的客户端,Let’s Encrypt是证书颁发机构,它们之间使用ACME协议通信,Certbot是Lets Encrypt众多客户端的其中之一,Let’s Encrypt官网推荐CertBot,它能…

AIGC:关于人工智能的那些事

文章目录 前言人工智能发展史起步阶段:20世纪50年代至70年代知识工程阶段:20世纪80年代至90年代数据驱动阶段:2000年至今 人工智能包括哪些技术学习人工智能需要掌握的知识如何开发一个人工智能系统如何开发一个人脸识别系统人工智能未来发展…

mysql密码登录失败、服务启动失败和1045-Access denied for user ‘root‘@‘localhost‘

一、问题: 1.打开 navicate,双击localhost_3306,出现报错2002 - Can’t connect to server on ‘localhost’(10061) 2.查看mysql是否启动 控制面板——管理工具——服务 找到mysql服务,发现无法启动。 3.winR运行cmd&#xf…

windows install pandoc

文章目录 下载安装测试使用 下载 https://github.com/jgm/pandoc/releases 安装 pandoc-3.1.3-windows-x86_64.msi 直接双击一路默认即可。 但安装后并没有得到该命令,我们需要配置环境变量,找到安装的命令位置 C:\Users\XH\AppData\Local\Pandoc\p…

驱动多文件编译和驱动命令行传参

目录 1. 驱动的多文件编译 1.1. 准备两个文件 1.2. 修改Makefile文件 1.3. 执行Make命令生成.ko文件 2. 驱动模块传递参数 2.1. 传递一个参数 2.1.1. 函数原型分析 2.1.2. 撰写.c文件 2.1.3. 撰写makefile 2.1.4. 编译makefile并验证 2.2. 传递多个参数并使用modeinf…

线程的创建和使用(二)

1、线程的类和方法 Thread类是JVM用来管理线程的一个类,换句话说,每个线程都有唯一一个的Thread对象与之关联。 1.1、Thread的常见方法 方法说明Thread()创建线程对象Thread(Runnable target)使用Runnable对象创建线程对象Thread(String name)创建线程…

【SpringCloud-5】gateway网关

网关是干啥用的就不用再说了。 sringcloud中的网关,第一代是zuul,但是性能比较差(1.x是阻塞式的,2.x是基于Netty的),然后有了第二代GateWay,基于Reactor模型 异步非阻塞。 springcloud网关就是一…

经理的工作岗位职责描述10篇

经理的工作岗位职责描述(篇1) 1、销售工具的开发和制作 2、负责各类媒体、渠道的软文撰写,产品信息推广; 3、筹办重点客户,潜在客户的讲座论坛会议; 4、市场推广活动:展会seminar oadshow等活动 5、产品上市沟通&#…

IIC协议通信解析,内附完整代码。

一:硬件接口 1.1:功能引脚 1.2:IIC总线通信注意事项 二:通信协议 (1)空闲状态: (2)起始位: (3)有效数据位 (4&#x…

最近跳槽,压力真大...

前几天,跟个老朋友吃饭,他最近想跳槽去大厂,觉得压力很大,问我能不能分享些所谓的经验套路。 每次有这类请求,都觉得有些有趣,不知道你发现没有大家身边真的有很多人不知道怎么面试,也不知道怎…

【玩转Docker小鲸鱼叭】MacOS系统配置Docker镜像加速器

当我们通过 docker pull拉取镜像时,如果不指定仓库,默认从 Docker Hub (docker.io)获取镜像,而国内用户访问Docker Hub仓库时,通常速度很忙,经常超时导致拉取镜像失败,所以通常要通过…

上海亚商投顾:沪指震荡调整 CPO概念股持续大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 沪指今日震荡调整,保险等权重板块走低,上证50跌超1.5%,创业板指较为抗跌。CPO、…

【新固态格式化】

新固态格式化 初始化硬盘 从管理进入磁盘管理 Windows 7及其以后的系统建议使用GPT MBR 是 Master Boot Record 的缩写,是一种传统而常用的磁盘布局。GPT 是 Globally Unique Identifier Partition Table 的缩写,是一种与 UEFI 相关的新磁盘布局。其…

Day23 实战篇 ——Jmeter压力测试实战

Day23 实战篇 ——Jmeter压力测试实战 文章目录 Day23 实战篇 ——Jmeter压力测试实战一、分布式压测原理二、分布式环境配置Slaves机器配置Master机器配置参数化文件配置三、分布式压测执行Slave机器执行Master机器执行四、常见问题处理问题一问题二问题三问题四项目中使用Jme…

redis缓存设计-Redis(八)

上篇文章介绍了redis缓存设计,热点key,bigkey注意事项。 原创 redis缓存设计-Redis(七)https://blog.csdn.net/ke1ying/article/details/131268967 命令使用 hgetall,lrange,smembers,zrange…

【初识Linux】——01Linux系统

目录索引 Linux介绍:Linux历史:Linux系统应用:*服务器系统:**嵌入式系统:**桌面应用系统:**版本:* Linux系统的安装:虚拟机:安装VMware:安装centOS操作系统&a…

【AI实战】开源可商用的中英文大语言模型baichuan-7B,从零开始搭建

【AI实战】开源可商用的中英文大语言模型baichuan-7B,从零开始搭建 baichuan-7B 简介baichuan-7B 中文评测baichuan-7B 搭建参考 baichuan-7B 简介 baichuan-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型。基于 Transformer 结构,在大约…

解决安卓12限制32个线程

Android 12及以上用户在使用Termux时,有时会显示[Process completed (signal 9) - press Enter],这是因为Android 12的PhantomProcesskiller限制了应用的子进程,最大允许应用有32个子进程。 这里以ColorOS 12.1为例(其他系统操作略…

状态机编程实例-嵌套switch-case法

嵌入式软件开发中,状态机编程是一个比较实用的代码实现方式,特别适用于事件驱动的系统。 本篇,以一个炸弹拆除的小游戏为例,介绍状态机编程的思路。 C/C语言实现状态机编程的方式有很多,本篇先来介绍最简单最容易理解…