手把手学STM32(一)

2023-05-16

手把手学STM32(一)构建工程

这篇文章详细的介绍编写第一个固件工程(F103ZET6版本的)。文档里的操作部分我使用了黄色背景色标出,如觉麻烦,可直接参考黄色部分。
资料下载链接:https://pan.baidu.com/s/1nmjR5SxauIyVWej46-YE1A
提取码:stu8
*

一.编程的简单逻辑

  • 在开始之前,需要有一个清晰的思路。首先问三个问题
    1.你的需求是什么?也就是完成什么功能
    2.怎么做?(也就是你设计的思想是啥,怎么设计完成)
    3.具体的实现(代码怎么写)

二. 工程结构

明确了思路之后。我们首先要构建一个工程。那么工程怎么构建的呢?一个工程由什么组成。正点原子给的模板是这样的。实际上这些文件夹没有起对程序影响作用,但是都放到一起会导致层次比较混乱。最好养成一个良好的编程习惯,分层级。把不同的程序分成几个不同的文件夹存放。来我们找一个工程看一下工程的架构。首先我们打开一个例程 战舰V3\战舰V3 资料盘(A盘)\4,程序源码\2,标准例程-库函数版本\2,标准例程-库函数版本\实验1 跑马灯实验
工程构成

1)CORE

路径在\战舰V3\战舰V3 资料盘(A盘)\8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport它里面存放的代码是一些关于芯片的核心驱动。这个代码我们一般自己不要改动。构建工程的时候照搬就可以。所有的例程里这些东西都是一样的。

在这里插入图片描述
打开看一下有三个文件一个.h结尾一个.c结尾一个.s结尾的文件,前两个个文件是context-3系列内核的驱动。.c存放代码 .h存放函数的声明和变量的宏定义 .s文件是启动文件,如果你用的是F1系列的就选这个,但是这个启动文件有三种
路径在战舰V3\战舰V3 资料盘(A盘)\8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
startup_stm32f10x_ld.s: 适用于小容量 产品
startup_stm32f10x_md.s : 适用于中等容量产品
startup_stm32f10x_hd.s: 适用于大容量产品.
这里的容量是指 FLASH 的大小.判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH
我们ALIENTEK STM32战舰板,精英板以及mini板采用的STM32F103ZET6和stm32F103RCT6
芯片都属于大容量产品,所以我们的启动文件选择 startup_stm32f10x_hd.s,
它的作用是启动文件主要是进行堆栈之类的初始化,中断向量表(中断处理的函数名已经起好了,不能自己另外起中断处理名的,但中断处理函数体为空,自己写函数体内容)以及中断函数定义。
上面的是拓展知识,初学者就算弄不懂,暂时也没太大关系。总之就把他们三个拷贝过来就可以。

2)FWLIB

路径为\战舰V3\战舰V3 资料盘(A盘)\8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver。其他板子同理目录结构相似。即固件库的意思。它主要用于存放STM32的一些寄存器的定义及一些底层驱动函数。打开之后如下图,有两个文件夹。
在这里插入图片描述
一个叫inc一个叫src inc里面包含的是我们上面说过的.h文件也就是头文件.。src里面包含的是.c文件。
在这里插入图片描述
inc
在这里插入图片描述
src
这两个里面的东西我们先不管(后面给大家讲里面的东西),直接复制过来,我们可以看到他们的不一样的部分其实是一些外设的底层的驱动。第二个文件夹直接复制过来。

3)OBJ

这个文件夹先空着,把这个文件夹当做一个存放编译过程的中间文件的东西。

4)README

这个文件夹下放的文档是用来给自己写代码的注释和用法的文本文档。先在里面放一个空的文本文档。备用。

5)STSTEM
在这里插入图片描述
打开里面有三个文件夹,第一个delay用于存放延时函数
第二个sys用于存放系统函数
第三个usart 用于存放串口1的函数(里面有串口打印函数以及串口1中断函数)
把这个SYSTEM文件夹整体复制过来.

三.实战演练

