STM32官方固件库下载并且新建自己的工程_stm32固件库下载-程序员宅基地

技术标签: stm32  学习  笔记  STM32学习笔记  

1 固件库下载和新建工程


这里记录一下怎么从ST官网下载固件包并新建一个属于自己的工程模板,这里以STM32F103系列为例

一、怎么下载官网固件库

1、打开ST官网:https://www.st.com/content/st_com/en.html,选择Tools & Software

在这里插入图片描述

2、点击Embedded Software,选择STM32 Embedded Software

在这里插入图片描述

3、选择STM32 Standard PeripheralLibraries

在这里插入图片描述

4、选择F1系列

在这里插入图片描述

5、下载固件包,这里版本我们选择3.5.0,下载固件包需要先注册一个ST的账号,这里我已经注册好了,直接下载在这里插入图片描述### 6、解压文件如下

在这里插入图片描述
在这里插入图片描述

二、固件库

1.固件库文件分类

在这里插入图片描述

  • Libraries:文件夹下是驱动库的源代码及启动文件,这个非常重要,我们要使用的固件库就在这个文件夹里面

  • Project:文件夹下是用驱动库写的例子和工程模板,其中那些为每个外设写好的例程对我们非常有用,我们在学习的时候就可以参考这里面的例程

  • stm32f10x_stdperiph_lib_um.chm:库帮助文档,这个很有用,不喜欢直接看源码的可以在合理查询每个外设的函数说明,非常详细,这是一个已经编译好的HTML文件,主要讲述如何使用驱动库来编写自己的应用程序

2.文件说明

在这里插入图片描述
图片来源于网络,上图中红色部分是我们新建工程需要用到的文件,下面我们简要说明一下其中的几个文件

2.1启动文件startup_stm32f10x.s

在固件库如图所示的路径下,找到启动文件startup_stm32f10x.s,我们需要选择对应芯片容量的启动文件

在这里插入图片描述

不同芯片对应的FLASH大小是不一样的,选择启动文件的时候,也需要按照相应芯片的FLASH选择对应的启动文件,以STM32F103RCT6芯片为例

在这里插入图片描述

FLASH大小为256KB,对照下表,属于中容量型芯片,所以等会新建工程的时候,我们需要添加startup_stm32f10x_hd.s文件

在这里插入图片描述

单片机上电后,进入startup_stm32f10x_hd.s启动文件,启动文件是用汇编写的,启动文件内定义了中断向量表,中断服务函数等。中断服务函数中有个复位中断。这就是整个程序的入口;当STM32上电复位或者按下复位键之后,程序就会进入复位中断函数执行;复位中断函数主要就做了两件事情。第一个是调用SystemInit函数,第二个是调用main函数

在这里插入图片描述

2.2 stm32f10x.h

这个头文件实现了片上外设的所以寄存器的映射,是一个非常重要的头文件,在内核中与之相对应的头文件是core_cm3.h。

2.3 system_stm32f10x.c

system_stm32f10x.c文件实现了STM32的时钟配置,操作的是片上的RCC这个外设。系统在上电之后,首先会执行由汇编编写的启动文件,启动文件中的复位函数中调用的SystemInit()函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化成72M。如果后面我们需要重新配置系统时钟,我们就可以参考这个函数重写。

Systemlnit()函数就是定义在这个文件里面,上面的brief说明了函数的功能
在这里插入图片描述

2.4 stm32f10x_conf.h

这个stm32f10x_conf.h的文件就是用来配置头文件的包含关系的,stm32f10x_conf.h里面indlude了所有的库函数头文件,同时我们在stm32f10x.h的最后包含了stm32f10x_conf.h,所以在使用这些库函数时,我们只需要包含stm32f10xh这一个头文件,就相当于包含了所有的库函数头文件。这样我们就可以任意地调用库函数了

在这里插入图片描述
在这里插入图片描述

2.5 每个文件之间的联系

每个文件之间的联系如下图,参考了江科大的PPT
在这里插入图片描述

三、 新建工程

下面是新建工程具体操作步骤

1、新建Templete文件夹,如下所示

在这里插入图片描述

2、复制相应文件

2.1STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport目录下的core_cm3.ccore_cm3.h两个文件复制到文件夹Templete\Libraries\CMSIS目录下

在这里插入图片描述

在这里插入图片描述

2.2 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路径下的4个文件复制到文件夹Templete\Libraries\CMSIS目录下,对于startup文件夹,只需要startup/arm路径下的文件,把该路径下的文件移动到startup文件夹下面,其余全部删掉

