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

news2024/11/26 22:48:48

创建工程

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

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,可自行找办法解决

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言轻松搞定Excel的操作,简单生成图表

原文链接:GO轻松搞定Excel 库简介 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLS…

微信小程序接入lottie动画

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

【嵌入式】SD NAND:SD卡的集成与优化

嵌入式SD卡,也称为SD NAND或贴片式SD卡,是一种专为空间受限的设备设计的存储解决方案。这种存储卡与传统的SD卡不同,它采用贴片式封装,可以直接焊接到设备的PCB上,从而为电子设备提供内置存储功能。以下是嵌入式SD卡的…

【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测

文章目录 一、文章概览(一)问题来源(二)文章的主要工作(三)相关研究 二、动机:Logits 中缺失的信息(一)logits(三)基于零空间的 OOD 评分&#xf…

Python单行代码:一招鲜,吃遍天

大家好,在Python编程中,我们时常需要高效、简洁的代码来解决复杂的问题。今天,我将向大家介绍10个非常有用的Python单行代码。 一行代码指的是将复杂的任务浓缩在一行代码中完成。它充分利用Python的简洁和强大,使代码更简洁、更…

grafana连接influxdb2.x做数据大盘

连接influxdb 展示数据 新建仪表盘 选择存储库 设置展示

数据可视化---绘制常用图表,组合图表,定制图表主题

题目一:绘制桑基图,展示某商铺新老客服群体的商品喜好 编写程序。根据第9.3.7,绘制桑基图,展示某商铺新老客服群体的商品喜好。 运行代码: #绘制桑基图,展示某商铺新老客服群体的商品喜好 from pyecharts…

男士内裤哪个品牌质量好?国内质量好的男士内裤推荐

今天想和大家分享一个虽不起眼但至关重要的时尚单品——男士内裤。它可能不像外套或鞋子那样引人注目,但却承载着男士们日常的舒适与健康。选择一款合适的男士内裤,不仅能提升穿着体验,更是展现个人品味和生活态度的关键。以下是一些选择内裤…

机器学习实战19-利用机器学习模型与算法实现销售数据的归因分析与图形生成

大家好,我是微学AI,今天给大家介绍一下机器学习实战19-利用机器学习模型与算法实现销售数据的归因分析与图形生成。 归因分析是数据分析中的一个重要环节,它主要用于确定不同因素对特定结果(如销售额、转化率等)的贡献…

Nuxt.js 深入浅出:目录结构与文件组织详解

title: Nuxt.js 深入浅出:目录结构与文件组织详解 date: 2024/6/18 updated: 2024/6/18 author: cmdragon excerpt: 摘要:本文详述了Nuxt.js框架中关键目录与配置文件的作用及使用方法,包括布局设定、页面结构管理、插件集成、静态资源处理…

Linux安装并配置Java

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

建筑幕墙甲级设计资质:申请条件与评分标准

建筑幕墙甲级设计资质的申请条件与评分标准可以清晰归纳如下: 申请条件 一、企业基本情况 独立企业法人资格:企业需具有独立企业法人资格。注册资本:注册资本不少于300万元人民币。 二、技术人员条件 主要技术负责人或总工程师&#xff…

1688新品爆款筛选技巧,电商小白也能秒变选品达人

不管是做淘宝、拼多多、抖音、小红书、京东等国内电商平台的商家,可能都有去1688选品的需求。电商环境越来越卷,为了迎合市场和消费者,商家必须不断推陈出新,挖掘潜力新品。 所以有的商友表示想选1688上所有带新品标识的品&#…

Hi3861 OpenHarmony嵌入式应用入门--轮询按键

本篇介绍使用轮询方式读取gpio状态来判断按键状态。 原理图如下 GPIO API API名称 说明 hi_u32 hi_gpio_init(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO上下拉功能。 hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpi…

ollama部署本地大模型

文章目录 一、Ollama1.ollama简介2.安装流程(1)官网下载ollama(2)选择特定的大模型版本下载安装(3)测试 二、spring项目集成Ollama的大模型1.环境信息2.配置文件(1)application.yml&…

shell命令(进程管理和用户管理)

一、进程处理相关命令 1、进程的概念 进程的概念主要有两点: 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域( text region )、数据区域( data region )和堆栈&am…

基于Spark3.3.4版本,实现Standalone 模式高可用集群部署

目录 一、环境描述 二、部署Spark 节点 2.1 下载资源包 2.2 解压 2.3 配置 2.3.1 配置环境变量 2.3.2 修改workers配置文件 2.3.3 修改spark.env.sh文件 2.3.4 修改spark-defaults.conf 2.4 分发 2.5 启动服务 2.5.1 启动zookeeper 2.5.2 启动hdfs 2.5.3 启动spar…

视频融合平台LntonCVS视频监控汇聚平台:构建多元接入与智能管理的安防新生态

一、视频融合平台概述 视频融合平台支持多种协议和设备类型的接入,包括GB28181、Onvif、RTSP、RTMP、海康SDK、Ehome、大华SDK、宇视SDK等。它能够统一整合和管理来自不同品牌、不同协议的视频资源,构建视频数据资源池,并通过视频资源目录为…

zemax默认函数评价设定规则

--转自挑衅冰雪 矩形阵列: 系统波前不能使用像差系数表示,系统中包含非圆形通光孔径的情况(如矩形,椭圆)。 高斯求积: 具有环形光瞳和旋转对称系统 矩形阵列评价函数操作数要远大于高斯求积 可先用高斯…

【HarmonyOS NEXT】设置组件不同状态下的样式

属性 名称 参数类型 描述 stateStyles StateStyles 设置组件不同状态的样式。 从API version 9开始,该接口支持在ArkTS卡片中使用。 StateStyles接口说明 从API version 9开始,该接口支持在ArkTS卡片中使用。只支持通用属性。 状态名称 类型 必…