【STM32】使用标准库创建一个工程

创建工程

本系列文章中使用的硬件和软件版本如下:

CPU型号:STM32F407ZGT6

Keil版本:V5.38.0.0

ARM编译器版本:V5.06

标准库版本:V1.8.0

1.下载标准库

官网链接:STSW-STM32065 - STM32F4 DSP和标准外设库 - 意法半导体STMicroelectronics

选择V1.8.0版本的下载,据说最新的V1.9.0版本有bug。

1.2.库目录文件简介

ST标准库

在使用库开发时,我们需要把libraries目录下的库函数文件添加到工程中,并查阅库帮助文档来了解ST提供的库函数,这个文档说明了每一个库函数的使用方法。

1.2.1.Libraries\CMSIS文件夹

STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\文件夹下内容见图 CMSIS文件夹内容 。

CMSIS文件夹内容

其中Device与Include中的文件是我们使用得最多的,先讲解这两个文件夹中的内容。

在Include文件夹中包含了 的是位于CMSIS标准的核内设备函数层的Cortex-M核通用的头文件, 它们的作用是为那些采用Cortex-M核设计SOC的芯片商设计的芯片外设提供一个进入内核的接口, 定义了一些内核相关的寄存器(类似我们前面写的stm32f4xx.h文件,但定义的是内核部分的寄存器)。 这些文件在其它公司的Cortex-M系列芯片也是相同的。

在Device文件夹下的是具体芯片直接相关的文件,包含启动文件、芯片外设寄存器定义、系统时钟初始化功能的一些文件,这是由ST公司提供的。

1.2.2.Libraries\STM32F4xx_StdPeriph_Driver文件夹

外设驱动

1.2.3.STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates

在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下的stm32f4xx_it.c、stm32f4xx_it.h、stm32f4xx_conf.h这三个文件。

stm32f4xx_conf.h:这个文件被包含进stm32f4xx.h文件。ST标准库支持所有STM32F4型号的芯片, 但有的型号芯片外设功能比较多,所以使用这个配置文件根据芯片型号增减ST库的外设文件。

stm32f4xx_it.c:这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常(特殊中断)的接口,其它普通中断服务函数由我们自己添加。

2.开始新建工程

先给工程新建几个文件夹

名称作用
Doc用来存放程序说明的文件,由作者添加
Libraries存放的库文件,可以直接将下载的库文件拷贝过来。
Output存放编译输出文件
Listing存放编译产生的中间文件
Project存放工程文件
User用户编写的驱动文件

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

标准库文件我这里直接全部拷贝过来了,其实有一些没有用到。

在这里插入图片描述

User中的文件从STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates这里拷贝,但是main.c中可以全部删了,只留main函数,所以it.c文件中的TimingDelay_Decrement()函数也需要删掉。

现在,工程需要用到的文件基本准备好了,可以使用keil新建工程并添加组文件夹。(注意,新建工程时,不要自动下载库文件,我们直接取消,手动添加)

在这里插入图片描述

然后,在各组文件夹中添加代码文件。注意,这里添加的都是源文件,没有添加头文件。

在这里插入图片描述

这些文件添加完成后,我们还需要做一些配置和修改:

2.1.屏蔽不需要的文件

STM32F407只有FSMC功能,但是使用的固件库里面有FMC和FSMC的功能,如果这两个文件都同时编译的话,那么就会出错, 所以我们选择把FMC在工程里面屏蔽掉,就不编译。同时,固件库里面还有DMA2D和LTDC的库,但是F407都没有这两个功能, 所以我们也选择把这两个文件从工程里面屏蔽掉。

在这里插入图片描述

2.2.添加头文件

在这里插入图片描述

2.3.添加宏定义

USE_STDPERIPH_DRIVER,STM32F40_41xxx,

多个宏定义用英文逗号隔开了。

在这里插入图片描述

2.4.配置输出文件夹

在这里插入图片描述

