STM32F40x标准库的keil5环境搭建(记录)

STM32F40x标准库的keil5环境搭建

目录

前言:

资源

工程创建

Start文件

CMSIS文件

Library文件

User文件

添加文件,并修改文件名

写入文件路径

开发环境的配置

复杂方法的同学操作

删除一些用不到的库文件

​编辑

定向

​编辑

做一个简单闪烁灯的程序


前言:

本次stm32F40x环境搭建首先默认你已经学习过stm32F10x系列

(推荐江科大F103的环境,后面F407的芯片库也是用的他的芯片包)

至于什么是江科大F103:

STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

本人能力有限,其中错误的地方还希望各位大佬提出来

搭建过程需要你包含如下能力:

  1. 基础的英语水平
  2. 知道如何寻找文件与转移文件

起因是学习完F103后打完电赛校赛感觉其IO口太少了,便在淘宝上买了块F407VET6

话不多说,我们开始搭环境

资源

首先得要有F407的器件包

STSW-STM32065 - STM32F4 DSP和标准外设库 - 意法半导体STMicroelectronics

下载好后解压

里面有这些文件

先不要急着打开,如果你的keil5没有stm32F40x的芯片包也不行,所以点开你的keil新建一个工程看看

A.如果你有STM32F4系列的芯片包

他会弹出一个窗口

我这边就选择STM32F407VE点击OK

接下来的窗口不用管,点cancel

至此,我们成功创建了一个空工程

B. 如果你没有STM32F4系列的芯片包(不建议)

也很简单

在这一步直接关闭这个窗口,然后点击这个符号

点开后会加载一段时间,不要心急

向下翻,找到这个名字STMicroelectronics

找到我们所需的芯片包然后在右边面板中点击install

我这边版本低了,也需要更新一下,在这段时间就看右下角更新进度

(但是就我更新后MDK5.39版本的keil5来说,老工程需要切换至ARM Compiler

才能完成编译——

而且不知道为什么对于2.17.1的库来说,里面居然统一换成HAL库的.h和.c文件

虽然后面标准库文件不来自2.17.1的库

这里还希望有大佬指出问题所在,确实在网上没有查明白)

(如若提示等待时间过长无法下载,请自行百度方法,一般来说CY校园网就能下载)

下载好后关掉此页面,点开魔术棒

选择好芯片后基本文件装好

工程创建

此时在新建的工程文件夹里能看见这几个文件

我们需要手动添加如下名称的文件夹,用过F103的同学应该不陌生

Hardware

Library

System

User

然后就是相对于F103新增的文件夹

CMSIS

现在在另一个文件夹窗口打开我们最开始下载器件包,将文件按以下要求复制进来

Start文件

STM32F4xx_DSP_StdPeriph_Lib_V9.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm中的startup_stm32f40_41xxx.s文件(待会讲为什么只选这一个文件)

STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include中的stm32f4xx.h和system_stm32f4xx.h文件

简单的方法:此方法可以跳过后面设置PLL相关参数环节

STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Project\STM32F4xx_StdPeriph_Examples\GPIO\GPIO_IOToggle 例程中的stm32f4xx_it.c 和 stm32f4xx_it.h 和 system_stm32f4xx.c 和 system_stm32f4xx.h 文件

比较复杂的方法:自己理解PLL(这个在后面会讲)

STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Project\STM32F4xx_StdPeriph_Examples\ADC\ADC_DMA例程中的stm32f4xx_it.c 和 stm32f4xx_it.h 和 system_stm32f4xx.c 和 system_stm32f4xx.h 文件

CMSIS文件

STM32F4xx_DSP_StdPeriph_Lib_V9.0\Libraries\CMSIS\Include 中的

core_cm4.h 和 core_cmFunc.h 和 core_cmInstr.h 和 core_cmSimd.h文件

(STM32F40x是使用的Cortex-M4架构,而F10x是Cortex-M3)

Library文件

STM32F4xx_DSP_StdPeriph_Lib_V9.0\Libraries\STM32F4xx_StdPeriph_Driver 里面的 文件夹 

(当然你知道这里面装的是什么文件也能点开文件夹添加(无非就外设配置文件))

User文件

添加一个名为main的txt类型文件,然后改掉后缀为.c

 

之后回到之前的keil工程

添加文件,并修改文件名

在上方的Target 1处右击

 

然后建成如下图中文件

可以通过点击魔术棒右边的”品”字形符号界面里修改文件上下顺序

调整好后返回之前界面,右击相应文件夹,点击添加文件

这边选择All files并点入相应名称文件夹,这里以Start文件夹为例

点击其中一个文件后按下Ctrl+a全选后点击Add

这时我们可以看见

(对于Library文件的inc和src文件夹操作也是一样的,点进去按刚才步骤添加即可)

完成之后应该是图中情况(Library库里面文件太多就不打开了)

此后点击User文件夹下的main.c文件,写入如下图所示(图中为界面内右击)

 

记住最后一行需要空出来,不然之后会报错

写入文件路径

点击魔术棒

然后在弹出的文件中添加相应文件路径,其中Library文件下的inc和src需要分别添加

添加好后应是这个样子,并且一路点击OK返回

开发环境的配置

在左边Start文件下点开stm32f4xx.h

如果其中文字有乱码或者不认识的字符点击控制面板的扳手修改编码方式

一般我们选择UTF-8 或者下面的GB212(Simplified)

之后关闭这个界面,我们看向.h文件里面

我们向下看,在第63行有一个STM32F40_41xxx很吸引人,看其描述

我们发现其中有我们需要的F407VE系列

(也就是之前所说为什么选择startup_stm32f40_41xxx.s文件)

但是为什么这段define被注释掉了呢?我们继续向下看

在109行时我们注意到ST公司很贴心地写了一个Tip:

它大概意思就是说为避免你每次都得切入.h文件修改设备的define类型,他建议你可以在工具链编译器预处理器中定义你的设备——但什么是工具链编译器预处理器?

我们抬头看向魔术棒,点开它然后转到

我们看见有个C/C++选择栏中有叫Define的选项栏,这就是我们接下来需要添加宏的位置

(即工具链编译器预处理器)

从器件包中找到如下路径的文件

STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Project\STM32F4xx_StdPeriph_Templates\MDK-ARM

打开其中名叫

双击打开后关闭所有弹出来的窗口,或者点击cancel也行

按图示顺序打开魔术棒然后复制C/C++里Define的项目

内容是USE_STDPERIPH_DRIVER,STM32F412xG

但是似乎后项的名称与我们的开发板对不上

于是我们修改为USE_STDPERIPH_DRIVER, STM32F40_41xxx

关闭此例程,返回到我们的工程,在刚才魔术棒C/C++的Define位置粘贴上去

点击OK返回,回到stm32f4xx.h界面处,继续向下看到127行左右

这里ST公司已经定义好了外部晶振的频率,对于我的开发板来说就是8Mhz(8000000)

可能会有同学对于原理图上的32.768KHz晶振有疑问,具体可以查看

STM32 两个晶振的作用_stm32 32.768晶振作用-CSDN博客

话说回来,这里图中所示的25Mhz并不符合我的晶振,于是需要修改

但是我们可以看见

这是一个只读文件,所以我们来到文件夹里面修改掉

之后回到keil可以看见

此时我们修改stm32f4xx.h中相应位置的时钟后,再将文件改回只读模式

复杂方法的同学操作

注:接下来斜线内的内容仅供前面选择复杂方法的同学操作

除此之外,我们还需要到system_stm32f4xx.c文件下修改PLL设置

(至于什么是PLL这里不讨论,本人学识浅薄也只是了解个大概,这里给出部分参考资料,接下来描述如有错误的地方还望各位指出!

STM32F407时钟配置_stm32f407 启用内部晶振-CSDN博客

【经验分享】STM32F4那些事之-时钟踩过的坑 - STM32团队 ST意法半导体中文论坛 (stmicroelectronics.cn))

双击点开文件,上面就是一些基础信息,例如:

file:文件是在ADC/ADC_DMA中取来的

author:作者是MCD Application Team

version:1.8.1(我找的是1.9.0的固件库怎么会是1.8.1的例程)

我们继续往下看

可以看见它当时写文件时的PLL配置

(括号内是改之前的数据,括号外的168000000是我自己修改后便于阅读加上去的)

来到140-160行左右可以看见宏定义,我们需要修改的也就是这些(图中已修改过)

(这里能看懂最好,没看懂也没关系,如果有错误还望各位大佬们指出,感谢!)

因为刚才我们在stm32f4xx.h中修改外部晶振源为8MHz

假设最后的时钟值PLL_VCO不变的话(168MHz)

由公式可知

再由F407最高主频建议为168MHz可知

PLL_M应该改为8 / PLL_N 应该为 2

SYSCLK = PLL_VCO / PLL_P = 336 / 2 = 168M

PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N = 8/8 * 336 = 336

这样就是168M主频(System Clock->SYSCLK)时钟

PLL_Q 为了通过公式整除PLL_VCO,改为 7 (168M / 7 = 24M)

总结下来就是:

#define PLL_M      8

#define PLL_N      336

#define PLL_P      2

#define PLL_Q      7

修改之后保存(Ctrl+s)即可

删除一些用不到的库文件

(不删会报错)

别问为什么不用却要添加进来,问就是删除的事比添加的时候少

打开左边文件栏的Library库,下滑找到stm32f4xx_fmc.h 和 stm32f4xx_fmc.c 文件

右击后点击remove去除,之后可以到文件夹里面删除相应文件

这里只演示去除.h文件

(为什么要去除?

我们使用的是F40x的器件库

而F407只含FSMC(Flexible static memory controller)静态存储器控制器

但FMC动态存储器控制器只在更高级的内核中支持

资料参考: STM32 FMC原理详解-CSDN博客)