到这里准备工作参不多了。接下来在桌面新建一个文件夹给它命名为第一篇_我的工程
打开文件夹“第一篇_我的工程”把刚才准备的四个文件夹放进去,再在里面新建一个文件夹命名叫USER
打开keiluV5软件,左上角project
在这里插入图片描述
然后点第一个new uVersion project 然后选择保存路径为刚刚建好的USER目录。这里我,给你的工程命名。我命名为FRIST_PRO工程名字最好是英文。
在这里插入图片描述
点击保存,然后会弹出这个界面。我们可以看到左上角的CPU。这个就是选择我们的芯片
在这里插入图片描述
我们1.点击STMicroeletronics前面的加号,
2.再点击STM32F1 Series(选芯片) 前的加号又会出现一排,
3. STM32F103 前的加号,这时候会出现一列绿色的东西,这个绿色的东西就是芯片,对于战舰版和精英板选择STM32F103ZE,对于mini板来说选择STM32F103RC。点击OK
在这里插入图片描述
点确定后出现
在这里插入图片描述
点击OK,它自己关闭了。然后就可以看到左上角的project栏的工程建好了。
在这里插入图片描述
然后我们返回桌面查看USER文件夹,这时我们会发现文件夹下多了几个文件
在这里插入图片描述
接下来我们需要复制一些文件,打开路径J:\战舰V3\战舰V3 资料盘(A盘)\8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下复制下面三个文件到USER.
在这里插入图片描述
还要复制一些别的文件在路径战舰V3\战舰V3 资料盘(A盘)\8,STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下复制下面四个文件
在这里插入图片描述
Copy完的USER目录下应该新增了7个文件,最后将USER的main.c替换成跑马灯实验里的main.c文件。路径在战舰V3\战舰V3 资料盘(A盘)\4,程序源码\2,标准例程-库函数版本\2,标准例程-库函数版本\实验1 跑马灯实验\USER\main.c到这里我们就把所有的文件复制完了。
在这里插入图片描述
接下来我们需要到MDK里把这些文件加到我们工程里来。现在只是在目录里并没有在工程中。打开keil5选中左上角的target1 然后点击三个方块 manage Projiect
在这里插入图片描述
把target1的名字改成FIRST_PRO,然后点击new(insert)接着新建六个文件夹然后给他们命名如下。
在这里插入图片描述
建完目录之后点击Add files ,找到与名字相应的目录把.C文件添加进去。
在这里插入图片描述
这里要注意的一点是添加core里的文件的时候,首先选择文件类型为ALL files,然后选中.c后缀与.s后缀的两个文件,关闭。点击FWLIB文件夹的之后会出现两个目录选择src目录打开ctrl+A全选,然后点击ADD.(实际上使用哪个选哪个就可以,这里我们就当做介绍使用全选)
在这里插入图片描述
在这里插入图片描述然后就是最后一步将头文件也加到工程中点击魔术棒
在这里插入图片描述
然后选C/C++然后点…
在这里插入图片描述
出现下图,点击1点击2,然后找到我们之前建的文件夹。加加加、
在这里插入图片描述

在这里插入图片描述
加完以后是这样的,然后点击OK
在这里插入图片描述
点击编译会发现有一个ERROR。提示如下。
在这里插入图片描述
这个错误是mai.c里的错误,不能打开led.h。#include “led.h”却没有找到,这时我们应该添加led.h文件进去。
打开路径 战舰V3\战舰V3 资料盘(A盘)\4,程序源码\2,标准例程-库函数版本\2,标准例程-库函数版本\实验1 跑马灯实验\HARDWARE 把里面的LED文件夹复制,然后打开工程新建一个HARDWARE文件夹粘贴过去,
按照之前的方法,点击三个方块,点击groups里的new然后输入HARDWARE,选中HARDWARE点击Add files找到路径HARDWARE下的LED下的led.c文件选中点Add。然后关掉点击OK,
再把.h头文件所在的文件夹包含进去上面的重复C/C++添加的操作,添加好点击OK。
再次点击编译,点击build这时候会显示0错误0警告。
在这里插入图片描述
到这一步,整个工程就新建完了。如果要修改它实现的功能,应该到对应的文件里修改程序,或在main里修改逻辑,这样会使你的程序层次分明逻辑清晰,编程效率提高。

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

手把手学STM32(一) 的相关文章

