找回密码
 注册
关于网站域名变更的通知
查看: 268|回复: 2
打印 上一主题 下一主题

从51到stm32

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-5-17 10:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
当初我是如何从51单片机过度到STM32的,希望有同样烦恼的认真看完,绝对能让你受益匪浅。
) v# G6 Z( j; n$ r' z
9 k' B" h: W8 p3 C9 L我第一份工作是做单片机软件工程师,当时也没什么项目经验,老大自然也不会给我参与什么新项目开发。: X  ~3 @7 R  `/ E% L+ d* N

" G( @/ j, W5 l我每天的工作就是维护公司老产品,改改代码,给定制化的客户升级下功能。' v3 g/ ?5 R. y( A% G: C0 I7 B% G( Z

6 P- x5 ?" w! T1 e. ]4 c! S改代码是一件非常痛苦的事,比自己重新写还痛苦,因为要去理解别的工程师的思维。
4 y6 }% J- v6 b1 R6 C+ T7 z. x* U, K) z% ^
不过,这是一个工程师必备的技能,现在回想这几年,成长最快的时候就是看那些大佬写的代码,闭门造车,只会让你成为井底之蛙。6 t7 f' L! b. Z& a3 n7 N
0 R  {3 J. n- F0 G4 ?
公司的产品大多数都是用stc 51单片机做的,还有就是NXP的ARM7单片机。
. W( `) p* Z/ D; k$ `6 v# a- v3 T* h2 p$ S% e
刚从51单片机过渡到ARM7的时候,那段时间确实掉头发更严重了,太特么烧脑了。; S" h+ ~7 k2 p; K$ W( ]

8 Y) R' D5 k- B还好,开发模式基本跟51单片机相同,都是通过配置寄存器使用,只不过寄存器要复杂也多很多,我记得当时用的好像是lpc2103。7 |) j( s9 k$ Q
/ M5 q3 J; ]( e9 u0 Y5 S0 I: Z
还好只是改代码,如果让我看数据手册去配置寄存器,估计我也做不出来。; ~7 K# B7 P0 I- `; f, ?4 T

- q& h9 ]3 N0 C$ b& {, g大概做了3,4个月,我基本上上手了,原来改个功能要半个月,现在改个功能只需要1周左右。3 E* y6 O9 S! m' c& k2 Y7 I1 k, g, p

$ G" H% m. j( {4 s  A. H- W那个时候就有点飘了,单片机开发也不过如此。/ t8 p9 F" {* ]1 ^$ T9 \
3 V/ c. m+ Y% h- v) r
后来,跟同事相处多了,也熟了,有个同事介绍了一个外单问要不要一起做。
# D, [4 {' t$ ?3 N
: b8 ^5 ~+ g0 X" j, C: p当时,我想跟着这些老油条做,即便不挣钱积累点经验也好就答应了。
" N; J9 E6 W. P2 C5 `# |6 X' o" h. S$ k2 M. n- j$ w0 `
整个项目需要用到2个单片机,一个51单片机做屏显示,一个做主控,主控这边需要一个类似于ARM7这种资源丰富点的单片机。7 \$ }* p9 P# t/ |
7 n6 G6 T0 \4 m% Q9 ]! E* e6 z
这个项目我非常积极,主动要求做工作量最大的主控程序,然后钱平分,同事听到连忙点头叫好。
' Y$ h5 @7 z1 R& c0 i+ ]% ]* y% B/ o# U% }+ t
硬件选型是他选的,他推荐我们用STM32的单片机,开发起来挺爽,我也不懂,完全听他安排,反正这个项目我完全冲着学东西去的,哪怕是自己亏点钱。! A  b9 m# u5 }( y: I

: p7 N8 O5 d, X7 y- f# o" M' @在同事设计电路的时候,我就同步开始研究STM32单片机,最好等硬件回来就能开始调试功能。( f; l* j: U0 a% u& V
4 ^4 ^9 E7 X* S/ W0 C: a
下图是我最终写好的代码,所有功能代码都写在main函数里,没用单独函数单元,现在看着真的是太渣了。
9 A! I! [- _7 D- V( W: G; j
- Q+ U/ a, Z0 ]+ {, z# y
! s+ m% f; x" Y7 U0 P% g学习一款新单片机最好的方式就是买一个开发板,所以我自掏腰包买了一个开发板。, Y$ x! T9 V( r/ {7 b# ~4 a

' p5 P/ [; ?; A/ d$ q1 ?那个时候开发板还没现在这么完善,只有每个外设使用的例程,没有配套视频教程。# ~8 d) J! b# L2 M0 m2 O
! }! x6 N8 a% _. d7 F/ o
开发板拿到以后,我就开始从最简单的GPIO开始学习。; B1 Z' Y# v4 z6 ?2 A

' [/ G, Q+ n' e. N' g3 K% h1 R3 G: i但…当我打开GPIO工程的那一刻,我懵逼了…这是什么鬼?用一个IO口怎么都这么复杂?) E8 A+ a& N4 [4 T) w1 g3 O
* j2 n+ I, C- f1 I9 \
到处都是结构体,指针,回调函数。( ]: ^0 b8 _% j9 Z; n

. _0 H" {2 q8 @% ySTM32和51单片机代码架构不一样,虽然底层都是配置寄存器去使用单片机外设,但STM32不用我们自己配置寄存器,而是调用官方固件库直接打开。7 _9 u) I; u1 w; t) r
2 l: m; y3 `2 g0 _  q: H
所以,原本是学STM32单片机的,最后变成了学固件库,学会固件库你就学会了STM32。0 C/ f$ w% j4 F3 ^0 ?

