
新建STM32工程$ l. E% g2 @# X+ Z! D, n 步骤一:创建工程模板文件 c! w$ p1 O) w: B u8 z 1.新建一个文件夹 template 2.在文件夹template里面新建六个文件& s( m7 E4 T# B' f7 H (1)CMSIS: 存放内核驱动程序和启动引导文件 (2)FWLIB:存放库函数文件 (3)Project:存放工程文件' y2 G3 Z" i2 K# a' b& p (4)User: 存放用户程序(主函数) * a) i. v$ o3 `& J 效果图:" I1 a: { y, ~$ j' } ! P0 u. s4 v1 u' k5 r, b ![]() 步骤二:导入stm32固件库 STM32固件库的下载方式,在文章开头有链接。. r! a9 ]; h2 n/ j5 Z. V \ & `- v% u4 A4 G0 t3 C& z/ `$ n 1. 打开STM32F10x固件库文件 ![]() 其中需要用到的两个文件:Libraries和Project。 - B, O6 S8 V, F 2. 导入文件到 CMSIS 文件( _& e) D X1 I5 T (1)导入内核驱动程序 6 r! R6 q8 e2 Q) z ![]() STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport 中的两个文件复制到CMSIS文件中。 & A9 [+ [2 i) e; F, F (2)导入启动引导文件) c) e$ E' _( j/ f0 J STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 中的所有文件复制到CMSIS文件中。2 O! H! d$ o9 E ![]() 0 ^) H" e# q( ]+ o/ m; K 启动引导文件名的英文缩写的意义: cl:互联型产品,stm32f105/107系列。 vl:超值型产品,stm32f100系列。 xl:超高密度(容量)产品,stm32f101/103系列。 ld:低密度产品,Flash小于64KB。 md:中等密度产品,Flash等于64KB或128KB。- L! X0 }1 n: V hd:高密度产品,Flash大于128KB。& S5 Y/ b4 a& C! F* |% T2 |; h (3)最后CMSIS 文件效果图 ![]() 9 G8 z6 ^+ V5 W% K7 S 3. 导入文件到 FWLIB 文件 STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver中的inc和src文件复制到FWLIB文件中。 9 N% e& I w' h/ p6 g5 Q 2 W8 f6 P; e% x6 k0 Y4 v; d5 W" N , U. h2 E& Y" _0 T 最后 FWLIB 文件效果图, g) e; i5 _ Q ![]() : S/ D' O3 ^9 F/ J 4. 导入文件到 User 文件4 l$ X: d9 K3 S+ y3 K3 x: o, S STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的以下三个文件复制到 User 文件中。 2 J1 X# i+ u) p! O# @* S ![]() " t. B; C) _ y( g- {" { STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template中的以下四个文件复制到 User 文件中。9 K6 F: Q& \% s4 ~9 ^2 Y* | - O2 H4 |/ G6 | ![]() 最后 User 文件效果图 # H( j6 A: [* q7 _ z$ [ ![]() 3 ?. S& |/ Z, S, D9 f 步骤三:新建STM32工程 1. 新建工程 & O! v& I8 f7 _6 a! G/ _$ D ![]() 将工程文件建在 Project 文件中! {% k0 f) G7 o ![]() 6 [6 W4 W2 t! h5 R; Y+ } 2. 选择 STM32F103C8 芯片 % ^1 h( |" @6 p* i# L ![]() 确定之后跳出一个窗口,直接关掉# W) F5 C0 }4 N0 x$ [8 g ![]() 3. 添加工程文件到Keil_5工程中 ![]() 新建CMSIS,FWLIB,User 三个文件,然后把刚刚复制在对应文件夹下的文件添加。1 n3 r1 x% i7 V9 Z5 W3 S ![]() 9 r; v# b$ z; ~* |! F 因为选择的芯片是STM32F103C8——64k内存,所以选择 md 启动引导文件 ![]() ![]() 最后添加成功$ _9 P' x1 _) e% f( C7 [ \ ![]() 6 m8 K8 t: e0 G' J; V 4. 添加路径和宏定义 点击魔法棒,选择 C/C++* c5 F: h1 `- m2 z6 x2 ^ 添加宏定义:USE_STDPERIPH_DRIVER, STM32F10X_MD- b: ^7 h& V x0 u! X+ w" A; J 注意:这里选择的是 md 启动引导文件,所以宏定义是 STM32F10X_MD ' a4 k0 r; M m" }: W1 y ![]() 添加文件路径 ![]() 5. 选择默认ARM编译器版本 ![]() 6. 编译运行成功 $ h+ }( z; V% L8 z& }2 c+ G ![]() 问题解答. a2 L- T$ ?) `. g0 C! i 在评论区看到有人遇到以下问题:& N6 }6 _0 N* e; O, \; \+ [$ k$ F 问题1:" o- @/ R) g) v" k0 L9 b, |! ^ 出现750个以下错误! c3 y9 j% P" u4 w0 z! y9 u …\CMSIS\core_cm3.h(173): error: #20: identifier “uint32_t” is undefined ![]() : L3 e8 L( L! D1 {. [ 是因为 uint32_t、uint16_t、uint8_t 这三个没有定义。 正常这三个是定义在 stdint.h 文件中。9 I2 o4 v/ k' ^, T) B- p+ p4 ` ![]() : C! |% }- d" T/ L. i 没有定义这三个uint32_t、uint16_t、uint8_t,说明没有#include <stdint.h> 问题1解决方法: K+ T* \. S" O" x* ?- L8 E 正常在 core_com3.h 文件中第 90 行应该有#include <stdint.h> 这行代码。 没有的,自行加上#include <stdint.h> ,便可以解决问题!- T a F# |6 S \ K1 r n- |; g9 b8 M% j$ @ ![]() |