STM32入门之文件结构

2023-05-16

本人在学习STM32过程中,主要使用的是B站洋桃电子的课程(之前使用过正点原子的视频,感觉不适合本人这种小白),因而其中许多代码借鉴(抄)了其课程,故在此说明。

文件树

可以看到,该文件分为六大部分,不同人对其起名可能有出入,或者文件结构有略微区别。但其关键的几个部分及开发方式是基本相同的。

STARTUP

其中STARTUP是STM32的启动代码,用汇编语言编写。
我们正常在操作一款单片机的时候,都是从main函数开始进行编程的,但是单片机上电是从main函数开始执行的吗?答案当然是否定的,在main函数之前单片机最先执行的是硬件设置SP、PC然后是“启动文件”,一般主要是项目文件里面的startup_xxxxx.s文件。其实这个就是我们常说的Bootloader。

其实不光STM32系列单片机是这样,我们接触的NXP的微控制器、TI的MSP430以及51单片机等等其实都是有上述的启动文件的。启动文件负责的就是从单片机复位开始到main函数之前这段时间所需要进行的工作。我们一般很少接触启动文件的主要原因是开发环境往往给开发者自动的提供了这个启动文件,不需要我们再去操心,直接从main函数开始进行设计就可以了。
这里我们嵌入一些汇编代码(我也看不懂)在做单片机开发的时候,这一块不用改动

CMSIS

这一块的.c文件有两个,分别是Arm Coxert-M3(单片机内核)和STM32F103系列的系统文件(官方提供文件,无需编写)

FWLB

即固件库
这部分是STM32的固件库文件,这个库就是“库函数版”的“库”,STM32有使用标准库版本开发的,有使用HAL库开发的,有使用LL库,也有使用寄存器版本的,当然,也有大佬使用自己写的库。
这部分可以根据自己项目需求添加或者删除,但是最基本的misc.c,gpio.c,rcc.c需要保留,如果项目中要用到SPI通信连接外设,则需添加spi对应的固件库。

以下是所有的固件库文件

例如在实际开发中,比如这个点灯,我只使用了两个:

USER

用户文件夹,用于编写工程中外设的源文件和头文件,以及main函数,这是单片机开发程序编写的主要文件。

这是点灯程序的文件目录,包括一个main文件,一个系统的it.c文件,还有led灯外设,一个按键外设。

当然还有人将所有外设统一放置在一个HARDWARE文件下。

在main.c文件中引用外设的头文件,即可调用相关函数进行编写。这里main函数主要是1通过扫描按键状态控制led灯反转。

DOC

即doc文档,负责对代码进行说明,不属于代码文件,主要是为了记录代码开发过程中的说明,便于阅读代码。

Basic

这一块主要放一些公用性极强的代码文件,比如sys.c,dalay.c(用于实现软件延时)

 在单片机中实现精准的延时是非常重要的,这里我们参考了大神的延时方法:

通过对滴答定时器的操作实现了精准的s,ms,微秒级延时。

以上就是本人对STM32文件目录的理解,如有差错,非常正常,欢迎批评指正。
了解32文件结构对于开发非常重要,行文至此,并非完结撒花,只是记录整理自己嵌入式开发的开始。希望我的经验总结对你有帮助,欢迎交流讨论。

【学习交流群769843038】

学习教程资料:

从零开始构建一个智能家居项目

STM32可以这样玩

分析STM32的的开发方式

物联网嵌入式工程师网络基础

(零基础电子产品设计)


网盘免费资料包,需要的话自行领取:

