1. 如何新建一个ARM工程

本文档详细介绍了使用MDK4.72进行STM32F10x系列微控制器开发的过程,从工程搭建到库函数配置,帮助初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        学习嵌入式,第一步就是选择开发工具了,GCC,MDK,IAR每一种都有自己的优劣势,不再赘述。在这里,我选择使用的时MDK4.72。首次使用MDK,程序提供了了很多的模板,一上来就有很多例子供我们学习。但是我发现直接使用这些模板虽然让我快速的接触嵌入式软件开发,但是那庞大的函数库让我感觉迷茫,我甚至不知道程序的运行流程,因此我就有了脱离模板,自己建立工程的想法,初次建立错误一堆,通过百度以及自己查找解决这一个个错误花费了我接近4个小时,我把自己的整个经历记录下来,虽然以后遇到的芯片或者开发软件可能不同,但具体思路却是一致的。这个流程也基本上适用于所有使用MDK生成STM32F10x开发板程序。为了以后再次出现相同错误能快速的解决,我尽可能给出详细步骤处理。

准备工作

建立工程文件夹,在其下面添加OUTPUT,SOURCE这两个文件夹(如下):

然后在SOURCE文件夹下添加文件夹APP,用来存放用户文件。

PS:所有文件夹(包括工程的路径上的文件夹)名字一定要是要英文,这是因为中文在某些情况下会出现未知编译错误。

        移动标准库文件中的头文件和对应子文件代码到SOURCE文件夹,我使用的是STM32F10x_StdPeriph_Lib_V3.5.0,后续的库可能有其它改动,这就需要你自己按照这个思路去处理,解压STM32F10x_StdPeriph_Lib,找到...\\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries文件夹下的


并复制到...\\工程文件夹(当前工程,英文)\\SOURCE文件夹下,其中CMSIS是Cortex的微控制器软件接口标准,它提供了stm32的启动文件,外设定义,以及器件的定义。而STM32F10x_StdPeriph_Driver提供的就是库函数用来实现对芯片的操作。

SOURCE文件夹内容如下:

到此,整个工程的准备工作就做好了,下面就开始用MDK建立工程。

 使用MDK建立工程

1.新建ARM MDK工程,我选择的是芯片STM32F107VS,与开发板芯片保持一致,位置在当前工程文件下。工程建立中,添加对应芯片但不要添加启动代码,手动复制安装目录\\Keil\ARM\Startup\ST文件夹下的STM32F10x.s(启动文件,以后会详解)到当前工程文件夹,并添加到当前工程下的start_up中。

2.新建file,保存在上述的...//APP文件夹里,文件名保存为main.c,然后添加到USER文件夹下。

3.在工程中添加文件夹DRIVE,并把用到的驱动文件,也就是...\SOURCE\STM32F10x_ StdPeriph_Driver\src下需要使用的驱动文件添加到DRIVE文件夹里,如下:

同时给USER/DRIVER两个文件夹都添加inc查询支持,用于头文件查找。

注:重要,不然MDK是无法识别你包含的头文件

具体步骤如下:

1.选中MDK中APP和DRIVE文件夹,右键选择OPTION(快捷键ALT+F7),在弹出的对话框上方选中C/C++。


2.在对话框下方的includePathe处添加:当前工程文件夹\SOURCE\STM32F10x_StdPeriph_Driver\inc提供头文件支持(后序还要添加新的支持),USER和DRIVE两个文件夹都要添加。

编译和更正

上面的都完成后,再main函数里添加代码,头文件为#include"stm32f10x.h",编译。

这时会出现

C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(8319):error:  #5: cannot open source input    file "stm32f10x_conf.h": No suchfile or directory

stm32f10x_conf.h里是所用外设的头文件的申明以及程序内部assert处理命令,在3.5的固态库我没有找到这个头文件,于是我下载一个具有所有外设头文件申明的头文件stm32f10x_conf.h,将其放入当前工程文件夹\SOURCE\STM32F10x_StdPeriph_Driver\inc中,继续编译,出现一堆端口未定义,这是因为stm32f10x_conf.h虽然添加进去了,但并没有真正启用,在stm32f10x.h中查找,大概100行的位置


