STM32F4 MDK新建使用库的工程

本文详细介绍了如何使用STM32标准外设库建立工程,包括下载库、建立MDK工程、添加库文件、组织目录、配置工程选项等多个步骤,并解决在编译过程中遇到的错误,提供了一个从零开始的STM32库工程搭建指南。

    虽然一直ST用库做实验,但没有进行认真的总结。总是先添加价格文件,然后编译。能通过就完成,通不过就再添加别的文件。今天就一步步来梳理下建立用库工程的步骤。争取做到傻瓜式,让即使完全没用过MDK的人都能使用。

第一步:到ST下载标准外设库和演示工程,也可以问卖你开发板的人要。我的库文件是淘宝商给的。可以通过我的百度网盘下载,地址:

【http://pan.baidu.com/share/link?shareid=497853&uk=3087328531】

下载后解压缩即可。此时可以进入各个目录简单熟悉下外设库里边的东西

 

第二步,建立MDK工程

打开MDK程序,会自动打开上次的工程。我们关掉它,然后再新建我们自己的工程:

imageimage

这时会弹出创建工程对话框,选择要保存的位置,然后选择你的MCU。

这里我建立的是一个使用Tim定时器的工程,工程文件名为TIM。使用的MVU为STM32F4VG。昨晚这些选择点击就会弹出对话框,询问是否要将STM32F4系列MCU的启动文件复制到工程文件夹,点击确认让复制到咱们的工程文件夹里边。

imageimage

image

这是我们就可以看到我们新建的工程了。

 

image

组织工程目录:

image

image

工程目录与实际文件目录没有必然的对应关系。我们可以根据自己需要添加。

这里我定义的几个目录:user,存放主函数和一些功能函数。board:自己写的外设初始化和外设应用,periph存放ST标准外设库

 

第三步,添加外设库到工程【重点】

在第一步中解压后的文件夹中,进入\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\中。这里存放的是ST标准库的例程。我们需要在这里复制几个文件到我们的工程中。

进入任一一个工程文件夹,我使用的是ADC3_DMA。找到以下几个文件,将其复制到我们的工程中去:

stm32f4xx_conf.h    stm32f4xx_it.c   stm32f4xx_it.h  system_stm32f4xx.c

其中system_stm32f4xx.c中定义了一些时钟初始化的函数,在刚才向工程中添加的启动文件会调用这里的函数。

添加完这些文件之后,开始设置工程选项,在Project窗口中选择Target1之后在Project菜单中调出工程属性对话框:

image

打开C/C++选项卡

image

image

这里要可以将外设库的inc文件夹、存放board目录中文件文件夹、还有组工程目录文件夹加入。

我加入玩引用的最终效果:

image

点击OK退出即可。

之后我们就可以向工程中添加外设库文件了。添加文件跟刚才的组织工程目录一样,点击addfile,会弹出添加文件对话框。

在右边对话框中定位到在刚才解压缩的文件夹中:\STM32F4xx_StdPeriph_lib v1.0.2\STM32F4xx_StdPeriph_Driver\src

image

 

选择需要的文件即可。因为我需要使用tim定时器,做PWM输出实验。所以除了tim库还要添加GPIO库。

此外misc.c文件是所有工程都要添加的,rcc库是定义时钟所必需的,也一并将其添加到工程中。

第四步:添加主函数文件

File-》new  save  文件名可随意,后缀必需为.c。我命名为main.c

在main.c中添加主函数定义和对公共头文件stm32f4xx_conf.h的引用。stm32f4xx_conf.h包含了对所有的外设库的引用。


#include "stm32f4xx_conf.h"

int main()
{
  while(1);
}

保存之后,利用上边的方法将这个文件添加到工程的user目录中。

最后的工程目录结构是这样的:

image

此时,如果安键盘上的F5进行编译的话会报一堆错误:Undefined symbol assert_param

这是因为我们还缺少一个红定义,库文件里边的一些条件编译选项需要这个定义才能用。我们打开工程属性菜单,重新定位到C/C++选项卡。添加宏定义:USE_STDPERIPH_DRIVER,

重新编译即可。

到此工程建立完毕。如果你还需要用到别的外设,只要将外设库文件加入到工程中即可。

调试,编译,设置仿真器等部分不做介绍。

