RT-Thread+ENV+MDK+STM32CubeMX适配

前言

(1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动/单片机/RTOS的实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效
(2)本文将会介绍介绍如何使用RT-ThreadENVKeil MDKSTM32CubeMX进行适配,并创建一个自己的BSP工程。
(3)使用的芯片为STM32F103ZE

前期准备

(1)关于ENV的安装,可以看看RT-Thread的官方视频教程。然后根据下面的链接直接下载安装。

STM32CubeMX安装

(1)参考这篇博客:STM32CubeMX环境安装(保姆级)

git安装

(1)https://gitforwindows.org

ENV安装

(1)https://www.rt-thread.org/download.html#download-rt-thread-env-tool

RT-Thread的源码拉取

(1)我是使用RT-Thread的截至目前最新v5.0.2版本进行的工程创建,而且我不需要讲整个RT-Thread的历史项目都进行拉取,因此我这里设置深度为1。

git.exe clone --progress --branch v5.0.2 -v --depth 1 https://github.com/RT-Thread/rt-thread.git

(2)如果是使用小乌龟的朋友,配置如下

在这里插入图片描述

移植

复制通用模板

(1)本人是使用的STM32F103ZE的芯片,因此进入目录rt-thread\bsp\stm32\libraries\templates,复制stm32f10x文件夹到rt-thread\bsp\stm32路径中,并修改名字为mytmp

在这里插入图片描述

将CubeMX移植为STM32F103ZET6

(1)RT-Thread中的CubeMX默认是使用的STM32F103RBTx。而我现在是使用的STM32F103ZET6,因此需要对CubeMX进行移植操作。进入rt-thread\bsp\stm32\mytmp\board\CubeMX_Config路径,双击打开CubeMX_Config.ioc

在这里插入图片描述

(2)因为RT-Thread的仓库中的CubeMX已经是很老的版本了,而我的版本比较新,因此会出现提示是否版本迁移。点击Migrate迁移到最新版本。

在这里插入图片描述

(3)迁移完成之后,我们关闭当前这个CubeMX界面,并保存。

在这里插入图片描述

(4)再打开CubeMX,创建一个空的STM32F103ZET6工程
<1>

在这里插入图片描述

<2>

在这里插入图片描述

(5)将原来的工程导入STM32F103RBTx的工程导入到这里。
<1>

在这里插入图片描述

<2>

在这里插入图片描述

(6)修改路径,将工程名字设置为CubeMX_Config。把rt-thread\bsp\stm32\mytmp\board\CubeMX_Config路径修改为rt-thread\bsp\stm32\mytmp\board\

在这里插入图片描述

(7)关闭保存

在这里插入图片描述

Keil MDK适配

修改堆内存

(1)进入rt-thread\bsp\stm32\mytmp\board路径,找到board.h文件。需要修改如下两个部分

在这里插入图片描述

(2)第一个这个FlashRAM的大小,如果不清除的朋友,可以打开CubeMX,创建一个空的工程,里面能够查到芯片的FlashRAM大小。例如这里查到我STM32F103ZET6Flash512KbRAM64Kb

在这里插入图片描述

(3)根据上面的查阅信息,我们进行如下修改

在这里插入图片描述

修改构建脚本

(1)进入rt-thread\bsp\stm32\mytmp\board目录,打开SConscript文件,这里修改为startup_stm32f103xe.s。如果不知道自己的芯片对应的启动文件是哪个,个人建议先使用CubeMX生成一个空的模板工程,然后打开这个空的模板工程就可以知道自己的启动文件是哪个了。

在这里插入图片描述

(2)修改目标芯片型号

在这里插入图片描述

修改Kconfig

(1)进入rt-thread\bsp\stm32\mytmp\board目录,打开Kconfig文件SOC_STM32F103RB修改为SOC_STM32F103ZE

在这里插入图片描述

修改工程模板

(1)进入rt-thread\bsp\stm32\mytmp目录,打开template.uvprojx
这里切记,template.uvprojx是MDK5的工程模板,template.uvproj是MDK4的工程模板。后面多一个x是高版本,别搞错了。
<1>修改芯片型号

在这里插入图片描述

<2>修改程序下载方式

在这里插入图片描述

生成工程

生成keil MDK工程

(1)打开ConEmu Here,输入如下命令即可。

在这里插入图片描述

# 这里打开控制界面之后,直接退出即可
menuconfig
scons --target=mdk5

修改链接脚本

(1)RT-Thread的官方文档里面,让我们使用一个自己写的链接脚本。但是为了降低各位的使用难度,我个人认为可以按照如下方法,使用Keil自动生成的链接脚本,这样更容易理解。

在这里插入图片描述

(2)按照上图编译完成之后,Keil会自动生成一个链接脚本。我们按照如下方式选择
<1>先选中Keil生成的链接脚本

在这里插入图片描述

<2>再勾选如下配置

在这里插入图片描述

测试

(1)编译烧录工程,上机测试如下,波特率115200

在这里插入图片描述

扩展知识

Kconfig作用

(1)如果玩过Linux驱动并且学习过如何将驱动设备编译进入Linux内核,对Kconfig应该还是会比较熟悉。Kconfig的配置就会在menuconfig上显示。
(2)当我们使用menuconfig打开了某一项配置,实际上就算对rtconfig.h进行配置。例如我打开这个工程默认是存在一个PIN驱动设备的,那么我在rtconfig.h中就能够看到#define RT_USING_PIN#define BSP_USING_GPIO这句话。

Keil与RT-Thread Studio的编译规则区别

Keil MDK5

(1)在Keil中,一个工作区只有一个工程显示,而且只要是右边的Project中所有的.c文件都会参与编译。

在这里插入图片描述

RT-Thread Studio

(1)而在RT-Thread Studio中一个工作区能够同时存放多个工程,右边的Active - Debug表示正在参与编译的工程。在资源管理器中所显示的.c文件都是会参与编译的。

在这里插入图片描述

(2)但是如果是C/C++项目框里面,被划除的部分就不会参与编译。

在这里插入图片描述

参考

(1)百问网:9-3 散列文件使用与分析
(2)C站:keil工程目标选项配置:Options for Target
(3)C站:RT-Thread studio创建一个STM32F103ZE的RT-Thread标准版模板工程
(4)简书:RT-Thread学习之Kconfig语法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

45、WEB攻防——通用漏洞PHP反序列化POP链构造魔术方法原生类

文章目录 序列化&#xff1a;将java、php等代码中的对象转化为数组或字符串等格式。代表函数serialize()&#xff0c;将一个对象转换成一个字符&#xff1b;反序列化&#xff1a;将数组或字符串等格式还成对象。代表函数unserialize()&#xff0c;将字符串还原成一个对象。 P…

基于ESP32的MicroPython项目量产烧写指南

背景 前段时间用MicroPython开发了一个项目&#xff0c;硬件是ESP32-C3&#xff0c;目前准备量产&#xff0c;我需要提供固件以供加工厂批量烧录&#xff0c;需要把我有程序的板子里的程序读出来&#xff0c;然后下到别的板子上&#xff0c;以下做这件事情的过程记录。 1.固件…

mysql5.7源码安装

1.下载MySQL源码包 mysql-5.7.30.tar.gz 2.下载Boost库 tar xf /usr/local/src/boost_1_59_0.tar.bz2 3.解压源码包到指定的目录&#xff1a;安装 mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX/usr/local/mysql \ -DSYSCONFDIR/etc \ -DWITH_MYISAM_STORA…

ElasticSearch架构介绍及原理解析

ElasticSearch架构介绍及原理解析文章目录 一、Elasticsearch是什么&#xff1f;1.简介2.历史与发展3.有关概念1.cluster2.shards3.replicas4.recovery5.river6.gateway7.discovery.zen8.Transport 4.安装 二、ElasticSearch架构介绍及原理解析1.基本架构1.1 进程节点1.2 负载均…

人工智能_大模型010_Centos7.9中CPU安装ChatGLM3-6B大模型_安装使用_010---人工智能工作笔记0145

从一个空的虚拟机开始安装: https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files 可以看到这里有很多的数据文件,那么这里 这里点击模型文件就可以下载,这个就是chatglm3-6B的文件,需要点击每个文件,然后点击右边的下载,把文件都下载下来 右侧有下载按钮.点击下载可…

Programming Abstractions in C阅读笔记:p306-p307

《Programming Abstractions in C》学习第75天&#xff0c;p306-p307总结&#xff0c;总计2页。 一、技术总结 1.Quicksort algorithm(快速排序) 由法国计算机科学家C.A.R(Charles Antony Richard) Hoare&#xff08;东尼.霍尔&#xff09;在1959年开发(develop), 1961年发表…

【数据结构和算法初阶(C语言)】链表-单链表(手撕详讲单链表增删查改)

目录 1.前言&#xff1a;顺序表回顾&#xff1a; 1.1顺序表的优缺点 2.主角----链表 2.1链表的概念 2.2定义一个单链表的具体实现代码方式 3.单链表对数据的管理----增删查改 3.1单链表的创建 3.2单链表的遍历实现 3.2.1利用遍历实现一个打印我们链表内容的函数的函数…

LeetCode——栈和队列(Java)

栈和队列 简介[简单] 232. 用栈实现队列[简单] 225. 用队列实现栈[简单] 20. 有效的括号[简单] 1047. 删除字符串中的所有相邻重复项[中等] 150. 逆波兰表达式求值[困难] 239. 滑动窗口最大值[中等] 347. 前 K 个高频元素 简介 记录一下自己刷题的历程以及代码。写题过程中参考…

【Linux】进程优先级以及Linux内核进程调度队列的简要介绍

进程优先级 基本概念查看系统进程修改进程的优先级Linux2.6内核进程调度队列的简要介绍和进程优先级有关的概念进程切换 基本概念 为什么会存在进程优先级&#xff1f;   进程优先级用于确定在资源竞争的情况下&#xff0c;哪个进程将被操作系统调度为下一个运行的进程。进程…

Linux设备模型(七) - Netlink

一&#xff0c;什么是netlink通信机制 Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。Netlink 是一种特殊的 socket&#xff0c;它是 Linux 所特有的。 Netlink 是一种在内核与用户应用间进行双向数…

PCB:多CAN口的信号转接板

背景 在测试多路CAN口时&#xff0c;需要频繁更换接口引脚&#xff0c;从而接入CAN收发器。为了提升测试效率&#xff0c;可以设计一个简易多路CAN收发器转接板。PCB板子一端是40脚母口&#xff0c;另一端是10路CAN螺钉式接线端子&#xff0c;自带电池减少接线。 分配空闲时间…

网络编程:基于TCP和UDP的服务器、客户端

1.基于TCP通信服务器 程序代码&#xff1a; 1 #include<myhead.h>2 #define SER_IP "192.168.126.121"//服务器IP3 #define SER_PORT 8888//服务器端口号4 int main(int argc, const char *argv[])5 {6 //1.创建用于监听的套接字7 int sfd-1;8 sf…

Sora:开启视频生成新时代的强大人工智能模型

目录 一、Sora模型的诞生与意义 二、Sora模型的技术特点与创新 三、Sora模型的应用前景与影响 四、面临的挑战与未来发展 1、技术挑战 2、道德和伦理问题 3、计算资源需求 4、未来发展方向 随着信息技术的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已成为…

Unity(第九部)物体类

拿到物体的某些数据 using System.Collections; using System.Collections.Generic; using UnityEngine;public class game : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//拿到当前脚本所挂载的游戏物体//GameObject go this.gameObject;…

Python算法100例-2.10 马克思手稿中的数学题

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.运行结果 1&#xff0e;问题描述 马克思手稿中有一道趣味数学问题&#xff1a;有30个人&#xff0c;其中有男人、女人和小孩&#xff0c;他们在同一家…

C语言基础18 循环

们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多次执行一个语句或语句组&#xff0…

小红书的几种赚钱方式解读

小红书的七种变现方式&#xff1a; 1.通过小红书蒲公英平台接广告&#xff0c;粉丝数量大于1000的用户可以开通。单条笔记的广告费用从几百元到几十万不等。 2.开设小红书专栏&#xff0c;粉丝数量大于1万的用户可以开通。 3.进行私域变现&#xff0c;将小红书的咨询引导到微信…

Java 小项目开发日记 03(文章分类接口的开发)

Java 小项目开发日记 03&#xff08;文章分类接口的开发&#xff09; 项目目录 配置文件&#xff08;pom.xml&#xff09; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocat…

内核打印应用程序出错信息,DEBUG_USER

前言 在 Linux 系统中&#xff0c;运行一个应用程序&#xff0c;突然提示段错误&#xff0c;并停止运行 # ./crash.out Segmentation fault如果这个时候操作系统能多提示点错误信息&#xff0c;那将会缩短我们 debug 的时间。 core dump 就是一个办法&#xff0c;可以查看我…

javaWeb学习04

AOP核心概念: 连接点: JoinPoint, 可以被AOP控制的方法 通知: Advice 指哪些重复的逻辑&#xff0c;也就是共性功能(最终体现为一个方法) 切入点: PointCut, 匹配连接点的条件&#xff0c;通知仅会在切入点方法执行时被应用 目标对象: Target, 通知所应用的对象 通知类…