取消掉#defineUSE_STDPERIPH_DRIVER这句话的注释,如上图即可。此外,#include”stm32f10x_conf.h”定义在#include"stm32f10x.h"的末尾,


下面就来讲stm32f10x_conf.h这个头文件。


里面包含了所有你需要用到的外设头文件,你需要用什么就取消对应得注释即可,记得一定要取消注释,不然你用到被注释文件里的库函数是不会被识别的。

此外如果出现

C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(97):error:  #35: #error directive:"Please select first the target STM32F10x device used in your application(in stm32f10x.h file)"

表明你没有申明当前选择的STM芯片隶属于的类型,在stm32f10x.h找到如下的代码段,下方会有英文注释告诉你如何选择,取消掉你所用板子型号对应类型的注释即可,取消后的如下。


解决以上问题,第一个程序就可以运行起来了。

        库函数的使用作为嵌入式的开发的基础必须熟练掌握,它一定程度上脱离了硬件的桎梏,方便了理解,但是直接寄存器操作也有自己的优势,代码量少,程序效率稍高(当然直接使用汇编的寄存器操作效率是最高的),这两种各有优劣,但初学状态下,以库函数编程为主(简单易上手),同时理解相关寄存器控制的含义,在学习嵌入式开发的过程中意义重大。

### Keil 5 新建工程时仅显示 ARM 架构的解决方案 当用户在 Keil MDK-ARM (Keil 5) 中新建工程时,发现只有 ARM 构架可用,这是因为当前安装的 Keil 软件默认支持的是 ARM Cortex-M 和经典 ARM7/9 系列处理器。如果需要添加其他架构的支持(例如 RISC-V 或 MSP430),则需额外安装对应的工具链和支持包。 以下是关于如何扩展 Keil 工程创建功能以支持更多架构的信息: #### 安装其他架构的支持包 为了使 Keil 支持除 ARM 外的其他架构,通常需要下载并安装特定于目标架构的开发套件或插件。这些插件由 Keil 提供或者第三方厂商提供[^1]。 例如: - **RISC-V**:需要安装 Keil 的 RISC-V 开发工具链,可以从 Arm 官方网站或其他授权渠道获取。 - **MSP430**:虽然传统上 MSP430 使用 TI 自家的编译器,但某些情况下也可以通过专用插件集成到 Keil 平台中。 对于每种新架构的支持,都需要执行以下操作: 1. 下载对应的目标设备支持包; 2. 将其解压至指定目录(通常是 `C:\Keil_v5\` 或者自定义路径下的子文件夹); 3. 配置环境变量以便识别新增加的功能模块。 #### 修改注册表项来启用隐藏选项 有时即使安装好了必要的组件之后仍然看不到期望的选择列表,则可能是由于系统内部设置了过滤机制所致。此时可以通过调整 Windows 注册表的方式解锁全部可能性[^2]: ```plaintext [HKEY_CURRENT_USER\Software\Arm Ltd.\MDK System\Version5] "ShowAllDevices"=dword:00000001 ``` > 注意:编辑注册表存在风险,请务必提前备份! 完成上述更改后重启应用程序应该能够看到更全面的结果集。 另外值得注意的一点是,在实际应用过程中还应当考虑兼容性和性能因素——并非所有的微控制器都适合迁移到非主流生态系统当中去处理复杂任务。 最后提醒一下开发者朋友们,在尝试任何修改之前一定要仔细阅读官方文档以及相关论坛帖子,确保所采取措施的安全有效性。 ```python # 示例 Python 脚本用于自动化部分配置过程 import os def check_keil_installation(path="C:\\Keil_v5"): """验证 Keil 是否已正确安装""" if not os.path.exists(path): raise FileNotFoundError(f"未找到 Keil 安装位置 {path}") check_keil_installation() print("Keil 安装正常") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值