在这里插入图片描述

2.5.配置编译器

在这里插入图片描述

2.6.配置下载器

我们使用的是ST-LINK。

在这里插入图片描述

最后,我们就可以编译完成并成功烧录。

在这里插入图片描述

3.总结
  • 注意宏定义的配置,头文件目录的加载
  • 在配置过程中,keil软件可能出bug,可自行找办法解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/719971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI金融投资:批量下载巨潮资讯基金招募说明书

打开巨潮资讯的基金招募说明书页面: http://www.cninfo.com.cn/new/fulltextSearch/full?searchkey%E5%B0%81%E9%97%AD%E5%BC%8F%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%E6%8B%9B%E5%8B%9F%E8%AF%B4%E6%98%…

智慧校园综合解决方案:提供全方位的学校管理支持

在当今数字化时代,学校管理面临着越来越多的挑战,包括学生管理、教职员工管理、校园安全等。为了应对这些挑战,智慧校园综合解决方案应运而生。智慧校园综合解决方案融入了先进的信息技术,为学校带来了一场管理与教育模式的革新。…

主流电商平台API接口【京东商品详情按关键字搜索商品按图搜索京东商品(拍立淘)获得店铺的所有商品】

主流电商平台商品接口在电商企业中的应用可以帮助企业实现信息同步、库存管理、订单处理、数据分析和营销推广等多重功能,提升运营效率、优化用户体验,进而推动业务增长。 jd API 接入说明 API地址:申请调用KEY地址 调用示例: 参数说明 通用…

jenkins中配置参数化,并在python脚本接收参数实现参数化执行

在公司内进行Monkey测试脚本集成jenkins时,因为需要指定公司内不同的app进行测试。那么可以有两种方法解决该问题,要么创建多个脚本文件,多个jenkins jobs,进行构建。要么可以在配置job时通过传参数的方式,在python脚本…

什么牌子的灯好不伤眼?带你了解什么灯对眼睛伤害最小

眼睛是人类获取信息最重要的感官器官之一,而近视则会导致视力模糊,进而影响学习效果和生活品质。因此,什么灯对眼睛伤害最小成为许多人迫切寻找的目标。本文将为各位家长解答目前许多家长选择为孩子保护视力的产品——护眼台灯。护眼台灯以其…

MAC安装idea教程

https://blog.csdn.net/qq_41810415/article/details/131649541 JDK安装 https://blog.csdn.net/dddebug/article/details/121713633 2、编辑.bash_profile文件 vim .bash_profile 进入编辑模式后 按 i 开始添加内容 结束编辑模式按 ESC 结束后保存输入 :wq! 不保存输入 :q! 检…

数据库原理(关系数据库规范化理论)——(4)

一、关系模式规范化的必要性 1.关系可能出现的问题 数据冗余大;插入异常;删除异常;更新异常; 2.关系模式应满足的基本要求 元组的每个分量必须是不可分割的数据项;数据库中的数据冗余应尽可能少;不要出…

新手教学系列-​​​​​​基础知识(SSH使用)

基础知识(SSH使用) 什么是ssh Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接[2]。虽然任何网络服务都可以通过SSH实现安全传输,SS…

电商API接口是什么意思?有什么作用?

电商API接口是电子商务领域中一种技术解决方案,它允许不同的软件系统之间进行交互和数据交换。 在电商场景下,电商API接口可以实现的功能非常丰富,例如: 商品管理:获取商品列表、商品详情、搜索商品、上下架商品等&a…

欢迎莅临ARCHE-2024,共享智慧档案盛宴!

敬邀参观!2024第三届上海国际智慧档案展览会(ARCHE-2024)将于2024年6月19-21日在上海跨国采购会展中心盛大开幕。深圳市铨顺宏科技有限公司将展示最新的智慧档案技术与解决方案,展位号H010-H011。期待您的光临,共同探索…

大数据同步方案怎么选,才能提高企业的业务效率?

