STM32F4 新建标准库函数工程

发布时间:2023-01-12  

前言

在 STM32 开发中,库函数开发相比寄存器方式具有开发周期短、代码可读性好、便于移植等优点,而使用 Keil 环境的第一步就是新建工程。本文以 STM32F401CE 芯片为例,介绍使用标准库函数新建工程的步骤。

材料准备

  • STM32F4xx 固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0.rar

  • Keil-MDK

  • 一点耐心

新建库函数工程注意事项

不同芯片在新建工程时的配置略有区别,主要体现在以下几点:

  1. 工程目标 Device 选择的芯片型号不同。

  2. 添加的启动文件不同。要根据芯片型号在 arm 目录下选择相应的 .s 文件。

  3. C/C++ 选项卡的芯片型号宏定义不同。具体有哪些选择可在 stm32f4xx.h 头文件中的条件编译指令中找到。不确定选哪个的话可以根据芯片主频从 system_stm32f4xx.c 文件的 PLL 分频参数反推宏定义(要求对时钟树比较熟)。

  4. 工程所包含的外设库函数不同。MDK 会在编译时根据芯片型号宏定义进行寄存器映射,所以要对芯片所没有的外设库文件要排除编译(如文中的 fmc 和 fsmc),否则会报标识符未定义错误。

补充:如何确定芯片有无某个外设?

芯片数据手册中描述了芯片的所有资源,当想要了解具体某一型号芯片的外设时,应该查阅数据手册而不是参考手册(参考手册针对的是整个系列芯片的通用说明)。

Cortex-M4 新建库函数工程步骤

一、新建工程文件夹

  1. 新建一个文件夹 template 用于存放工程模板。

  2. 在 template 文件夹内分别新建 Doc(存放文档)、User(存放用户文件)两个文件夹。

  3. 在 User 文件夹中新建 inc 和 src 两个文件夹分别存放用户头文件和源文件。

二、复制库函数文件

1. 复制 Libraries 文件夹

打开固件库目录 STM32F4xx_DSP_StdPeriph_Lib_V1.4.0, 复制 Libraries 文件夹到工程文件夹template 中。

2. 裁剪 Libraries 文件夹

由于固件库的 Libraries 文件夹是对整个 Cortex-M4 系列通用的,包含了一些项目所用不到的文件,为了节约空间,可以把用不到的多余文件删除。

  • 删除 templateLibrariesCMSIS 目录下除 Device 和 Include 外的所有文件夹。

  • 删除 templateLibrariesCMSISDeviceSTSTM32F4xxSourceTemplates 目录下除 arm 文件夹和 system_stm32f4xx.c 外的所有文件夹。

  • 删除 templateLibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesarm 目录下除startup_stm32f401xx.s 外的其余启动文件。

  • 固件库里类似 Release_Notes.html 的说明文件也可以删了。

3. 添加文件到 User 文件夹

往 templateUser 目录中添加以下三个库文件,并新建 main.c 文件。

  • 打开 STM32F4xx_DSP_StdPeriph_Lib_V1.4.0ProjectSTM32F4xx_StdPeriph_Templates 目录,找到 stm32f4xx_conf.h、stm32f4xx_it.h、stm32f4xx_it.c 三个文件。

  • 复制 stm32f4xx_conf.h 文件到 templateUserinc 目录。

  • 复制 stm32f4xx_it.h 文件到 templateUserinc 目录。

  • 复制 stm32f4xx_it.c 文件到 templateUsersrc 目录。

  • 在 templateUsersrc 目录中新建 main.c 文件,并编写以下主函数代码保存。

其中 stm32f4xx_conf.h 文件包含了所有库函数头文件,stm32f4xx_it.c 文件用于编写中断服务函数,便于统一管理,使工程结构更加规范。

完成以上工作后整个工程目录结构如下图:

三、Keil 新建工程

把工程文件夹建好并复制相关库文件后,就可以打开 Keil 软件新建工程了。

1. 新建工程

打开 Keil 软件,点击 Project 菜单下的 New uVision Project 选项新建工程,并保存到新建的工程文件夹 template 中。

2. 选择芯片型号

在弹出的芯片选型窗口中选择目标板的芯片型号,这里选 STMicroelectronics(ST公司)下的 STM32F401CE(根据具体硬件选择)。

关掉弹出的组件添加窗口,因为我们采用的是手动添加库文件的方式。

3. 新建工程分组

点击「品字形」按钮打开工程管理界面,最左侧是工程名称,可以给工程改个名,然后在中间组管理中点虚框图标新建 CMSIS、STM32F4xx_StdPeriph_Driver、USER、DOC 四个分组,对应工程文件夹中的分类。

4. 添加文件到分组

依然是在工程管理界面下,这一步要做的事情是把准备好的库文件添加到 Keil 工程中,具体操作如下:

  • 往分组 CMSIS 中添加 system_stm32f4xx.c 系统配置文件和 startup_stm32f401xx.s 启动文件。

往分组 STM32F4xx_StdPeriph_Driver 中添加 LibrariesSTM32F4xx_StdPeriph_Driversrc目录下的所有 .c 文件。

