
1 Keil uVision5 MDK 是什么: ]6 I! S3 `1 f" Z: k Keil 软件是一种统称,它包含编辑器、编译器、链接器、调试器等众多工具为一体的集成开发环境(IDE)。 Keil MDK,也叫MDK-ARM,是针对【ARM内核】单片机,比如:STM32F1、 STM32F4、LPC1788、GD32等的编译器。 2 建立一个标准库函数工程7 t, Q3 }' R2 a( b) s) z3 V; ~ 2.1 前期准备 在硬盘上建立一个任意的目录(例:stm32-led)中英文都可以,然后在它之下再新建 4个+ j$ y+ Q0 Y E; S 文件夹,具体如下: 6 x/ f% B: T" ]1 Q, n1 f U ![]() ![]() + P) I7 v9 v- i: W' a4 t4 k6 l ![]() 2.2 建立工程 打开Keil软件后就会进入一个界面 ,如图: ) m0 }) B# S/ T% u" g' ?* C ![]() " h. X+ p# A1 G; m 点击Project然后点击New uVision Project,就会出现一个新建工程界面,如图: 5 j0 I' V# v" d' h V5 p/ X1 j$ B( \ ![]() . e, P7 b% G7 u5 j+ F- F0 U ![]() - C# m! `( _( u+ o; J 将工程保存至 Project 文件夹下,并给这个工程起名叫stm32-led,软件会自动添加扩展名.uvproj,如上图。! w T) |* U; ?9 U# y$ S 直接单击“保存”按钮,工程会自动保存为stm32-led.uvproj文件,下次要打开LED这个工程时,可以直接找到文件夹,双击.uvproj即可打开。 }6 G- r8 i* x/ g! G4 W 保存之后会弹出一个对话框,如图: i0 i; _) R+ V! ?1 P! K 8 ]" Q2 N$ f6 g 6 p7 r$ X0 R1 n$ u# | ![]() - R- Q; i# F) t" Q: G; d7 x/ J 这个对话框是用来选择单片机的型号的,例如我们使用的STM32F1系列的单片机。 ![]() 由于MDK中只有ARM的内核选择,我们要使用STM32单片机需要自己手动添加 $ \$ M! U$ o9 b* [& f ![]() 选择完成之后会有上图界面是用来在线添加库文件,我们先将其关闭后手动添加。 2.3 建立组文件夹 在新建的工程中添加 5 个组文件夹,用来存放各种不同的文件,文件从本地建好的工程文件夹下 获取,双击组文件夹就会出现添加文件的路径,然后选择文件即可。 $ `6 q' E! i" u e" [$ u. q ![]() ![]() $ U2 m2 [/ n2 e0 h; d8 f 右键 Target 1 然后点击 Add Group… ! |0 G: a9 t6 u$ c) o$ c; i 2.4 添加文件. W5 s- }3 P/ k9 ~ 先把上面提到的文件从 ST 标准库中复制到工程模版对应文件夹的目录下,然后在新建的工程中添加这些文件,双击组文件夹就会出现添加文件的路径,然后选择文件即可。$ O& N* r8 B+ T7 t: M6 n+ S( G 0 B# V9 m; T) n ![]() 2.4 配置“魔术棒”选项卡* P2 w: o8 J8 o. H9 J% I 这一步的配置工作很重要,很多人串口用不了 printf 函数,编译有问题,下载有问题,都是这个步骤的配置出了错。 (1) Target 中选中微库“Use MicroLib”,为的是在日后编写串口驱动的时候可以使用 printf 函数。+ F- u4 r" \) z ![]() / m. |, M/ j; w (2) 在 Output 选项卡中把输出文件夹定位到我们工程目录下的“output”文件夹,如果想在编译的过程中生成 hex 文件,那么那 Create HEX File 选项勾上。' I( e% E. k8 l7 _/ V& k% t 8 i! |) ?4 g5 Y0 |9 K' N# A I1 G ![]() 3 S) F: L% I* l4 c- O, ?9 c# @( J# R, o (3) 在 Listing 选项卡中把输出文件夹定位到我们工程目录下的“Listing”文件夹。 $ J( s- Q& n9 I2 h3 O ![]() 5 \7 U0 J8 R8 Y (4) 在 C/C++ 选项卡中添加处理宏及编译器编译的时候查找的头文件路径。如果头文件路径添加有误,则编译的时候会报错找不到头文件。+ S! Z0 i, w1 m( r3 B 4 x$ g" z' z8 J* x# y' W* U ![]() 在这个选项中添加宏,就相当于我们在文件中使用“#define”语句定义宏一样。在编译器中添加宏的好处就是,只要用了这个模版,就不用源文件中修改代码。 L7 R' o% Y% _. z STM32F10X_HD 宏:为了告诉 STM32 标准库,我们使用的芯片类型是 STM32 型号是大容量的,使 STM32 标准库根据我们选定的芯片型号来配置。 % g3 {& N- p% }% Z( [* \6 v USE_STDPERIPH_DRIVER 宏:为了让 stm32f10x.h 包含 stm32f10x_conf.h 这个头文件。. R4 ~/ d; P; o5 e" {2 C1 T 7 P4 P/ c$ M6 _" E* h “Include Paths ”这里添加的是头文件的路径,如果编译的时候提示说找不到头文件,一般就是这里配置出了问题。你把头文件放到了哪个文件夹,就把该文件夹添加到这里即可。(请使用图中的方法用文件浏览器去添加路径,不要直接手打路径,容易出错)。! S- B! @. a( S5 ] 6 _' _! E2 h" f- N3 ]" Q+ [ 2.5 建立 main 函数 ![]() - \7 A n! X, ?" H" }7 ~ 敲出基本框架,编译:8 W- N9 b! o4 Z+ C8 F6 p7 i% l ![]() 8 x2 y/ y! e- y9 Q8 W+ B6 r 0 错误,0 警告,至此工程模板建立成功。 ———————————————— 版权声明:倾晨灬雨曦 |
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南