此时,Templete\Libraries\CMSIS文件夹包含文件如下

在这里插入图片描述
Templete\Libraries\CMSIS\startup文件夹包含文件如下
在这里插入图片描述

2.3 把固件库STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下的inc和src两个文件夹复制到Templete\Libraries\STM32F10x_StdPeriph_Driver

在这里插入图片描述
在这里插入图片描述
2.4 把固件库STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的4个文件复制到Templete\User
在这里插入图片描述
在这里插入图片描述
到此,我们需要的文件就已经添加好了,总的来说,添加了3次文件

3、在工程中包含文件

3.1 打开Keil,新建工程,工程保存在Project文件夹下面

在这里插入图片描述
3.2 选择芯片,这里我们选择STM32F103RCT6
在这里插入图片描述
3.3 新建如图的4个分组,然后添加文件

startup添加文件如下,三个文件都位于Templete\Libraries\CMSIS目录下

在这里插入图片描述
Driver文件夹里面添加所有外设的源文件,文件路径Templete\Libraries\STM32F10x_StdPeriph_Driver\src,源文件里面是ST写好的各个外设的驱动
在这里插入图片描述

User文件夹里面添加文件如下
在这里插入图片描述

3.4 点击魔术棒,包含文件头路径

在这里插入图片描述
包含头文件路径如图
在这里插入图片描述

3.5 把main.c文件里面的内容删除,填入如下内容

#include "stm32f10x.h"                 

int main(void)
{
    
	while(1)
	{
    
	
	}
}

3.6 对魔术棒所做的一些更改

3.6.1 因为 3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。定位到魔术棒 c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面(请注意,两个标识符中间是逗号不是句号),这里解释一下,如果你用的是中容量那么STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD,然后点击 OK。

  • STM32F10X_HD 宏:为了告诉 STM32 标准库,我们使用的芯片类型是大容量的,使 STM32标准库根据我们选定的芯片型号来配置。
  • USE_STDPERIPH_DRIVER 宏:为了让 stm32f10x.h 包含 stm32f10x_conf.h 这个头文件。

在这里插入图片描述

3.6.2 修改输出文件夹路径
打开魔术棒,把输出文件夹选择为我们创建的Output文件夹,顺便创建HEX文件勾选上,这样工程就能产生HEX文件
在这里插入图片描述
返回Project文件夹,可以看到,在新建了工程以后,里面多了如图的几个文件夹,其中,DebugConfig、Listings 和 Objects 文件夹是 MDK 自动生成的文件夹,Listings 和 Objects 用于存放编译过程产生的中间文件,DebugConfig 文件夹用于存储一些调试配置文件,我们把 Listings 和 Objects 这两个文件夹删除(DebugConfig 文件夹不可以删除),我们用Output文件夹来存放编译产生的中间文件

在这里插入图片描述
到这里,文件就新建好啦,点击编译,如图
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46564477/article/details/131452016

智能推荐

海康威视网络摄像头开发流程(五)------- 直播页面测试_ezuikit 测试的url-程序员宅基地

文章浏览阅读3.8k次。1、将下载好的萤石js插件,添加到SoringBoot项目中。位置可参考下图所示。(容易出错的地方,在将js插件在html页面引入时,发生路径错误的问题)所以如果对页面中引入js的路径不清楚,可参考下图所示存放路径。2、将ezuikit.js引入到demo-live.html中。(可直接将如下代码复制到你创建的html页面中)<!DOCTYPE html><html lan..._ezuikit 测试的url

如何确定组态王与多动能RTU的通信方式_组态王ua-程序员宅基地

文章浏览阅读322次。第二步,在弹出的对话框选择,设备驱动—>PLC—>莫迪康—>ModbusRTU—>COM,根据配置软件选择的协议选期期,这里以此为例,然后点击“下一步”。第四步,把使用虚拟串口打勾(GPRS设备),根据需要选择要生成虚拟口,这里以选择KVCOM1为例,然后点击“下一步”设备ID即Modbus地址(1-255) 使用DTU时,为下485接口上的设备地址。第六步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“第五步,Modbus的从机地址,与配置软件相同,这里以1为例,点击“下一步“_组态王ua

npm超详细安装(包括配置环境变量)!!!npm安装教程(node.js安装教程)_npm安装配置-程序员宅基地