' i) y9 F' c) L6 D但是想要学固件库,需要你有一定的代码理解能力和水平的基础铺垫,比如说你要熟悉指针、结构体、枚举。+ ?, n- c) j1 h7 V; ]

, K  J& z% _" X  h! i- A, C4 Y/ ?  Z很多人心急,一在开发板上学完51单片机,马上就开始学STM32,连项目都不做一个,有些甚至直接学STM32。: J+ C) b1 C2 `* a2 N3 D  K

+ M' m* w- ]( Y. ^/ n4 _; e4 }8 W/ o导致在学习STM32的时候举步艰难,每学一步都碰到各种问题无法解决。
: b2 |. L" j# H) M2 ]6 L1 a
7 P, E- K: T- }这也是为什么我们无际单片机编程要求学员先学51单片机,再做一个项目,做完再学STM32的原因。* A( K% D6 _6 A+ C& L6 O
  {* s3 @& J# f
学习这个就像我们玩游戏一样,先升级搞装备,再挑战boss。# R0 C3 q/ {% H. t
% ]% f! j* {& j. V: m. y/ Y& i1 e
我在学习STM32之前已经接触过几个项目,所以至少保证了固件库代码都能看得懂。
1 f" Z/ z& r& H$ `5 w; }6 G) t5 d) }: m  V2 w& ?. Z# H6 `
我一边改开发板的例程,一边在开发板上做实验。6 V4 Q5 Y1 m+ H& o
  _. |+ f# c( R6 z: ]! a
我会举一反三去做实验,比如说开发板是配置PA0,那我会改成PB0、PC0试试。# |! R8 o6 H7 x6 x: j8 s$ O3 r

+ {! ^, l& X5 O其他外设同理,开发板开启定时器1,那我会改成定时器2。; k- J0 N0 X' x- G
6 |* l" C+ |; U. d/ F/ J4 F: g
我只研究我这个项目用到的外设,GPIO、定时器、串口、NVIC、DMA、RTC、ADC。
. g% a, {; @; b7 N
8 M% ?/ x8 r+ ]( r4 u
其它没用到的我看都不去看。
2 }/ U/ }3 z+ ^# z/ f" J
. U. b! V  r& L* Q大概花了半个多月的时间,我就把这些外设用起来了,用熟了以后感觉太爽了,比51单片机和LPC爽多了。
5 ]. d8 ~5 C& R  F) I& C$ [3 N7 \  G) S7 a9 \& v6 T
用熟固件库,甚至连数据手册都不用看就能把外设用起来,更别说看寄存器了。
, g( u- J8 P; u% F. m* g. {, Y4 I* Q# G  m8 U/ ?
项目时间也紧,没时间给我去研究。
3 T2 p7 m# h) t9 W9 x# N: }5 G1 h8 [  x0 o
时隔多年回想起这件事,我都感觉误打误撞走了捷径,我很庆幸当初没深入去研究寄存器,没深入去看数据手册,不然走的弯路能绕地球一周。
6 A$ m; Z, T  y' q" h6 n2 W0 \6 G9 b; s7 E" Z5 `1 Q: l7 z% O
因为看了也是白看,根本看不懂,还会打击自己自信,有现成代码为啥不用?
5 O! h' b( v1 |" _. U/ a2 f! d% p, F% d$ ?& b8 \3 M& @
STM32单片机外设用起来以后,后面基本上就没怎么研究过单片机内部的东西了,剩下的时间基本就是完成产品的功能。
4 ]. d1 T( i8 G2 X7 L. {! F* ?; j
9 M# \2 S9 _# N+ S& }所以,学习STM32最好的方法就是通过项目去学习。
3 i) ~2 C. j- l% p

9 _% w4 {9 x5 o: g6 |7 [* k& p* r8 O等你做开发几年以后,相信你也会明白,虽然我们从事单片机程序开发,但真正的核心不是单片机,而是你的编程水平和思维。6 c  J' f5 n) i9 e# t5 m
! A# v4 v: a; }$ f, s$ \/ A& u. k
当你连自己写代码实现功能都困难的时候,先不要去想如何把代码写的更好,而是先实现。
# I$ `- `0 ~: ?2 s4 A1 ~1 D& U3 h/ Q5 `) b& `) H
等你实现了以后,再想代码怎么能写得执行效率更高、可移植性、可扩展性更好?
& A9 r. g( S- ~/ \
9 Z5 e$ h+ U8 q& P; [* V执行效率讲求的算法,可移植性和可扩展性讲求的是程序架构。
( M+ C  Z1 w  |! ~# Z& W: ~3 ~' L& i5 D9 G* C
这块,没经历过几个中大型项目的锤炼是很难领悟的。
. X3 ?  }. \( ~- }" j
$ h: L3 ~) T; z/ X) t程序架构这块,我在19年录制了一套比较系统的教程,目前看来可能是实用性比较强的。
0 Y' F( l( l1 Y
- S) ], a5 A! {- L- I4 A' I% g  @" W1 G4 [. v. \, U
教程讲了指针、结构体、回调函数、任务管理、队列这些高级的应用。/ L2 ]9 n, ~0 s; J
# X- q# e! i* \* Z7 c( X1 [0 {" C
也可以直接套在自己产品上,至少能提高30%的开发效率。' F6 w' o1 |+ `2 H2 |& d) I

; a9 e; r7 P' x" i% y教程都是开源的,不用花1分钱。& U0 b1 D, C- F( v
! p0 N& x* _1 J; m1 T+ `
最后总结:
3 [, h) W+ A7 K. o6 D6 w$ w) s- h% ]* X" r
    学习STM32最快的方式就是通过项目去学习。
; i9 X/ _% L) p) B  y    不用每个外设都学,只需要学常用的外设,剩下项目用到再去学。
2 x8 i  i/ E3 E+ g1 X+ X    把STM32当作一个工具使用,外设会用就行。
$ [' J; V; b( t" \% [! l& }6 L- Y1 V4 d/ X. A

  U5 D: o) g! y

该用户从未签到

推荐
发表于 2022-5-18 09:18 | 只看该作者
有针对性的学习,速度是最快的。

该用户从未签到

2#
发表于 2022-5-17 14:24 | 只看该作者
多向大佬学习,不能闭门造车,让自己变成井底之蛙
" j0 W/ E$ A! K% i7 B" G3 H% ]. T
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-29 16:33 , Processed in 0.078125 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表