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

从51到stm32

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
当初我是如何从51单片机过度到STM32的,希望有同样烦恼的认真看完,绝对能让你受益匪浅。, [; n3 k5 C& L, g

& `# l# f5 W8 U- r! z4 t: N  k我第一份工作是做单片机软件工程师,当时也没什么项目经验,老大自然也不会给我参与什么新项目开发。
0 L0 N+ \6 Z' i) _/ n5 b( i7 L
9 C( L' r( J3 `" ?9 H: O我每天的工作就是维护公司老产品,改改代码,给定制化的客户升级下功能。
6 b2 U1 l) f- W5 l9 \9 }0 f9 R, R8 ^/ G9 R
改代码是一件非常痛苦的事,比自己重新写还痛苦,因为要去理解别的工程师的思维。3 Z2 ]1 y" f  \8 d+ u: n

1 w& K2 w+ m+ u1 A2 k4 z, f3 F, |不过,这是一个工程师必备的技能,现在回想这几年,成长最快的时候就是看那些大佬写的代码,闭门造车,只会让你成为井底之蛙。( K, ]: I) R2 u8 r' G
8 e" ^6 u" \& A- j
公司的产品大多数都是用stc 51单片机做的,还有就是NXP的ARM7单片机。# U% r9 K- C" G6 f$ V

3 r) P9 H- R1 H# f刚从51单片机过渡到ARM7的时候,那段时间确实掉头发更严重了,太特么烧脑了。
! g1 q: G6 h! H3 p$ @
6 j6 J! l* S2 ^. @! Z) g还好,开发模式基本跟51单片机相同,都是通过配置寄存器使用,只不过寄存器要复杂也多很多,我记得当时用的好像是lpc2103。/ H2 H6 O7 Z0 h7 U9 Q4 G1 i2 A
# k( S+ [4 B2 T( E! j
还好只是改代码,如果让我看数据手册去配置寄存器,估计我也做不出来。
2 d5 m  o3 ^+ ?$ P) C0 b7 p
; z2 h1 a! |4 a6 U: n: r大概做了3,4个月,我基本上上手了,原来改个功能要半个月,现在改个功能只需要1周左右。% [* g) I, R2 r' H6 j; G4 a0 p* D
: {3 t3 y4 ?" ~8 p3 H
那个时候就有点飘了,单片机开发也不过如此。, e6 [$ E) j1 q# `. w
3 [/ \  D. ~1 G' W
后来,跟同事相处多了,也熟了,有个同事介绍了一个外单问要不要一起做。' @4 A! @. U- e0 r& y2 [( u2 O  z

# Y3 C2 E$ o( n当时,我想跟着这些老油条做,即便不挣钱积累点经验也好就答应了。
; Z6 P( Q9 x8 S; G+ Z
8 C5 `$ e, K$ O0 N- s7 `整个项目需要用到2个单片机,一个51单片机做屏显示,一个做主控,主控这边需要一个类似于ARM7这种资源丰富点的单片机。+ C5 P& C) R" R1 }% C+ `- Z# W
, g+ o. l3 ?& W% T* F4 H/ N& O
这个项目我非常积极,主动要求做工作量最大的主控程序,然后钱平分,同事听到连忙点头叫好。
+ t  M( m* G: E7 U1 q) r" [$ L1 b/ l2 x
硬件选型是他选的,他推荐我们用STM32的单片机,开发起来挺爽,我也不懂,完全听他安排,反正这个项目我完全冲着学东西去的,哪怕是自己亏点钱。+ K) g/ b( s/ ]

6 F1 W/ t$ C) Q9 u- `; G在同事设计电路的时候,我就同步开始研究STM32单片机,最好等硬件回来就能开始调试功能。' o9 d, U: @$ C- o) [7 Z# q

2 E  k+ o4 m6 F5 ], `下图是我最终写好的代码,所有功能代码都写在main函数里,没用单独函数单元,现在看着真的是太渣了。- Y( g/ h/ B$ ~' X) R2 g. q

* f0 ~! n1 B2 U* m  C, N' z$ q* k0 `4 U6 h' f. Z1 y) F
学习一款新单片机最好的方式就是买一个开发板,所以我自掏腰包买了一个开发板。  s+ _6 H2 |8 h  F