随机推荐

  • 光流定位原理是什么??【转】

    转自 xff1a https www zhihu com question 35980316 Jessie Lee HIT 控制 无人机 光流是测速算法 xff0c 并不是直接定位的 简单理解 xff0c 光流就是通过检测图像中光点和暗点的
  • 算法杂货铺——分类算法之决策树(Decision tree)

    3 1 摘要 在前面两篇文章中 xff0c 分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法 这两种算法都以贝叶斯定理为基础 xff0c 可以对分类及决策问题进行概率推断 在这一篇文章中 xff0c 将讨论另一种被广泛使用的分类算法
  • 01-嵌入式入门-如何看原理图

    最近由于找到的工作是偏于嵌入式方向 xff0c 因此又重新开始学习已经丢弃两年的知识 新手学习知识感觉有一个通病 xff1a 喜欢收集各种各样的视频 资料 xff0c 网盘里收藏一大堆 xff0c 但是却从没有打开看过 xff0c 到头来还
  • MAVLink v1.0详解——结构

    本文针对 MAVLink v1 0版本 xff0c 协议版本 xff1a 3 MAVLink是为微型飞行器MAV xff08 Micro Air Vehicle xff09 设计的 xff08 LGPL xff09 开源的通讯协议 是无人飞
  • ECMAScript6——数组操作方法_总结篇

    ES6 gt 数组的方法 加粗为ES6新增的方法 1 pop 删除数组的最后一个元素 xff0c 把数组的长度减1 xff0c 并且返回它被删除元素的值 xff0c 如果数组变为空 xff0c 则该方法不改变数组 xff0c 返回undef
  • 网络工程师十个常见面试问题

    1 1 简单说一下OSI七层 Osi模型是一个工业的标准 它为现在的互联网提供了很大的贡献 是一个逻辑上的规范和标准 xff0c 很多厂商都要遵循它 他定义了七层每一层都有不同的功能和规范 物理层 物理层定义了设备接口上的一些电子电气化的标
  • 像素、分辨率、DPI

    Q xff1a 我们平时买数码相机时 xff0c 说的200万像素 xff0c 300万像素 xff0c 这个像素是什么意思 xff1f A xff1a 像素 xff08 Pixel xff09 是由Picture和Element这两个单词
  • Apache 目录索引样式 mod_autoindex

    apache 的目录索引样式用的mod autoindex模块 一般默认为开启状态 我们直接配置httpd conf文件 讲如下内容加到HTTD CONF Options Indexes FollowSymLinks IndexOption
  • ubuntu网卡名称变化的解决方法

    在chinacache工作时 xff0c 遇到了东方网力的客户 xff0c 需要安装使用ubuntu系统 xff0c 每个服务器有4个网口 xff0c 在做bond时 xff0c 发现部分网卡漂移 xff0c 为了解决这个 xff0c 搜索
  • C# 给DataGridView加多选框

    span class token comment 多选框 span DataGridViewCheckBoxColumn dgCheck span class token operator 61 span new DataGridViewC
  • Java架构进阶之路——阿里大牛强力推荐书单(附赠电子版)

    1 深入理解Java虚拟机 xff1a JVM高级特性与最佳实践 本书适合所有Java程序员 系统调优师和系统架构师阅读 共分为五大部分 xff0c 围绕内存管理 执行子系统 程序编译与优化 高效并发等核心主题对JVM进行了全面而深入的分析
  • ModemManager

    ModemManager是D Bus激活的守护进程 xff0c 用来控制移动宽带 xff08 2G 3G 4G xff09 设备和连接 xff0c 提供统一的高层API接口 说白了就是可以用来管理上网卡 ModemManager可以管理内置
  • odroidxu4linux,2019年值得期待的5个树莓派替代品

    说到卡片电脑 xff0c 树莓派是当之无愧的热门 这款售价35美元的微型计算机已经在全球范围内吸引了众多爱好者 xff0c 因为它能够以商业设备的一小部分价格执行基于PC的功能 当然 xff0c 它或许不是最强大或最便宜的微型计算机 xff
  • ros 发布信息频率_工具使用-ROS中使用publisher、subscriber发布订阅topic

    Publisher Node 不同于cpp文件一般存在package下的src文件夹 xff0c python文件一般存储在package下的scripts文件夹下 1 2 3 4roscd beginner tutorials scrip
  • 轨迹系列1——一种基于路网图层的GPS轨迹优化方案

    文章版权由作者李晓晖和博客园共有 xff0c 若转载请于明显处标明出处 xff1a http www cnblogs com naaoveGIS 1 背景 GPS数据正常情况下有20M左右的偏移 xff0c 在遇到高楼和桥梁等情况下偏移会更
  • 材料研究方法

    编程是非常有意思的 xff0c 可是作为材料人 xff0c 学好材料才是比较重要的事情 xff0c 下面记录一些知识点 光学透镜的成像原理 光的折射 光在均匀介质中沿直线传播 在不同介质中光的传播速度不同 当光从一种介质传播到另一种介质中去
  • [微信小程序系列] 动画案例之圆点沿着圆圈运动

    作者 xff1a 滴滴公共前端团队 Tawnia 滴滴作为第一批的小程序开发者 xff0c 我们也大量地用到了动画 xff0c 积累了一些经验 xff0c 由于市面上的小程序动画案例很少 xff0c 我们也分享一部分我们做过的案例 xff1
  • Vue Iview Tree插件的无限层

    Iview lt template gt lt Tree data 61 34 baseData 34 show checkbox multiple gt lt Tree gt lt template gt lt script gt exp
  • React Component vs React Element

    React Component vs React Element 有这样的一个问题 xff1a 方法定义 function add x y return x 43 y 方法调用 add 1 2 组件定义 class Icon extends
  • 手把手学STM32(一)

    手把手学STM32 一 构建工程 这篇文章详细的介绍编写第一个固件工程 xff08 F103ZET6版本的 xff09 文档里的操作部分我使用了黄色背景色标出 xff0c 如觉麻烦 xff0c 可直接参考黄色部分 资料下载链接 xff1a