文章浏览阅读9.4k次,点赞22次,收藏19次。安装npm相当于安装node.js,Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西_npm安装配置

火车头采集器AI伪原创【php源码】-程序员宅基地

文章浏览阅读748次,点赞21次,收藏26次。大家好,小编来为大家解答以下问题,python基础训练100题,python入门100例题,现在让我们一起来看看吧!宝子们还在新手村练级的时候,不单要吸入基础知识,夯实自己的理论基础,还要去实际操作练练手啊!由于文章篇幅限制,不可能将100道题全部呈现在此除了这些,下面还有我整理好的基础入门学习资料,视频和讲解文案都很齐全,用来入门绝对靠谱,需要的自提。保证100%免费这不,贴心的我爆肝给大家整理了这份今天给大家分享100道Python练习题。大家一定要给我三连啊~

Linux Ubuntu 安装 Sublime Text (无法使用 wget 命令,使用安装包下载)_ubuntu 安装sumlime text打不开-程序员宅基地

文章浏览阅读1k次。 为了在 Linux ( Ubuntu) 上安装sublime,一般大家都会选择常见的教程或是 sublime 官网教程,然而在国内这种方法可能失效。为此,需要用安装包安装。以下就是使用官网安装包安装的教程。打开 sublime 官网后,点击右上角 download, 或是直接访问点击打开链接,即可看到各个平台上的安装包。选择 Linux 64 位版并下载。下载后,打开终端,进入安装..._ubuntu 安装sumlime text打不开

CrossOver for Mac 2024无需安装 Windows 即可以在 Mac 上运行游戏 Mac运行exe程序和游戏 CrossOver虚拟机 crossover运行免安装游戏包-程序员宅基地

文章浏览阅读563次,点赞13次,收藏6次。CrossOver24是一款类虚拟机软件,专为macOS和Linux用户设计。它的核心技术是Wine,这是一种在Linux和macOS等非Windows操作系统上运行Windows应用程序的开源软件。通过CrossOver24,用户可以在不购买Windows授权或使用传统虚拟机的情况下,直接在Mac或Linux系统上运行Windows软件和游戏。该软件还提供了丰富的功能,如自动配置、无缝集成和实时传输等,以实现高效的跨平台操作体验。

随便推点

一个用聊天的方式让ChatGPT写的线程安全的环形List_为什么gpt一写list就卡-程序员宅基地

文章浏览阅读1.7k次。一个用聊天的方式让ChatGPT帮我写的线程安全的环形List_为什么gpt一写list就卡

Tomcat自带的设置编码Filter-程序员宅基地

文章浏览阅读336次。我们在前面的文章里曾写过Web应用中乱码产生的原因和处理方式,旧文回顾:深度揭秘乱码问题背后的原因及解决方式其中我们提到可以通过Filter的方式来设置请求和响应的encoding,来解..._filterconfig selectencoding

javascript中encodeURI和decodeURI方法使用介绍_js encodeur decodeurl-程序员宅基地

文章浏览阅读651次。转自:http://www.jb51.net/article/36480.htmencodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来_js encodeur decodeurl

Android开发——打包apk遇到The destination folder does not exist or is not writeable-程序员宅基地

文章浏览阅读1.9w次,点赞6次,收藏3次。前言在日常的Android开发当中,我们肯定要打包apk。但是今天我打包的时候遇到一个很奇怪的问题Android The destination folder does not exist or is not writeable,大意是目标文件夹不存在或不可写。出现问题的原因以及解决办法上面有说报错的中文大意是:目标文件夹不存在或不可写。其实问题就在我们的打包界面当中图中标红的Desti..._the destination folder does not exist or is not writeable

Eclipse配置高大上环境-程序员宅基地

文章浏览阅读94次。一、配置代码编辑区的样式 <1>打开Eclipse,Help —> Install NewSoftware,界面如下: <2>点击add...,按下图所示操作: name:随意填写,Location:http://eclipse-color-th..._ecplise高大上设置

Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle.tar_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_6-程序员宅基地

文章浏览阅读2.8k次。一,下载mysql:http://dev.mysql.com/downloads/mysql/; 打开页面之后,在Select Platform:下选择linux Generic,如果没有出现Linux的选项,请换一个浏览器试试。我用的谷歌版本不可以,换一个别的浏览器就行了,如果还是不行,需要换一个翻墙的浏览器。 二,下载完后解压缩并放到安装文件夹下: 1、MySQL-client-5.6.2_linux mysql 安装 mysql-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle