
新建STM32工程 o" D5 W! T. S% r y0 N1 z/ X. J 步骤一:创建工程模板文件! [- _! T" n) h6 o 1.新建一个文件夹 template ) [* L7 @; m4 o% y+ C 2.在文件夹template里面新建六个文件 (1)CMSIS: 存放内核驱动程序和启动引导文件 (2)FWLIB:存放库函数文件 (3)Project:存放工程文件# g8 }/ Z8 U% d' n (4)User: 存放用户程序(主函数) ! K& Q* A) b; n2 ? 效果图: ! `0 [+ T& P/ F0 Z) S+ Z& L) _ ![]() ; U# D0 r! g: _8 O 步骤二:导入stm32固件库# N* Z, S. {; S! b4 L STM32固件库的下载方式,在文章开头有链接。 ) C9 Y9 ~, a7 O3 N+ v1 @ 1. 打开STM32F10x固件库文件 ![]() 其中需要用到的两个文件:Libraries和Project。) F: j& i- ~! p9 K d% I* H& n Y o6 g' C9 G ] 2. 导入文件到 CMSIS 文件! _3 o( t" j" ^2 e% v$ X (1)导入内核驱动程序 " R4 K1 V; a0 l" j ![]() STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport 中的两个文件复制到CMSIS文件中。 5 C" R5 }7 n( T( c2 I) Q (2)导入启动引导文件* ~& `0 j) b( g STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 中的所有文件复制到CMSIS文件中。 / L8 N/ j; v8 f1 B ![]() ( n" O; s$ q" ?* e 启动引导文件名的英文缩写的意义: cl:互联型产品,stm32f105/107系列。 vl:超值型产品,stm32f100系列。 xl:超高密度(容量)产品,stm32f101/103系列。) S* B: A0 ]$ p) F7 C8 a ld:低密度产品,Flash小于64KB。 md:中等密度产品,Flash等于64KB或128KB。6 a$ h, X5 M" G( ~4 Q hd:高密度产品,Flash大于128KB。3 [9 s' g0 s. q0 B; {$ @2 j (3)最后CMSIS 文件效果图; d& H4 q& L! X% S , j# N- V* h! t* s' ^/ e* W( z ![]() 3. 导入文件到 FWLIB 文件, p( h- [6 f2 \8 N STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver中的inc和src文件复制到FWLIB文件中。0 L9 N' t' _' H4 \4 e T 8 Q5 s1 J+ g1 l6 a# U- \ 2 D2 v: @* N' G0 s+ a: p+ C 最后 FWLIB 文件效果图! f6 _. i# f5 x! g$ j: |- h/ ` 3 A `) w$ d! v/ n. |( K0 U ![]() 4. 导入文件到 User 文件% a: f6 t5 O5 j( \ STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的以下三个文件复制到 User 文件中。 5 ?# S- k" \9 L+ ` ![]() STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template中的以下四个文件复制到 User 文件中。 ![]() " y8 }/ E$ d% w. m0 B. a4 b 最后 User 文件效果图 ![]() L+ l' b2 e! C' z- _2 `' N 步骤三:新建STM32工程 1. 新建工程 ![]() 将工程文件建在 Project 文件中, {+ c3 h4 B U0 ^ 1 Y) A, Y# V" V+ {* P4 i/ A% s9 t/ c ![]() 0 M8 F% A$ ]; B& H, u, g( | 2. 选择 STM32F103C8 芯片 ![]() 确定之后跳出一个窗口,直接关掉 ![]() 3. 添加工程文件到Keil_5工程中) b0 {# i$ O8 W2 ` ![]() * }! p1 }" l1 t0 ?" H5 U 新建CMSIS,FWLIB,User 三个文件,然后把刚刚复制在对应文件夹下的文件添加。3 F% _9 j" O; l / Q$ C" l0 T2 w7 `& H ![]() 因为选择的芯片是STM32F103C8——64k内存,所以选择 md 启动引导文件 ![]() 6 A0 n2 [) y/ r ![]() 最后添加成功( w2 Q# L1 A; \7 k2 i! u, P 6 u7 v8 l: C+ {& A8 } ![]() 8 Z t3 D( Z3 m/ f4 K 4. 添加路径和宏定义 点击魔法棒,选择 C/C++7 g: P- E2 b' n' q 添加宏定义:USE_STDPERIPH_DRIVER, STM32F10X_MD7 G4 |' H3 [& S) w5 l 注意:这里选择的是 md 启动引导文件,所以宏定义是 STM32F10X_MD ![]() . P s% W( D( A5 ^9 k; R: ?8 F 添加文件路径 ![]() 5. 选择默认ARM编译器版本 h1 | Z9 B# A8 {! b0 M: h + W, Y. Y$ y4 P* I2 w& N8 F+ A ![]() + S: _) P3 C5 H5 P' b+ l 6. 编译运行成功& n* X' [! e- ]3 U# ?- _ 2 S, ]1 }/ @+ V3 W; b9 ~& h ![]() 问题解答 在评论区看到有人遇到以下问题:' a! i6 u( F( C1 G' {# K N 问题1:/ J4 ?2 I. o- ^. T3 L8 Z5 v- C3 p 出现750个以下错误6 p& _; I: N: D/ b1 I0 b C …\CMSIS\core_cm3.h(173): error: #20: identifier “uint32_t” is undefined* i# ?) |- {. r, s2 L h+ V 5 A0 Q, C* q. q" [ ![]() 是因为 uint32_t、uint16_t、uint8_t 这三个没有定义。 J* E: I: e1 N/ }3 @" g9 F 正常这三个是定义在 stdint.h 文件中。! ^: z% z% j' }# x, S+ O/ l9 t # k6 X" G2 k8 @1 p+ ?( m ![]() 没有定义这三个uint32_t、uint16_t、uint8_t,说明没有#include <stdint.h> ' F: Z9 \6 Y' K7 n% {9 W. r/ e 问题1解决方法:4 }, W: Q' }" t5 f. M. y1 w 正常在 core_com3.h 文件中第 90 行应该有#include <stdint.h> 这行代码。 没有的,自行加上#include <stdint.h> ,便可以解决问题!9 v4 j7 _. l1 Y1 O+ v 7 N! m; A* c# k4 ~0 W . h" B3 I6 _5 O a; S5 D. W ![]() |