$ K- O- `% ?; H# a那个时候开发板还没现在这么完善,只有每个外设使用的例程,没有配套视频教程。6 W" w7 g' R$ \7 B/ ~( o

4 b+ ]) Z' }! E) _. _# Z开发板拿到以后,我就开始从最简单的GPIO开始学习。
0 |2 H* y/ \+ t  S4 T7 i+ I4 V8 I# r/ t% H9 E" n
但…当我打开GPIO工程的那一刻,我懵逼了…这是什么鬼?用一个IO口怎么都这么复杂?: a% `1 ~  s3 f# p" ?  {0 T  ^

6 a" v; E; b5 X到处都是结构体,指针,回调函数。
) R9 `+ I4 ^' f8 X7 I6 a
8 z; f! i8 d7 {1 Q! e. U- Q8 HSTM32和51单片机代码架构不一样,虽然底层都是配置寄存器去使用单片机外设,但STM32不用我们自己配置寄存器,而是调用官方固件库直接打开。1 D5 Q4 }$ }' C$ n1 B2 `1 W/ k# l

) p6 d4 y  b7 u3 B+ J0 T6 ]所以,原本是学STM32单片机的,最后变成了学固件库,学会固件库你就学会了STM32。( f* q" I6 Y. t+ N1 s/ V# r* J

3 s4 W) p# @; I, h/ s- J但是想要学固件库,需要你有一定的代码理解能力和水平的基础铺垫,比如说你要熟悉指针、结构体、枚举。
- F" G5 @' Z$ N4 Q# s
9 f% l4 T  P' m* P* L很多人心急,一在开发板上学完51单片机,马上就开始学STM32,连项目都不做一个,有些甚至直接学STM32。3 E  x9 @$ i/ O5 d; w* l, w
! l1 h* ~) b( ]. \  A& D
导致在学习STM32的时候举步艰难,每学一步都碰到各种问题无法解决。1 Y) d4 X, s) z( p

7 `# a# H( P8 N( i/ l. S, h这也是为什么我们无际单片机编程要求学员先学51单片机,再做一个项目,做完再学STM32的原因。: ~% n$ S% T& P# G( y' }2 i

1 N( w4 Z  t% o6 H6 z2 F学习这个就像我们玩游戏一样,先升级搞装备,再挑战boss。
' u1 t# R) i7 \
6 W  t1 g9 \  v* r& |我在学习STM32之前已经接触过几个项目,所以至少保证了固件库代码都能看得懂。  n, b8 r0 [. E, B+ r: j' q
5 c" j' s- W0 I6 Y
我一边改开发板的例程,一边在开发板上做实验。# ]$ u& T9 i2 ?# F: l1 T
2 g$ ~& C" t* R9 n/ d9 p
我会举一反三去做实验,比如说开发板是配置PA0,那我会改成PB0、PC0试试。
$ k% j; u1 l# Q8 r$ U0 Y8 e$ _* P" ]* d: ~$ \; L( @
其他外设同理,开发板开启定时器1,那我会改成定时器2。1 K1 v! Q# s" Z1 t! s8 H8 A# O/ G

! S$ b) \' i. x我只研究我这个项目用到的外设,GPIO、定时器、串口、NVIC、DMA、RTC、ADC。
: r. o) V9 C. l( ~  A8 ?$ O9 r; D( E
+ A0 C2 z. Z* r0 x- s
其它没用到的我看都不去看。
/ @. F+ N. ]) D# J9 `! N4 y  j# ?& F
大概花了半个多月的时间,我就把这些外设用起来了,用熟了以后感觉太爽了,比51单片机和LPC爽多了。
5 G) q5 Y% e) O  Y! d
0 C9 C" r$ S) ^1 k3 \, j; L用熟固件库,甚至连数据手册都不用看就能把外设用起来,更别说看寄存器了。; ~: _/ v" l  |$ Y  x
" x5 [/ G% |. `5 u5 E8 @
项目时间也紧,没时间给我去研究。
8 @0 @9 v& W& J4 u/ d
9 d' O/ |; _0 f& r" Q时隔多年回想起这件事,我都感觉误打误撞走了捷径,我很庆幸当初没深入去研究寄存器,没深入去看数据手册,不然走的弯路能绕地球一周。9 q, m# W* I, c

4 }! i" u5 {) g- j) Z3 o% V因为看了也是白看,根本看不懂,还会打击自己自信,有现成代码为啥不用?( I" R) Z! X; C& E
$ c5 n# ?+ O) ]7 T# I% r4 Y3 t; s+ g
STM32单片机外设用起来以后,后面基本上就没怎么研究过单片机内部的东西了,剩下的时间基本就是完成产品的功能。
6 v9 g" ~5 E; Q" H5 E, p, S2 U) D* i
所以,学习STM32最好的方法就是通过项目去学习。! S5 ^+ {. t2 T2 j3 `) e6 i

) ^+ R* l$ X5 E9 d7 S  Q等你做开发几年以后,相信你也会明白,虽然我们从事单片机程序开发,但真正的核心不是单片机,而是你的编程水平和思维。* |, w, q: {- l* s% Y  ^

, g7 D4 R8 N! A" e9 T0 s( C9 T当你连自己写代码实现功能都困难的时候,先不要去想如何把代码写的更好,而是先实现。
. s1 s- R* k; A9 P# A& C1 a7 S0 _: q# J* N. S
等你实现了以后,再想代码怎么能写得执行效率更高、可移植性、可扩展性更好?
- S( ~( M, y% u9 A1 @3 e% y
+ v# A. }& U4 B3 v2 D执行效率讲求的算法,可移植性和可扩展性讲求的是程序架构。
4 q. v  N1 ~9 f' g. O7 m+ _
* @0 V" h1 X! w5 A这块,没经历过几个中大型项目的锤炼是很难领悟的。
: c. X- L% r$ J8 b! [9 e4 I0 G0 R& P
程序架构这块,我在19年录制了一套比较系统的教程,目前看来可能是实用性比较强的。
! p/ ^5 G4 T6 q0 J
/ U: R: ]2 o4 {" _. l; x- E1 e0 O% D2 f6 }& z/ I
教程讲了指针、结构体、回调函数、任务管理、队列这些高级的应用。( }' x' L. [0 Y" ^
4 R0 _* x8 `: k, v1 `- D1 U
也可以直接套在自己产品上,至少能提高30%的开发效率。
$ x/ R# v: G7 `7 W
( W% T7 ?4 I  c# Q教程都是开源的,不用花1分钱。0 @/ J% w. E7 {8 E# p
$ _2 g2 H7 j; T4 |$ u4 X- K$ i# V9 p
最后总结:
( n. r/ d# \/ k! }, r: y/ v
: }+ W7 a1 r) l( E    学习STM32最快的方式就是通过项目去学习。
/ j) r: w' v4 N( T! t4 X    不用每个外设都学,只需要学常用的外设,剩下项目用到再去学。: r6 N9 h3 _( ]; s& V$ V% \3 f
    把STM32当作一个工具使用,外设会用就行。! c& Z- D/ L+ e: G, J! f

! d' t' o9 z' T' u% G* u! g! k% V4 R: z

该用户从未签到

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

该用户从未签到

2#
发表于 2022-5-17 14:24 | 只看该作者
多向大佬学习,不能闭门造车,让自己变成井底之蛙( P9 S- V( s- W$ _, z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 05:36 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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