手把手学STM32(一)

news/2024/11/17 23:46:52/

手把手学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里修改逻辑,这样会使你的程序层次分明逻辑清晰,编程效率提高。


http://www.ppmy.cn/news/879123.html

相关文章

STM入门基础初识

序言 本文章是关于stm的一些简单的介绍,全部都是个人学习的一些经验总结,分享给想要自学stm32的朋友们用于入门。其中部分内容借鉴于《stm32中文参考手册》和《cortex-m3权威指南》,对于大神请不喜勿喷。 哈哈。 stm32是什么呢? 简单来说,stm32是一种32位的单片机,是采用…

STM学习之:基础概念

所有芯片的引脚顺序都是逆时针排序的; 开发板中把芯片的引脚引出来,连接到各种传感器上,然后在STM32上编程,(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作; stm32有…

STM32简介(系统结构、引脚定义……)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、STM32简介二、STM32F103xxx1.STM32F1系列片上资源/外设2.命名规则3.系统结构4.引脚定义5.启动配置6.STM32最小系统电路 总结 前言 提示:这里可…

Kong 服务和路由的添加

管理服务 这里参考DB-less-Mode,因为使用的是yaml配置文件的形式,所以所有的相关配置只需要往初始化的kong.yml文件中添加就可以了,就像nginx的配置文件 DB-less-Mode 创建服务 vim /etc/kong/kong.yml services: - name: my-service #…

【从零开始学习CSS | 第三篇】选择器优先级

目录 前言: 常见选择器的优先级(从高到低) 选择器的权重: 总结: 前言: 在前几篇文章中我们介绍了大量的选择器,那么大量的选择器在使用的时候,一定是有一个优先级顺序的&#xff…

vue npm install报错如何处理

npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: eslint-plugin-vue5.2.3 npm ERR! Found: eslint6.8.0 npm ERR! node_modules/eslint npm ERR! peer eslint"> 1.6.0" from vue/cli-plugin-eslint4.4.4 这个错误…

明日之后 服务器维护,明日之后更新维护公告

斗玩网(d.chinaz.com)报道:明日之后12月27日更新了什么?更新了那些内容?更新几点结束?一起来看看明日之后12月27日更新维护公告吧。亲爱的幸存者:欢迎收听 101 广播电台,我是播音员西奥德罗。为了更好的明天,接下来我将为您播报…

5月18日德玛西亚服务器怎么维护,LOL5.18测试服更新内容是什么_LOL5月18日测试服更新内容介绍_游戏堡...

LOL5.18测试服更新内容是什么?测试服每天都有不同的内容在进行测试,下面是游戏堡小编为大家整理的LOL5月18日测试服更新内容介绍,一起来看看吧! 原画更新 都铎王朝 图奇 英雄改动 疾风剑豪 亚索 斩钢闪(Q) 旋风烈斩的持续时间由10…