(萌新入门)如何从起步阶段开始学习STM32 —— 1如何迁移一个开发版的工程

embedded/2025/2/23 2:12:24/

目录

前言

如何迁移一个开发版的工程到其他单片机上?

Step 1:明确你单片机的型号

STEP2 确定环境后移植代码

提示:正常而言,我们是使用的套模板建立工程

提示:笔者自身不使用这些模板,我是使用CubeMX快速配置工程进行开发

STEP3 代码移植结束后,需要做的配置部分

概念

库寄存器

HAL库


前言

本篇博客是我的粉丝:2301_77816627请求的,介绍如何入门STM32中他最关心的一个问题。他现在手头拥有的是STM32的正点原子开发资料,但是却有STM32F103C8T6,前者一般的资料是F103ZET6,跟后者虽然同属于STM32F1系列的单片机,但是又在配置上略有不同。这个问题非常好的代表了一个嵌入式领域当中,非常常见的一个任务和话题。

一句话:如果想要自己跟着建立自己的模板,这个是笔者最推介的,看正点原子是如何一步一步建立自己的工程的,然后追问自己为什么这样做,去查MDK5的文档和资料而不是我一喂的灌输

如果总是失败,考虑使用其他人的模板,学习其他人如何建立自己的模板

或者,干脆使用CubeMX开始HAL库的开发。

如何迁移一个开发版的工程到其他单片机上?

Step 1:明确你单片机的型号

这位粉丝私信我说,他使用的单片机是STM32F103C8T6,一个很好的习惯,那就是阐述明白自己的开发环境是如何的,而不是丢过来几句话就仙然离去!这位粉丝就非常好的说明了自己使用的单片机和他的开发环境,他所遇到的困难

我们打开MDK,转到Project菜单栏上的新建uVision工程上(注意,如果你没有做汉化,请自行搜索uVision的汉化,笔者是看得懂无所谓),在设置好自己的工程根目录后,就会请求你使用的单片机的型号。

概念科普:工程的根目录是一个项目存放的地址,拿到这个根目录就等价于拿到了整个项目,我的意思是——所有的你写的代码都会放到整个目录之下。

显然,我们的单片机是STM32F103C8系列,而不是STM32F103ZE系列,如果你后续购买了其他板子,也请知晓自己的板子的型号,关于板子型号的含义,可以自行百度之。

下面就是迁移使用到的板子的文件。注意,板子迁移的工作非常的累。笔者建议是寻找一个模板工程跟着做。一般而言,我们的项目工程迁移分为三个部分

STEP2 确定环境后移植代码

  1. 启动代码的移植。一般而言,启动代码说的是我们的单片机初始化的一些工作,比如说,给你的程序清理地方,建立必要的硬件服务等等,一般的,我们是使用啥样类型的板子就会使用如何的启动文件。

  1. 底层代码移植——这一部分代码直接跟我们的单片机的硬件所对接。这部分的移植需要我们有ST家的库,这些库就是一个例子。

  2. 中间层的代码移植——比如说一些常见的系统上层的全局库移植和一些常见功能的移植,他需要依赖于我们的底层代码,所以需要正确的保证底层代码的正确的移植。

  3. 顶层驱动的业务代码的移植——比如说点灯代码,OLED菜单显示代码等等

  4. 最后就是我们的主函数类的文件

总结:你可以自己按照模板,还有附送的开发版的资料自己一步步走,但是非常累
提示:正常而言,我们是使用的套模板建立工程

笔者这里建议的是江科大的代码作为一个模板:资料下载 (jiangxiekeji.com),自己对照正点原子的书逐步认真的学习每一个文件的作用,可以不着急搞明白,但是最好知晓里面的文件到底在干嘛,建立一个大的框架体系,从点灯开始在慢慢的填充。

如果坚持使用正点原子的风格,也有博主已经做出了移植:STM32F103C8T6工程模板 ——固件库版、正点原子代码风格、包含SYSTEM文件夹-CSDN博客

