你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32心得:新建工程模板

[复制链接]
STMCU小助手 发布时间:2022-11-20 16:03

% V7 e1 N' q9 x  M+ d5 m 1b6620d6851a47548c113ee605537f6a.png
% v5 B, x2 }2 F/ B+ z/ h  X. D* X7 J! A* l
特点:4 A5 |( Q( `6 E3 J1 z2 X4 Z

6 E% L+ K  S" p! u* }8 R参考正点原子教学视频,固件库模板步骤用红色字体表示,寄存器模板步骤用绿色字体表示,黑色字体是共同步骤。- {: [0 h1 n' w9 i% Y: D1 \

$ ?3 N, N5 c/ G+ R" `9 o1)新建一个空文件夹(名字自定)用来存放今后开发某项目的所有开发程序,在该文件夹中,新建一个USER空文件夹(推荐用USER名);* `8 w0 \0 C5 Y& v9 B* O
2)MDK软件中,单击Project→New μVision Project新建一个工程,输入工程文件名,选择好芯片后点击OK;" C; [: t# @/ j1 D
" H3 t2 j# F7 G8 m& U8 ?
20200322201623256.png
- |! H. C; e% S  s" i 20200322201810260.png
6 @  }# ^: V9 ~3 Z7 {, z: p6 c( Y5 I$ }/ Q& h' h9 m% ~4 @% b
3)在USER文件夹中,Listings和Objects两个文件夹用来存放编译过程产生的中间文件(为了跟MDK5.1之前版本兼容),
1 _2 n# d1 O8 |( m! V/ T( f新建CORE(核心文件和启动文件),OBJ(编译过程文件和hex文件),STM32F10x_FWLib(库函数源码文件)三个空文件夹(与USER文件夹并列)/新建CORE(核心文件和启动文件)和OBJ(编译过程文件和hex文件)两个空文件夹(与USER文件夹并列);
; Z) ~" X  c* x$ ^& V* x1 n$ q- i$ M* s
20200322202107287.png 7 M$ U) g  v) r. k3 d
9 ~6 x) ~( O* `4 R4 o* S" i. V# d+ @
2020032220214753.png
8 c* B1 a+ e6 B
" p1 l! V  B) ?& I2 Q$ s4)将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver里的src(存放固件库的.c文件),inc(存放对应的.h文件)两个文件夹复制到STM32F10x_FWLib文件夹里;将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport里的core_cm3.c和core_cm3.h复制到CORE文件夹里;将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm里的startup_stm32f10x_hd.s[1]文件复制到CORE文件夹里,此时CORE文件夹里有三个文件;) p: a) u" w* `0 A" B
将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm里的startup_stm32f10x_hd.s文件复制到CORE文件夹里,此时CORE文件夹里只有一个文件;
% B. }$ O0 v( M4 e9 W
- O0 ^* a1 {: a) H7 B/ l 20200322202348401.png + b4 p6 \/ k" v4 ^4 g
7 M. y1 J) W3 f0 `( F
5)将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x里的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h复制到USER文件夹里;将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template里的main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h复制到USER文件夹里,此时USER文件夹里多了七个文件;' |) s' b, [9 R1 \2 F

/ }; w2 z) l7 s 20200322202459424.png 1 q* _" b, i: G
# ~0 m0 y' o0 n
6)在MDK软件中,右键Target1,单击Manage Project Items…,在Project Items界面、Groups一栏,删除Source Group 1,新建USER,CORE,FWLIB,单击OK(这里也可以重命名Target1)/在MDK软件中,右键Target1,单击Manage Project Items…,在Project Items界面、Groups一栏,删除Source Group 1,新建USER,CORE单击OK(这里也可以重命名Target1);, ?" {/ l) G. D