之后在左侧打开stm32f4xx_it.c文件

在其中找到名为main.h的include,注释掉

(因为我们想要的不是标准的F407例程)

定向

此时应该就算大部分配置好了,我们点击魔术棒选择output选项

点击Select Folder for Objects,将其输出定位在Objects文件夹里(要点进文件夹)

点击ok完成定向

退回魔术棒界面,点击Listing

同样的操作将Listing输出定位在相应文件夹(要点文件夹)

点击OK返回到主界面,开始编译构建目标

这里如果前面无误的话应该只会有很多warning,而没有error

为什么会有这么多警告呢?如何消除它呢?

我们上下滚动报错界面可以发现,它实际上是同一类文件警告

大概意思就是说这个定义被redefinition(多次定义)了,我们随便点击其中一个警告可以被指引到如下位置:

原来还是stm32f4xx.h文件里面,并且通过翻译可知

因为是重定义问题,我们尝试将其注释掉看看(如何修改只读文件看文档前面的指引)

目标构建成功

0error0warning

最后我建议将所有的Start文件改为只读模式,以防误改

做一个简单闪烁灯的程序

最后简单从F

103中移植一下Delay函数

如若还有什么其他问题还望同学们提出,如若我有时间一定会去解答的!

最后吐槽一句,作者记录途中换了一次名字,结果CSDN没有同步水影,鰔!

2024/5/16

### 回答1: STM32F40x原理图封装主要是指将芯片相关的原理图图纸封装成一个标准的格式,以便于后续的电路设计和制造方便。STM32F40x是一款高性能、低功耗的ARM Cortex-M4内核微控制器,它被广泛应用于各种电子设备中。 STM32F40x原理图封装需要包括芯片的引脚定义、电源接口、时钟接口、通信接口等,同时还需要详细说明相应的电路连接方式。一般情况下,我们可以使用Cadence OrCAD等软件进行原理图设计和封装。 在封装过程中,我们需要遵循一定的规范和标准,以确保封装的质量和稳定性。比如,我们需要注意引脚的排布和定义,避免误接或者干扰;同时需要加入必要的滤波电路和保护电路,以确保芯片的正常工作。 封装完成后,就可以将其应用于具体的电路设计中。通过使用已经封装好的芯片原理图,我们可以快速地完成电路设计,从而提高效率和减少错误。同时,在制造过程中,也可以直接使用已经封装好的芯片,以确保电路的准确性和稳定性。 综上所述,STM32F40x原理图封装是整个电子设计和制造过程中非常重要的一步,它可以提高效率和准确性,同时也可以确保电路的质量和稳定性。 ### 回答2: STM32F40x系列是意法半导体推出的一系列高性能微控制器,封装形式有LQFP、BGA等。原理图封装是指将芯片的引脚和其他元器件连接的形式整合成一个封装元件,使得原理图上的元件可以与PCB上的元件一一对应。STM32F40x系列的封装形式主要包括LQFP和BGA两种。其中,LQFP是一种小体积的塑料封装,具有良好的可焊性和易加工性,适用于车载,医疗以及消费电子等应用场景;BGA是一种高密度的封装形式,有着较多的引脚数量和更高的片上资源密度,适用于高性能计算、数据处理和通信等应用场景。 对于STM32F40x系列的原理图封装,通常需要选择相应的封装库,然后在设计软件中引入该库,即可将芯片的引脚和其他元器件连接形式整合成一个封装元件,并与其他元件相连。需要注意的是,在进行原理图设计时,要特别注意电源和信号线的走向、长度和阻抗匹配等问题,以确保电路的稳定性和可靠性。 综上所述,STM32F40x系列的封装形式主要有LQFP和BGA两种,原理图封装需要选择相应的封装库,在设计软件中将芯片的引脚和其他元器件连接形式整合成一个封装元件并与其他元件相连。在进行原理图设计时,需要注意电路的稳定性和可靠性。 ### 回答3: STM32F40x系列芯片原理图封装是指将该系列芯片的电路原理图进行封装,以便于芯片设计者在进行设计时可以更加方便、快捷地调整、改编、搭建与芯片有关的电路元件和电路板信息。STM32F40x依旧按照片上所提供的器件方框进行连接,这样可以使得电路在物理和电学上都非常合理,从而增强电路的可靠性和耐用性。 在STM32F40x的原理图封装中,主要将芯片中的各个引脚进行定义、标志和分配,以便于在电路设计过程中能够迅速、准确地进行连接和电结操作。同时该封装还包括了芯片内核、存储单元、通信模块等各个部分之间的连接、接口和标志,以便于设计者能够快速构建出与芯片相关的电路信息。 总的来说,封装的目的是为了方便芯片设计者在设计中更加高效、便捷地完成与芯片相关的电路连接和电结操作,在保证电路连接的物理和电学正确性的同时,尽可能地减小芯片设计的复杂度,提高设计的效率和成功率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值