大数据同步通常指的是在多个数据源或存储系统之间同步数据的过程,可以确保数据的一致性,提高数据的可用性和可靠性,同时支持数据分析和决策制定。 大数据同步的步骤通常包括: 数据识别:确定需要同步的数据类型和范围&…

游泳耳机哪个牌子好性价比高?精选高性价比的四大游泳耳机!

在现代社会中,随着健身和水中运动的普及,游泳耳机作为一种关键的健身配件,正日益受到广泛关注和需求。无论是在游泳池畅游还是深潜海底,好的游泳耳机不仅能提供高品质的音乐享受,更能保护耳朵免受水压和湿润环境的侵害…

SpringMVC系列十: 中文乱码处理与JSON处理

文章目录 中文乱码处理自定义中文乱码过滤器Spring提供的过滤器处理中文 处理json和HttpMessageConverter<T>处理JSON-ResponseBody处理JSON-RequestBody处理JSON-注意事项和细节HttpMessageConverter<T\>文件下载-ResponseEntity<T\>作业布置 上一讲, 我们学…

大模型技术工程师:抓住时代机遇,成为行业精英_

伴随AI大模型的火热&#xff0c;中国科技大厂们正在掀起一场「跑步AI化」的风暴。从顶层战略到业务线重构&#xff0c;AI无疑已成为大厂们押注未来的新故事。 大模型时代已经到来 大模型已成为全球竞争热点&#xff0c;一个大模型时代已经到来。 大模型具备三个特点&#xf…

python __call__(实例化对象的时候返回一个函数,调用这个函数的时候会执行__call__)(将类实例用作回调函数)(类装饰器)

文章目录 Python中的__call__方法深入解析__call__方法简介定义和基本用法为什么要使用__call__方法 __call__方法的高级用法在装饰器中使用__call__&#xff08;类装饰器&#xff1a;在类中保持状态或进行状态管理&#xff09;将类实例用作回调函数 结论 Python中的__call__方…

013.随机指纹chromium编译-如何通过传参来固定指纹

随机指纹chromium编译-如何通过传参来固定指纹 由于要所有的类型的指纹都实现固定&#xff0c;工作量太大&#xff0c;这里我只用plugins指纹作为示例。 一、为什么要固定指纹 目标&#xff1a;启动浏览器时&#xff0c;加上参数--fingerprints"xxxxxxx", 参数变化时…

微信小程序接入lottie动画

1、注意&#xff1a;canvas渲染出来的层级太高&#xff0c;当有弹窗的情况会暴露在弹窗外 模拟器上会有这个问题&#xff0c;线上版本不会有 2、需求 需要把lottie动画在小程序的环境下进行展示 3、什么是lottie动画 由Airbnb开发并开源。允许设计师将复杂的矢量动画导出为…

鸿蒙开发网络管理:【 @ohos.net.http (数据请求)】

数据请求 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import http from ohos.net.http;完整示例 import http from ohos.net.http;// 每一个httpRequest对应一个http请求任务&…

Linux安装并配置Java

1、Linux操作系统安装Java 1.1、下载Java JDK解压包 官方提供的网址&#xff1a; 选择Linux版本 下载列表选择最后一项&#xff0c;通过解压方式安装 倒数第二项是以rpm方式进行安装&#xff0c;另一篇安装MySQL时就是用到rpm方法。 1.2、解压JDK tar -zxvf jdk-8u411-lin…

MyBatisPlus可以自动把我们的业务对应的动态代理接口注入到父类baseMapper属性中,因此我们可以省略对应的mapper动态代理接口

MyBatisPlus可以自动把我们的业务对应的动态代理接口注入到父类baseMapper属性中&#xff0c;因此我们可以省略对应的mapper动态代理接口 在service服务实现类中&#xff0c;当我们使用MyBatis框架的时候&#xff0c;那么一般会有一个类似于下面的动态地理接口的显示引入&…