往分组 USER 中添加文件 main.c 和 stm32f4xx_it.c。

四、工程配置

点击「魔术棒」按钮打开工程选项界面,进行必要的工程配置。

1. Target 选项卡配置

  • 勾选 Use Micro LIB 选项,为了在工程中使用 printf() 函数。

2. Output 选项卡配置

  • 如需生成 .hex 文件,则需勾选 Create HEX File 选项。

3. C/C++ 选项卡配置

  • 在「预处理符号」Preprocessor Symbols 下的 Define 一栏中添加 STM32F401xx 和USE_STDPERIPH_DRIVER 两个宏定义(用逗号分隔)。

  • 在 Include Paths 中添加以下头文件路径,注意要具体到头文件上一层目录。

  1. .LibrariesCMSISDeviceSTSTM32F4xxInclude

  2. .LibrariesCMSISInclude

  3. .LibrariesSTM32F4xx_StdPeriph_Driverinc

  4. .Userinc

五、下载器配置

依然是在工程选项界面下,进行下载器配置

Debug 选项卡配置

在右上角选择所使用的调试器,根据实际情况选择。这里我用的是 ST-Link,选 ST-Link Debugger。

点击 setting 按钮,在 Falsh Download 选项卡中勾选 Reset and Run 选项,确保程序下载后能自动复位运行,最后点击确定按钮保存所有的工程配置。

六、最后小整改

此时编译整个工程依然会有大量错误,为了能使工程顺利编译最后还要稍作修改,具体如下:

取消编译 fmc 和 fsmc 库文件

查阅数据手册得知 STM32F401 系列芯片没有 fmc 和 fsmc 外设,所以去掉 fmc 和 fsmc 部分的库文件。

在工程文件视图下展开 STM32F4xx_StdPeriph_Driver 分组,选中 stm32f4xx_fmc.c 文件,右键调出 Options for File stm32f4xx_fmc.c 窗口,取消勾选 Include in Target Build 选项,排除stm32f4xx_fmc.c 文件参与编译。stm32f4xx_fsmc.c 用文件同样方式处理(或者直接从工程中移除这两个文件)。

修改 stm32f4xx_it.c 文件

  1. 删除 stm32f4xx_it.c 文件 32 行的代码 #include “main.h”(因为没有写这个文件)。

  2. 删除 stm32f4xx_it.c 文件 144 行的代码 TimingDelay_Decrement();(滴答定时器延时相关,暂时用不到)。

七、编译工程、下载验证

最后点击编译按钮,如果工程配置正确就会看到令人愉悦的 0 Error(s), 0 Warning(s) ,通过下载器连接板子和电脑,烧写程序检验成果,见证令人激动的时刻吧!


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    STM32F4 新建标准库函数工程;前言 在 STM32 开发中,库函数开发相比寄存器方式具有开发周期短、代码可读性好、便于移植等优点,而使用 Keil 环境的第一步就是新建工程。本文......
    新建“bsp_led.c”及“ bsp_led.h”文件,其中的“bsp”即BoardSupport Packet 的缩写(板级支持包),这些文件也可根据自己的喜好命名,这些文件不属于STM32 标准库的内容,是由......
    对外设的工作原理有一定的了解之后,你再去看标准库函数,基本上函数名字能告诉你这个函数的功能是什么,该怎么使用,这样开发就方便很多。 标准固件库自推出以来受到广大工程师推崇,现在很多工程师和公司还在使用标准库函数......
    基于STM32的跑马灯实验的详细解析;我们用C语言来再学习STM32,以加深理解,并且应用相关资料和官方固件标准库。因此,我们来编写一个跑马灯实验 先前准备 一, 开发环境 安装MDK5,并且......
    个“放”的过程也是需要做些计算、判断,尤其是增加必要的字符来描述输出信息,保证信息的可识读。 在C标准库printf函数就有格式输出的功能,利用这个接口更便于调试输出这个过程。 这就需要将printf......
    实现的视频:STM32打印数据到串口助手。 而下文中的实验基于标准库实现的,与HAL相比思路是一样的。在做一个实验时,最好把这个实验分割成几个关键的步骤,这样做的好处就是可以清晰的知道自己需要做什么,以及做完了哪些......
    Keil C51是如何支持双数据指针,有哪些特别的要求;在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向......
    是这里的关键,这里也是最常见的运用库函数的方式之一(调用库函数和结构体是最常见的用法)。 【3】标准库怎么使用 (1)整体看一遍STM32F103固件函数用户手册,了解具体内容,整理......
    STM32标准库、HAL库和LL库介绍;引言 我们在进行STM32开发的时候,使用寄存器进行开发的终究是少数,大多数人还是习惯用库函数进行开发。到目前为止,有标准外设库、HAL库、LL库 三种。本文......
    对外设的工作原理有一定的了解之后,你再去看标准库函数,基本上函数名字能告诉你这个函数的功能是什么,该怎么使用,这样开发就方便很多。 标准固件库自推出以来受到广大工程师推崇,现在很多工程师和公司还在使用标准库函数......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>