RT-Thread+ENV+MDK+STM32CubeMX适配

news2024/11/20 3:32:20

前言

(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语法

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

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

相关文章

T - SQL使用事务 及 在Winform使用事务

事务适用场景 1 事务使用在存储过程中&#xff0c;直接在数据库中进行编写 2 事务使用在Winfrom项目中 SQl&#xff1a;使用事务转账操作的实例 一般都会找一个变量记录错误的个数&#xff0c;error记录上一句sql的错误和错误编号 declare errornum int 0 -- 定义…

el-table 指定表格合并行与单元格,以及表头合并单元格

1&#xff1a;页面html <template><div class"container"><div class"flex-end"><el-button type"primary" click"allEndBtn">批量办结</el-button><el-button type"primary" click"…

【第十天】C++函数对象/仿函数、谓词、适配器及常见algorithm算法

一、函数对象 重载了函数调用运算符()的类 实例化的对象叫函数对象&#xff0c;也叫仿函数。 如果函数对象 有一个参数 叫&#xff1a;一元函数对象/仿函数如果函数对象 有二个参数 叫&#xff1a;二元函数对象/仿函数如果函数对象 有三个及以上参数 叫&#xff1a;多元函数对…

Java设计模式 | 七大原则之合成复用原则

基本介绍 合成复用原则&#xff08;Composite Reuse Principle&#xff09;尽量使用合成/聚合的方式&#xff0c;而不是使用继承 设计原则核心思想总结 找出应用中可能需要变化之处&#xff0c;把他们独立出来&#xff0c;不要和那些不需要变化的代码混在一起针对接口编程&…

Ubuntu系统下DPDK环境搭建

目录 一.虚拟机配置1.添加一个网卡(桥接模式)2.修改网卡类型3.修改网卡名称4.重启虚拟机5.查看网卡信息6.dpdk配置内存巨型页 三 DPDK源代码下载和编译1.下载源代码2.解压源代码3.安装编译环境4.编译5.设置dpdk的环境变量6.禁止多队列网卡7.加载igb_uio模块8.网卡绑定9.验证测试…

Docker 入门笔记

课程地址 容器技术概述 docker能做什么&#xff1a;将应用程序代码和依赖打包为一个镜像&#xff0c;作为交付介质&#xff0c;在各种环境中部署 相比于虚拟机&#xff0c;docker 只虚拟出一个隔离的程序运行环境&#xff0c;其需要则资源大大减少 容器内的程序就好像直接运…

安装 docker 可视化工具 portainer

portainer 官方网站 https://www.portainer.io/ 一、portainer 介绍 Portainer是一款开源的容器管理平台&#xff0c;它提供了一个直观易用的Web界面&#xff0c;帮助用户管理Docker容器集群、镜像、卷等资源。Portainer 支持多种 Docker 环境&#xff0c;包括本地Docker、Sw…

EXTJS实现自定义表格

宽度自适应 width: 100%, 高度自适应 height: 100% 同时设置表格所处页面高度100% html,body,#griddemo{height: 100%;} 自定义显示的文本内容 Ext.onReady(function () {Ext.QuickTips.init()function sexText(val) {if (val 0) {return <span style"color:green…

20240229作业

1.编写链表&#xff0c;链表里面随便搞点数据&#xff0c;使用 fprintf 将链表中所有的数据&#xff0c;保存到文件中&#xff0c;使用 fscanf 读取文件中的数据&#xff0c;写入链表中 #include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 struct List…

Linux系统安装使用nginx

1.编译安装Nginx服务 (1)关闭防火墙&#xff0c;将安装nginx所需要软件包传到/opt目录下 systemctl stop firewalld systemctl disable firewalld setenforce 0 将压缩包传入到/opt目录下 cd /opt wget http://nginx.org/download/nginx-1.18.0.tar.gz (2). 安装依赖…

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

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

解决内嵌帆软报表出现重定向问题

最近收到反馈&#xff0c;某些程序的前端通过iframe标签内嵌finebi帆软报表时&#xff0c;出现一系列问题。 问题1: 如下图所示&#xff0c;单点登录(单点登录地址schema是https)后service地址的schema协议是http, 浏览器内核的安全策略不允许http访问https。 解决方案&#xf…

HTTP笔记(五)

个人学习笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一&#xff1a;HTTP报文首部 &#xff08;1&#xff09;HTTP请求报文 &#xff08;2&#xff09…

基于深度学习的水稻病害检测系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 可以任意更换主干结构&#xff0c;支持几百种网络主干。 数据集&#xff1a;     网上下载的数据集&#x…

用户增长6步法

什么是用户增长&#xff1f; 通过痛点、产品、渠道、内容、技术、数据等要素实现用户的获取、激活、留存、变现、推荐&#xff0c;用户增长包含了产品出现前的用户增长、产品生产周期内的用户增长、产品生命周期外的用户增长三个阶段。 用户增长6步法&#xff1a;方法、模型和…

【重温设计模式】桥接模式及其Java示例

【重温设计模式】桥接模式及其Java示例 桥接模式的介绍 今天我们要探讨的&#xff0c;正是一种名为“桥接模式”的设计模式。桥接模式&#xff0c;英文名Bridge Pattern&#xff0c;是一种结构型设计模式&#xff0c;它的主要目的是将抽象部分与实现部分分离&#xff0c;使得两…

Unity(第十一部)场景

游戏有多个场景组成&#xff08;新手村&#xff0c;某某副本&#xff0c;主城&#xff09; 场景是有多个物体组成&#xff08;怪物&#xff0c;地形&#xff0c;玩家等&#xff09; 物体是有多个组件组成&#xff08;刚体组件&#xff0c;自定义脚本&#xff09; 创建场景 编辑…

77. 组合(力扣LeetCode)

文章目录 77. 组合题目描述回溯算法组合问题的剪枝操作 77. 组合 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [ [2,4], [3,4],…

Android T 远程动画显示流程其三——桌面侧动画启动到系统侧结束流程

前言 接着前文分析Android T 远程动画显示流程其二 我们通过IRemoteAnimationRunner跨进程通信从系统进程来到了桌面进程&#xff0c;这里是真正动画播放的逻辑。 之后又通过IRemoteAnimationFinishedCallback跨进程通信回到系统进程&#xff0c;处理动画结束时的逻辑。 进入…

07-Linux部署Nginx

Linux部署Nginx 简介 NGINX是一款高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。它的特点包括占用内存少、并发能力强&#xff0c;因此在处理高负载和高并发的场景时表现优秀。NGINX由俄罗斯的程序设计师Igor Sysoev开发&#xff0c;最初是为俄…