
前言 在我们新建一个工程项目时,需要做很多的初始化配置,这些配置比较繁杂,记不清楚也容易出错,我在这里记录一下详细的配置过程。+ @ o5 d" j& Y# Z) l, ] 一、开发环境搭建- J# q( {% Y* R" y5 N6 n 1.创建工程文件夹: V- P* ^0 J: x% }; G2 l S 为了方便我们项目工程的管理,我们一般先创建一个工程文件夹,将我们在开发过程中用到的文件和写的函数分类别的放入项目文件夹,方便我们的管理和修改。5 M! c( n0 ~ Q+ x5 i! V 工程文件夹的分类方法有很多,我以其中两种为例。 (1)分类方法一(建议新手使用) " X, ]& P# q$ q6 D; O3 N ![]() 第一种分类方法如图所示,创建五个文件夹分别存放不同类型的文件。 ! }& U# _/ P6 Z4 [+ Q0 W n, T4 G Libraries:库文件,下分两部分文件,第一部分是CMSIS,存放启动文件和core文件;第二部分是inc和src存放外设程序的源码和头文件* l" a! i' L" f9 _* Z " |* s+ o; L w! D& j ![]() ( W3 J. j: U8 Q) W& [9 W 下面是各个部分文件均来源于官方固件库: c( d% ~* E3 R+ K ![]() 2 w8 q) K# F6 r6 h; I ![]() 3 u) @7 `' u% Q, K% d3 G/ ~9 D8 ~0 O ![]() # I) D2 s5 [ m6 m& \" g7 t ![]() : H+ V& y2 b4 v% g3 S* t7 Q j$ u Output:存放项目的输出文件,主要是.hex文件的输出路径,不需要复制文件到这,在项目中进行相应配置即可。3 }( C* ^3 `. S" y" C. \$ x8 \ Project:存放项目,在创建项目时将存放路径选择在这。& z. ~* b( Q$ b' n% d ! P: j5 m' ^) Z2 ^. @ SYS:存放一些我们自己写的经常用的宏定义和常用函数,比如:delay函数、定时器初始化函数、sys位带操作的文件。 9 S! B, s# K3 I1 d1 F7 i User:存放主函数、我们自己写的文件以及库中少部分文件,其中需要在库中复制的文件如下图所示。7 j+ k# {6 n$ \! ]4 b ! }; s7 b* _7 R( t8 e3 J' q/ g) J ![]() , w8 B. z6 N: I3 M) }% ^9 B8 V 最下面的system_stm32f10x.c文件在之前我们已经 添加过了,这里不添加也可以。 (2)分类方法二(更加方便管理) # i s/ I8 W2 O3 R9 g 8 I0 u0 C: [/ o4 H( i ![]() 第二种分类方法如图所示,对文件进行了更详细的分类,下面分别介绍。 9 ]+ x: Y1 @, v2 n CORE:存放内核相关文件和启动文件9 h6 |$ x. }9 R / N5 a% a1 H" u1 p ![]() HARDWARE:存放我们自己写的一些硬件文件,这些功能一般是STM32直接支持的,比如图中这些功能。( L% H4 g+ I' }3 G# R4 Q / W6 W" H) [2 O. Z8 Z ![]() 4 j5 v6 c$ ?0 E L" `5 Y MBOT:这个文件夹可以以自己的项目来命名,主要存放我们开发这个项目中自己写的独特的文件,比如我这里的编码器函数、小车方向控制函数等。 0 ]3 i1 K* F [6 B( c OBJ:主要存放输出文件和.hex文件,相当于上面的Output文件夹。- @% N/ ?& O# Q" Z( s9 y- O) W$ ]- v ) `+ r* Y2 h$ S- s STM32F10x_FWLib:存放外设相关的头文件和源文件。. Y: h+ Y; {5 S ![]() : ^7 \5 h. e9 k SYSTEM:功能同上述SYS) h& l7 [; {. D1 f/ S# j; M3 v USER:主要存放主函数、以及库中部分文件,具体见下图。 5 Y( a! y( v( [ ![]() ![]() 1 Q7 c7 b: U6 o( q% l 上位机:这里主要是存放了我在调试工程中使用到的上位机程序。0 I: G* c5 L, ]8 u: n 下面的步骤以分类方法二为例,分类方法一只是在“品字形”中的配置不同,在“魔术棒”设置中的设置相同。0 V( v1 k1 w$ b& Z. J / Q- N8 c, N* [ 2.新建工程; J; r5 D( O5 B& Q- z9 T; _ 打开keil5,点击菜单栏project,点击New uVision Project创建一个新项目,填写项目名并选择上面所述的项目存放路径,点击确定。: G! D" P3 g: t7 S, x , c' ~: h0 F3 f8 j5 f) S2 F# P ![]() 1 s0 b# w- T F 选择自己单片机对应的型号,可以通过搜索栏搜索,也可以展开进行选择,我以STM32F103C8T6为例,下面弹出的对话框直接点取消即可。 7 h: N6 G% J% X* K ![]() 点击“品”字形图标添加我们需要用到的文件,注意这里添加的都是源文件(.c),因为头文件在编译时,我们包含相应的路径后,.h文件会自动添加到相应的源文件分级下。9 a' S3 ]3 x q) t4 l4 ^ / D) G7 u% z/ t" V& g ![]() ![]() * _; \6 \1 n4 c4 j2 p8 F4 q 3.开发环境配置 点击“品”字形旁边的“魔术棒”,打开设置。 9 d0 O: X. H. p+ E4 y (1)Target配置 ![]() ![]() - O; C3 \+ u7 T4 J, u (2)Output配置。 h8 r4 C. i* @% _( t' n: ^# a ![]() (3) C/C++配置( C* v5 E% F' V: { 在define中需要加这两句话,它们用逗号分隔,第一句是使用标准外设,第二句要选择自己单片机Flash对应的大小,在数据手册中可以查到。: j; j. P' m( n w/ b7 H, i 6 j& p& q0 w6 ~+ T/ o USE_STDPERIPH_DRIVER,STM32F10X_MD + O* V8 Z( t7 f6 P, o. p9 a1 T3 W ![]() 9 D; h1 K, t( r 头文件路径要添加全,凡是include包含的头文件路径都要添加进去。 T# g' V3 _; n$ T ![]() (4)Debug配置/ Q# x% x6 c, U! N8 Q2 {& g ![]() 第二步是配置仿真环境,具体的修改需要根据自己单片机的型号进行具体查找,查找方法如下图所示。& t3 P* S6 n( y 先在File中选择Device Database选项。 ' K7 Z# v% i( s4 }& a" v' V/ _* b7 J ![]() 选择自己单片机的型号,记住SIM这句话,其中的第二部分中,将 DARMSTM.DLL 填在左侧的软件仿真的Dialog DLL中,将 -pSTM32F103C8 填在Parameter中。右侧的硬件仿真只需要将DARMSTM.DLL的“D”改为“T”。 ![]() 7 }1 G# [0 @! R- N5 w" a' G$ O 到此我们的配置完毕,可以编译一下观察变化。/ y4 r$ Q' {( W V- L1 u8 ` 二、程序烧录配置 程序烧录方法传送门* T1 ` @8 p( P, S ) S: e1 m* h6 @9 e 点击“魔术棒”,在Debug中选择自己使用的烧录硬件,比如ST-Link,点击Settings进行设置。4 {. U1 T7 E1 Y4 \+ { ![]() B, M" y) Y, _% E+ F ![]() ![]() ![]() 5 [: h# J! K3 Q% q4 L6 r: q( o3 m5 P9 d 8 {' U) a! P7 Z/ Y3 F) c6 P 如果没有显示设备信息,绝大多数原因是接线错误!要仔细检查接线,看一下单片机上SW/JSAG端口的引脚名,与ST Link对应,VCC GND SWCLK SWDIO 这四根线要对应正确。 |
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化