<think>好的,用户想知道如何在Keil5中为STM32F4创建新工程。我需要根据提供的引用资料整理出步骤。首先,引用3提到使用V3.5固件,但STM32F4可能需要更新的,比如HAL。不过用户给的引用中有提到设备支持包(引用4),可能是指需要安装STM32F4的DFP包。 第一步应该是安装Keil MDK和对应的设备支持包。引用2和4提到Keil MDKSTM32F4xx设备支持包,所以需要确认用户是否已经安装这些。如果没有,可能需要指导下载。 接下来,创建新工程的步骤。引用3中的用户详细描述了创建工程的步骤,包括选择芯片型号、添加启动文件和文件。对于STM32F4,可能需要不同的启动文件和,比如HAL或者标准外设。 然后,配置工程选项,比如设置晶振频率、调试器(如ST-Link),以及包含头文件路径。引用3提到了添加头文件路径,比如CMSIS和文件的inc文件夹。 最后,测试代码,比如编写一个简单的LED闪烁程序,并编译下载。用户可能需要示例代码来验证工程是否正确。 需要检查是否有遗漏的步骤,比如固件的下载和添加源文件。还要注意不同STM32F4型号可能有不同的启动文件,比如startup_stm32f40xx.s或者类似的。此外,确保用户正确配置了目标选项,比如Flash设置和调试器配置。 可能的相关问题包括如何添加外设驱动、处理编译错误,或者优化工程结构。需要确保步骤清晰,避免专业术语过多,适合初学者。同时,提醒用户注意固件版本和设备支持包的兼容性。</think>### 如何在Keil5中为STM32F4创建新工程 #### **一、环境准备** 1. **安装Keil MDK** 需先安装Keil MDK-ARM开发环境(建议使用5.30及以上版本)[^2][^4]。 2. **安装STM32F4设备支持包** 打开Keil5,点击菜单栏的 `Pack Installer`,搜索并安装 `STM32F4xx_DFP`(Device Family Pack)以支持STM32F4系列芯片。 --- #### **二、创建工程步骤** 1. **新建工程** - 点击 `Project > New uVision Project`,选择工程保存路径并命名。 - 在芯片型号选择界面,输入 `STM32F4`,根据具体型号(如STM32F407VG)选择后确认[^2][^3]。 2. **添加固件文件** - **标准外设(或HAL)**:从ST官网或第三方资源下载STM32F4标准外设(如STM32F4xx_DSP_StdPeriph_Lib),解压后复制以下内容到工程目录: - `Libraries/STM32F4xx_StdPeriph_Driver`(外设驱动) - `CMSIS`(内核支持文件) - `Project/STM32F4xx_StdPeriph_Templates`(启动文件和系统配置)[^3][^5]。 - **启动文件**:将 `startup_stm32f40xx.s`(根据芯片型号选择)添加到工程的 `Startup` 文件夹[^3]。 3. **配置工程结构** - 右键工程名,选择 `Manage Project Items`,创建以下分组并添加文件: | 分组名 | 文件内容 | |--------------|---------------------------------| | Startup | 启动文件(.s汇编文件) | | CMSIS | `system_stm32f4xx.c` 等核心文件 | | Drivers | 外设驱动文件(.c) | | User | 用户编写的 `main.c`、`stm32f4xx_it.c` 等 | 4. **设置工程选项** - **Target**:勾选 `Use MicroLIB`(简化标准库)。 - **C/C++**: - 添加头文件路径:`CMSIS/Include`、`Drivers/inc`、`User` 等。 - 预定义宏:`USE_STDPERIPH_DRIVER`, `STM32F40_41xxx`(根据芯片型号修改)[^3]。 - **Debug**:选择调试工具(如ST-Link),勾选 `Reset and Run` 实现程序自动下载。 5. **编写测试代码** 在 `main.c` 中添加以下LED闪烁示例: ```c #include "stm32f4xx.h" int main(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitTypeDef GPIO_InitStruct = { .GPIO_Pin = GPIO_Pin_12, .GPIO_Mode = GPIO_Mode_OUT, .GPIO_Speed = GPIO_Speed_100MHz }; GPIO_Init(GPIOD, &GPIO_InitStruct); while(1) { GPIO_ToggleBits(GPIOD, GPIO_Pin_12); for(int i=0; i<1000000; i++); // 简单延时 } } ``` 6. **编译与下载** - 点击 `Build`(F7)编译工程,确保无报错。 - 连接开发板,点击 `Download`(F8)烧录程序[^2]。 --- #### **三、常见问题** 1. **启动文件选择错误** 若编译报错 `Undefined SystemInit`,检查启动文件是否匹配芯片型号(如STM32F407需用 `startup_stm32f40xx.s`)[^3]。 2. **头文件路径缺失** 若提示 `No such file or directory`,在 `C/C++` 选项中重新添加包含路径。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值