提示:笔者自身不使用这些模板,我是使用CubeMX快速配置工程进行开发

如果你不想费大功夫建立工程,不如考虑使用CubeMX快速生成代码后,在进行功能的书写,笔者认为这个需要你结束过STM32的学习后,在谈论使用这个办法进行代码移植。

STEP3 代码移植结束后,需要做的配置部分

使用了别人的模板后,实际上这里不需要做任何更改。但是这些是你需要注意的地方:

  1. 有没有需要更改的宏的部分?比如说,C8T6的chip的RAM大小跟ZET6不一致,就需要采用不一样的宏。可以看看这些模板中定义的宏的含义,做笔记进行学习

  2. 有没有需要修正的include path?复习一下,include path声明了我们包含头文件的路径的位置

  3. 有没有修改debugger的种类?其他人可能会使用jlink调试,手头上,一般你只会有stlink,所以记得更改debug选项和勾选reset and run 选项(具体参考上一篇博客)

  4. (可能)需不需要更改编译器的一些参数?当然,对于萌新,别人用啥就是啥就OK,等到后面的学习再重新回来认识就好了


http://www.ppmy.cn/embedded/164503.html

相关文章

一键提取人声 、伴奏 免费人声、伴奏 音频分离软件分享——UVR5下载安装教程

引言 在处理视频及音频编辑的过程中,人声与伴奏的分离是一项广受欢迎且实用的功能, 但是市面上大多人声分离软件都需付费。今天要分享的是Ultimate Vocal Remover 5 (UVR5),一款跨平台(Windows、Mac、Linux)的专业音频…

Java数据结构第十二期:走进二叉树的奇妙世界(一)

专栏:数据结构(Java版) 个人主页:手握风云 目录 一、树型结构 1.1. 树的定义 1.2. 树的基本概念 1.3. 树的表示形式 二、二叉树 2.1. 概念 2.2. 两种特殊的二叉树 2.3. 二叉树的性质 2.4. 二叉树的存储 三、二叉树的基本操作 一、树型结构 1.…

一周学会Flask3 Python Web开发-request请求对象与url传参

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili request请求对象封装了从客户端发来的请求报文信息,我们可以从中获取所有数据。 request对象包含的常用属性&…

DeepSeek-学习与实践

1.应用场景 主要用于学习与使用DeepSeek解决问题, 提高效率. 2.学习/操作 1.文档阅读 文档 DeepSeek -- 官网, 直接使用 --- 代理网站 --- 极客智坊 https://poe.com/DeepSeek-R1 https://time.geekbang.com/search?qdeepseek -- 搜索deepseek的资料 资料 20250209DeepSeekC…

LVS-nat模式

(a). 当用户请求到达 Director Server ,此时请求的数据报文会先到内核空间的 PREROUTING 链。 此时报 文的源 IP 为 CIP ,目标 IP 为 VIP (b). PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链 (c). IPVS 比对数据包请…

海外企业真的需要跨境专线网络吗?

你好!在当今快速发展的全球市场中,外贸企业面临着日益严格的网络需求与挑战。随着国际贸易的扩大,企业需要一种高效的网络解决方案来提升国际沟通的效率和数据传输的安全性。本文将深入探讨外贸企业在选择跨境网络专线方面的必要性&#xff0…

EasyExcel 自定义头信息导出

需求:需要在导出 excel时,合并单元格自定义头信息(动态生成),然后才是字段列表头即导出数据。 EasyExcel - 使用table去写入:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E4%BD%BF%E7%94%A8table%E…

如何成为一名合格的单片机工程师----引言介绍篇(1)

前言 在当今数字化时代,单片机(Microcontroller Unit,MCU)已成为电子设备的核心组件之一,广泛应用于智能家居、工业自动化、汽车电子、物联网等领域。作为一名单片机工程师,你将有机会参与到各种创新项目中…