' y: o% _8 ^' @7 ~1 Y5 i. C7 W 20200322202616277.png
: R8 v4 f1 z' q# [/ x1 @3 s( Y1 Q( E& b4 x  U  q7 b
7)在MDK软件中,回到之前的Manage Project Items界面,在Project Items界面,选中FWLIB,单击Add Files,选择STM32F10x_FWLib\src,选中里面所有的.c文件,单击Add(其实只需添加需要用的.c文件);
/ g# S! {  j  Q, z* m! b选中CORE,单击Add Files,将CORE文件夹里的core_cm3.c和startup_stm32f10x_hd.s添加进来/选中CORE,单击Add Files,将CORE文件夹里的startup_stm32f10x_hd.s[3]添加进来;2 U- d/ V/ _8 @4 v5 r
选中USER,单击Add Files,将USER文件夹里的main.c,stm32f10x_it.c和system_stm32f10x.c添加进来/在MDK软件中,新建一个test.c文件(即主函数main.c文件[2],名字可自定),保存在USER文件夹里,然后在Manage Project Items界面,Project Items选项,选中USER,将刚才新建的.c文件添加进来);
" `  {3 \6 C; t' }( U- J, c8)在MDK软件中,单击魔术棒,在Output选项里,勾选Create HEX File,单击Select Folder for Objects,选择OBJ文件夹(放弃将编译过程文件存放在Listings和Objects中);
/ k* g" J9 f; s: R- ~
$ j% B$ J9 \- q7 k8 s 20200322202842946.png
* t8 o$ m+ P: p- ~4 b8 n/ S* C) R+ l9 [
20200322202922436.png
2 s  y% P9 ^. t6 E* ^
/ r; F' n' S( e7 a- e# f0 @9)在C/C++选项里,单击Include Paths右边的…,添加三个头文件目录,在Define里输入STM32F10X_HD,USE_STDPERIPH_DRIVER/在C/C++选项里,在Define一栏里输入STM32F10X_HD;7 e3 K9 `, N/ W2 g2 K' P+ d% [

7 N2 F$ O: j! ~. f% t3 P 20200322203037605.png
  R' N( B5 V( G+ |: j/ e0 o
! X) h# e0 f4 h3 R& A# N8 Z 20200322203058889.png 0 S/ F) g! y, X/ n" N

( R2 F( D( M5 }$ o3 ~10) 此时,工程模板已建立完成。接下来,添加ALIENTEK提供的公用代码。将SYSTEM文件夹复制到工程文件中(与USER文件夹并列),在MDK软件中,右键Target1,单击Manage Project
, L) C! ^0 E( m2 SItems…,在Project Items界面、Groups一栏,新建SYSTEM,选中SYSTEM,单击Add Files,将SYSTEM文件夹里的sys.c,delay.c和usart.c添加进来,然后单击OK;( W; t* l1 B$ }: @9 u
11)单击魔术棒,在C/C++选项里,单击Include Paths右边的…,添加SYSTEM文件夹里的三个头文件,新建工程模板最终完成。- |" O# r5 O9 K6 p# ?

5 R2 x3 }" @/ F2 o' s7 M& ~! S备注:
5 ]' J% w" W) e9 S$ y+ L6 C[1] startup_stm32f10x_hd.s是一段和硬件相关的汇编代码,主要作用:1)堆栈(SP)的初始化;2)初始化程序计数器(PC);3)设置向量表异常事件的入口地址;4)调用Main函数。ST公司有三个文件,分别对应不同的STM32芯片:7 p- d) M: r6 @6 W$ w5 @
startup_stm32f10x_ld.s对应FLASH≤32K的STM32芯片;+ i) Z- R; o2 Q2 y1 P
startup_stm32f10x_md.s对应64K≤FLASH≤128K的STM32芯片;3 h" e0 Y+ w7 w$ {8 V6 A4 I5 T( Y
startup_stm32f10x_hd.s对应256K≤FLASH的STM32芯片。
* E& s: z  q! g& o* ][2]寄存器模板的主函数文件可以先这么写:```
/ U, x/ P+ J6 F8 e- @6 V& ^0 e; s$ o* H
  1. #include “sys.h”1 u( r" H. Y) z. m1 z  j3 I5 M
  2. #include “usart.h”
    5 T5 y* F" I4 y" e0 n. b
  3. #include “delay.h”4 }7 w+ _4 o8 }
  4. 9 P" S/ Z8 m9 u' a  K6 Z. L
  5. int main(void)# P  g  K; n6 h& M, V' D% Z
  6. {# s3 h. h# x' T! O7 _
  7.       u8 t=0;! j+ J# D* T" v, \( T6 F
  8.       Stm32_Clock_Init(9);       //系统时钟设置( x- H! K6 |7 h! M
  9.       delay_init(72);            //延时初始化8 K+ m  N4 F. u: @# ~
  10.       uart_init(72,115200);      //串口初始化为115200
    1 l$ l7 |1 C! e1 P. W( Q  S
  11.       while(1)1 }4 p* T2 E/ z* R: W# L% }
  12.       {: T% L  \5 K! V* _5 Z
  13.            printf(“t:%d\r\n”,t);9 e9 {) h( d* R  ~
  14.            delay_ms(500);
    3 U: F& G5 K' o
  15.            t++;/ U5 v: ^% `6 n& W. }! i
  16.        }
    * }/ I! w  P- W  J3 v
  17. }
复制代码
) `5 c5 Q5 j7 a- j! \
可直接编译后利用FlyMcu下载程序至STM32开发版中,进行调试。
1 J( I$ P" L) a6 C1 |+ @, A[3]寄存器模板和库函数模板的startup_stm32f10x_hd.s区别在于,寄存器模板的需要注释三行代码:
* O3 q3 Z$ P- R+ ]/ A- [8 B! A/ {( i) p) a; v
  1. ;IMPORT  SystemInit
    ! @- Y0 Y  r4 d4 Z) p5 H
  2. ;LDR     R0, =SystemInit
    9 b: ], q; \5 i. n
  3. ;BLX     R0
复制代码

% {9 o7 j7 E8 I0 Y+ \$ V: B5 W# x  J————————————————
9 r. I$ K' ~4 M, i) W* f" N0 s9 D版权声明:天亮继续睡! J1 r( ]3 g0 K  I* J! d

; s: _& n/ A; n- ]6 F9 ]; S  \
! G, {, }1 V: r" x9 p5 o3 i
赞 收藏 评论0 发布时间:2022-11-20 16:03

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版