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

【经验分享】STM32菜鸟成长记录

[复制链接]
STMCU小助手 发布时间:2022-5-24 10:06
学习新知识我的一个方法是:$ @- H4 H& ~/ V9 }
. A+ A! Y" h( X+ K( j
1.先把握住新东西大的一个框架、涉及的内容、范围;
" B, z2 `' R' c) D/ S+ h/ t4 U1 L5 v$ f2 W- [  W- z# f2 V
简而言之:理清架构,把握重点;
0 S+ P; R& Z- d3 }5 A7 o  _
' U# K9 v% O1 }$ y) h2.在看清楚大的框架所涉及的知识时,再度量哪些是我所需要必须学习的(重点),哪些是现在不急着掌握的可以以后学习;7 _6 Z6 }- P" g# J  {; q  @
8 F& m( V( h- S' i
简而言之:去我所需,为我所用;0 |3 D# F) D0 V. A1 S7 A7 _
1 `, [4 [( q1 n% q. V
3.理论归理论,掌握理论知识的基础上,加以应用,能更深刻的理解这些知识点;
& e" u6 X8 M, [: ]2 }
: G0 M  @  z5 _; }5 S简而言之:实践出真知;
/ ^" T4 u% O. Q) f: H8 R( |
. O1 N7 m8 A- t. o  w
3 Z5 B. l) q# }) e/ J2 @* _! S+ |) b0 N+ R/ S8 v
第一讲:& y( e' @9 t( |- y/ o# |
3 \9 k; W  w* Z; z1 w# j5 t
             STM32是Cortex-M3系列之一,而Cortex-M3处理器采用的是ARMv7-M架构。  l& r- `" ^5 _: R' {7 C+ I
; G9 q0 k4 E! e7 k, h
系统架构:% B% j  e1 C% z
: _# i2 e9 y; x+ X* o
1344167718_2961.jpg 6 h( G" L' [6 ?  g6 s

( O. v0 @/ V  S- ~希望大家关注AHB总线,这是贯穿所有外设的一条总线,上图可知:AHB经过桥接,由APB1、APB2控制着几乎所有外设;; j' `4 M- b/ s8 A1 m1 M3 `' s

; R* ~# L: _& C8 w
, R; n' f4 D" E, x2 o) @希望大家关注AHB总线,这是贯穿所有外设的一条总线,上图可知:AHB经过桥接,由APB1、APB2控制着几乎所有外设;* G9 i5 Q9 d3 R' m" n) W' u
# C" g  Q6 D5 E, B
&&    APB2属于高速设备; (控制着如:ADC、GPIO、EXIT、TIM1等外设)9 _0 y- z: s1 a! y& b- \5 ~

& h; ?! r& S- j3 q6 ?9 Y$ x&&     APB1属于低速设备; (控制着如:DAC、TIMx、USART、I2C等外设)
& Z" e7 l3 v# D& L; _! ~: R3 O: ^) G
: r2 Y/ t" j% k  H- X
( \; h( t. K+ M+ `$ W1 e  [) K4 M7 N) e
固件库函数:
1 n( b+ \2 _* }8 o2 w, {  _* d" @5 _
% N- X4 z. A. x7 uSTM32有两种软件开发方式:用库和不用库;
$ Z( B8 [, h1 C' |7 I7 k: T% ?( _1 J+ O7 D) |1 k5 ^
                       我们开讲一下用库开发:, K! _1 Y* N" I% ^; {, E6 S7 S* ^
& s" u: ?0 a0 X; K
                       固件库函数:该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了为控制器所有的外设性能特征。该函数还包括每个外设驱动描述和应用实例。/ {" k2 T  j1 b9 C0 J

" @, s9 |8 Q* ~9 R: t" ^通过使用固件函数库,无需深入掌握细节,用户也可以轻松包括每一个外设。因此,固件库大大减少了用户编程的时间,降低开发成本;+ V8 K" X5 z7 a: W
# y& t2 y& w: [, Q5 p* H9 h- k
                        每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能,每个器件的开发都由一个通用的API(application  programming  interface应用编程接口)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化;
8 ]4 g& g* C7 W2 }2 v! O0 H) r" Y6 U+ H/ F$ i5 R. F; o5 Q; C: @7 w$ K
                        用库函数开发的优点:  1. 固件库大大减少了用户编程的时间,降低开发成本;
' @' e) ~+ `7 {8 s) ~/ I7 t  h: E  b/ x6 [' K, r
                                                                   2.对初学者容易上手,无需深入掌握细节,也可以轻松包括每一个外设。
1 ~( f- I& k6 V4 J6 ?/ M; K$ @4 A
8 t. X8 d$ U  m" u/ {                                                       缺点:(1)没有深入系统架构,寄存器的控制的掌握和理解;* d& w4 o% H# d

9 `6 s4 @8 X/ g9 T# q                                                                    (2)编译效率低,速度慢;' h& X' V$ u  C7 M7 x
6 n5 z  h9 V: [3 M3 [
                        不用库开发的优缺点:反之;
2 V  U4 r$ B. ?; e8 c4 e; f5 E! a" G  j3 v' i( R  j
函数库一般放在FWlib目录下的inc文件夹内:如图+ N0 u, F. i, R/ ~0 t8 {. U

  t6 A- p4 B& p2 v 1344172329_9847.jpg
: H0 ]1 o0 q0 C' m5 ?
6 E0 a6 ^: v& u3 S  n0 R  {( U) u3 ?0 C
用库入门,用寄存器提高:+ A5 @1 F, U3 v: r# y7 X

0 [8 ~) D4 w8 h; W" s% C下面是库文件的结构图:, M; B  y+ i- ~2 \

2 N& P1 s# t3 S 1344172502_3123.jpg 6 K2 w& Z3 `7 i) w0 h  V
1 Z$ T. l# B5 S& K
根据这张图课家里自己的工程;; N- G) O3 d5 h# r/ m1 X
: e8 E( e3 A( N4 L6 A
应用层软件是依赖于第二层的定义和第三层相关库函数文件完成的;如果你不想用库,你可以利用stm32f10x.h中寄存器和结构体的定义直接对寄存器操作。而用库开发则是依靠第三层已经定义好的一些函数直接进行函数调用。下面将会解释几个关键头文件。
+ }9 M6 t/ J3 x! W( ?2 W4 q- E* Q$ l, y! B
stmf10x.h  :  定义了芯片类型及外设,并引入了另外三个头文件/ I: z9 B. l) ]* ]0 x# K' s

  J7 G8 W/ o  W                           #  include   “core_cm3.h”       //arm公司为了标准化M3内核的一些声明& R5 H8 G3 x7 h2 L* y0 Y

  C! k, `) u8 y9 {! m- D                            #  include   “system_stm32f10x.h”          //系统时钟APB1、APB2时钟的一些外部声明     $ ?3 D2 y! }& D  M0 q* `
7 D' d8 W. J6 n* T
                            #  include   <stdint.h>                //编译器及内部参量类型定义      3 @% A6 n) O0 g; x* X& u
/ [7 r6 U8 S) m6 |$ G2 T8 I% B
上图中stm32f10x_it.c是专门存放中断函数的。- O! ^7 ]7 Z1 v9 n( n. g; o
) @0 D% C" A' @1 O: A& `
在引入头文件过后,定义了一些变量类型,和外设相关的结构体、外设常量。
$ g* D: v. a: d0 ^& Q1 o. x/ S, n
做好这些文件衔接的工程中还需要一个启动文件,虽然说开发时不需要你去了解,因为早已有人先写好了,但是希望有兴趣的可以去了解启动过程下是如何运作的。
( a6 C& s0 w1 `/ r" \$ m/ L
* C/ D, t) s; d+ ^7 w* Z* g 1344174119_1056.jpg
2 \1 e! C, h# u/ G2 b+ p9 K" w. H% j
一下按照对软件结构的理解,建立的一套工程模板。原因是如果使用库,那么建立工程时会很繁琐,如果有了一套适宜自己的模板,那么开发起来会很顺手。
& D+ Z& u) I2 \' s' }8 @7 p; f7 w+ l9 {! u2 u
1344174275_6177.jpg ) P8 `1 K+ [) n5 m4 q
8 {3 w; ]& M/ N4 M4 u
另外需要知道的缩略词,如图:6 ^% M  {" A1 m$ b. ]
, z6 \/ r6 D7 I5 @6 Z, H( Z+ g9 {
1344174405_9874.jpg % N0 G# z9 n+ d. [4 w  g
( m9 }1 ?" q% s) @- N0 F3 r
希望自己理解建立一个工程模板;这样才是有所用,否则看这篇文章也是浪费时间;
; L1 O+ W5 I& G/ P* u) f1 g1 `5 I$ V. G7 F9 W
0 Y5 D4 @5 C- F* c: t  N$ E
赞 收藏 评论0 发布时间:2022-5-24 10:06

举报

0个回答

所属标签

相似技术帖

官网相关资源

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