嵌入式物联网 22个STM32项目、大赛作品,【华清远见发放资料包】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32入门之文件结构 的相关文章

  • graph slam tutorial : 从推导到应用1

    前言 SLAM问题的处理方法主要分为滤波和图优化两类 滤波的方法中常见的是扩展卡尔曼滤波 粒子滤波 信息滤波等 xff0c 熟悉滤波思想的同学应该容易知道这类SLAM问题是递增的 实时的处理数据并矫正机器人位姿 比如基于粒子滤波的SLAM的
  • graph slam tutorial :从推导到应用2

    在上一部分中通过一个例子大致了解了graph based slam的优化过程 在本篇博客中将提升一个层次 xff0c 对图优化的求解过程进行推导 由于博文关注的在图构建好以后 xff0c 如何调整机器人位姿使误差最下 因此 xff0c 本文
  • graph slam tutorial : g2o 的使用

    g2o全称general graph optimization xff0c 是一个用来优化非线性误差函数的c 43 43 框架 如果阅读了前几篇graph slam tutorial的博客 xff0c 再去读 g2o xff1a a gen
  • Monocular slam 的理论基础(1)

    前言 LSD SLAM和ORB SLAM的出现 xff0c 使得单目slam最近成为了研究热点 单目SLAM一般处理流程包括track和map两部分 所谓的track是用来估计相机的位姿 而map部分就是计算pixel的深度 xff0c 如
  • Monocular slam 中的理论基础(2)

    三角法求深度 xff08 triangulation xff09 在知道了相机的轨迹以后 xff0c 使用三角法就能计算某个点的深度 xff0c 在Hartley的 Multiple view Geometry 一书中第10章 第12章都是
  • svo: semi-direct visual odometry 论文解析

    SVO 从名字来看 xff0c 是半直接视觉里程计 xff0c 所谓半直接是指通过对图像中的特征点图像块进行直接匹配来获取相机位姿 xff0c 而不像直接匹配法那样对整个图像使用直接匹配 整幅图像的直接匹配法常见于RGBD传感器 xff0c
  • 想精通单片机开发,这些必备基础知识不可不掌握

    总体谈一谈对单片机学习的看法 1 我从不说51是基础 xff0c 如果我这么说 xff0c 也请把这句话理解为微机原理是基础 2 对51单片机的操作本质上就是对寄存器的操作 xff0c 对其他单片机也是如此 库只是一个接口 xff0c 方便
  • 从零开始手写 VIO

    前言 最近和高博合作推出了一个关于 VIO 的课程 xff0c 借此博客推荐下 这个课程的图优化后端是我们自己写的 xff0c 仅依赖 Eigen 实现后系统的精度和 ceres 以及 g2o 不相上下 个人感觉这个课程还是能学到不少东西
  • 如何用示波器测量串口波特率

    例如波特率为9600理解为 xff1a 单位时间内传输9600个码元 xff08 位 xff09 1s内可以传输9600位数 假如要测量波特率为9600 xff0c 则每一比特位的时间为 xff1a 1 9600 61 104us 一般示波
  • PHPstorm2018汉化方法

    PhpStorm 2018汉化包下载地址 xff1a https pan baidu com s 1sAPfpPrN3IvZSyGU2kFWmQ 8 将安装目录lib下的resources en jar文件删除 xff0c 然后将压缩包中的
  • CMake学习(3)—— 使用add_subdirectory()添加外部项目文件夹

    一般情况下 xff0c 我们的项目各个子项目都在一个总的项目根目录下 xff0c 但有的时候 xff0c 我们需要使用外部的文件夹 xff0c 怎么办呢 xff1f 例如 xff0c 在目录cxx utility example内的CMak
  • docker高级篇

    docker高级篇 一 dockerfile解析 1 dockerfile是什么 dockerfile是用来构建docker镜像的文本文件 xff0c 是有一条条构建镜像所需的指令和参数构成的脚本 2 dockerfile常用保留字指令 F
  • 死锁

    死锁 xff1a 死锁是指两个或两个以上的进程进在执行过程中 xff0c 由于资源竞争或由于相互通信而造成的一种阻塞式现象 xff0c 如果没有外力影响 那么它们将永远的持续下去 xff0c 此事称系统产生死锁现象 xff0c 这种永远互相
  • pygame入门教程-基础篇

    1 画布surface 我们先启动一个窗口 span class token keyword import span pygame pygame span class token punctuation span init span cla
  • LeetCode刷题(废弃)

    重要提示 xff1a 该博客不再更新 xff01 最新文章请参考LeetCode系列 xff01 为了更好地巩固算法知识 xff0c 打下扎实的计算机基础 好吧 xff0c 实在编不下去了 其实是闲着没事儿做 xff0c 不如动动脑 xff
  • 基于STM32的GPS模块驱动(AIR530)

    一 概述 由于做项目要用到GPS定位 xff0c 于是在某宝购买了这款GPS模块 项目采用的MCU是STM32 废话少说 xff0c 进入正题 二 GPS模块简介 Air530 模块是一款高性能 高集成度的多模卫星定位导航模块 体积小 功耗
  • UCOSIII中的任务调度和任务切换

    1 基本概念 任务调度的思想是 xff0c 几乎每时每刻让优先级别最高的就绪任务处于运行状态 xff0c 它由任务调度器来完成这个工作 xff08 任务级调度器OSShed 和中断级调度器OSIntExit xff09 任务切换 xff0c
  • 嵌入式开发者都该了解的10大算法

    算法一 xff1a 快速排序法 快速排序是由东尼 霍尔所发展的一种排序算法 在平均状况下 xff0c 排序 n 个项目要 n log n 次比较 在最坏状况下则需要 n2 次比较 xff0c 但这种状况并不常见 事实上 xff0c 快速排序
  • 蓝桥杯备赛——第八届省赛(模拟升降控制器)

    第八届省赛题目的控制逻辑相比之前更加复杂 xff0c 需要花一定的时间来理清逻辑 xff08 利用状态机 xff09 虽然之前对状态机有所了解 xff0c 但这是我第一次使用状态机 注 xff1a 1 PWM输出 xff1a PA6 TIM
  • C++实现http客户端连接服务端及客户端json数据的解析

    上一篇链接 xff1a https blog csdn net hfuu1504011020 article details 88785448 上一篇中说到Unicode转utf8格式的过程 xff0c 其中谈及到http以及json数据的

随机推荐