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

从51到stm32

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
当初我是如何从51单片机过度到STM32的,希望有同样烦恼的认真看完,绝对能让你受益匪浅。
4 Z- [$ u0 Y) R2 c& f
: u1 [4 r- D! |9 X. n7 @& [* ?我第一份工作是做单片机软件工程师,当时也没什么项目经验,老大自然也不会给我参与什么新项目开发。$ S% L0 V$ ~$ R; ^2 V$ j

# Y! D! o0 f: @9 I我每天的工作就是维护公司老产品,改改代码,给定制化的客户升级下功能。
3 T; v& ^5 b- P( j: @9 a! Y6 Y( x  ?5 n
改代码是一件非常痛苦的事,比自己重新写还痛苦,因为要去理解别的工程师的思维。6 K) I  k/ G! b+ D7 v5 D0 {* j8 B5 C
4 ^: c! W, ^8 D% \
不过,这是一个工程师必备的技能,现在回想这几年,成长最快的时候就是看那些大佬写的代码,闭门造车,只会让你成为井底之蛙。
0 @! D4 U5 v/ v! _, r0 P1 _+ T
1 D- x- Q: R5 {8 H/ g( a- ]5 c" v8 B公司的产品大多数都是用stc 51单片机做的,还有就是NXP的ARM7单片机。/ L6 W& b/ P  ^0 s$ I! x

" b0 h3 I$ S& w% T0 r* Y刚从51单片机过渡到ARM7的时候,那段时间确实掉头发更严重了,太特么烧脑了。
2 k% D# p7 m1 U& n6 ~# g: c2 ~% L9 C5 G/ a- M1 H
还好,开发模式基本跟51单片机相同,都是通过配置寄存器使用,只不过寄存器要复杂也多很多,我记得当时用的好像是lpc2103。' V* e. y6 D$ U: A
3 S, y9 o1 N8 f; ?
还好只是改代码,如果让我看数据手册去配置寄存器,估计我也做不出来。
( [2 l! e# R& R
0 t4 f9 O% K7 h7 b1 w' f6 l9 i( B大概做了3,4个月,我基本上上手了,原来改个功能要半个月,现在改个功能只需要1周左右。9 R, Y) ~% F( @& l0 X1 K6 v
. ^* k1 {" b7 s
那个时候就有点飘了,单片机开发也不过如此。1 G" j& Z  z* c
, L" F1 Y# L' i3 j- t3 m$ z& Y
后来,跟同事相处多了,也熟了,有个同事介绍了一个外单问要不要一起做。
) ~: w  T! M( z( E" N! j
+ G2 U5 L! {- n0 s/ ~2 b$ ~, F当时,我想跟着这些老油条做,即便不挣钱积累点经验也好就答应了。* I3 o5 g, f  t& K
+ U. R- n3 p; ^
整个项目需要用到2个单片机,一个51单片机做屏显示,一个做主控,主控这边需要一个类似于ARM7这种资源丰富点的单片机。
6 W3 C4 p# Y. Z# h+ v1 K7 Z
( b! d9 R) Z* u9 Y" |  q( l这个项目我非常积极,主动要求做工作量最大的主控程序,然后钱平分,同事听到连忙点头叫好。2 g, t$ Z! X. r5 R& |/ Q
# P) C0 P. U+ ~$ u4 J+ ?9 H
硬件选型是他选的,他推荐我们用STM32的单片机,开发起来挺爽,我也不懂,完全听他安排,反正这个项目我完全冲着学东西去的,哪怕是自己亏点钱。. j  H/ T/ s5 t- J' Q. @

# Q/ e' b3 X( d4 Q在同事设计电路的时候,我就同步开始研究STM32单片机,最好等硬件回来就能开始调试功能。
7 p/ j/ K9 K8 B2 g; D( I$ B. o: e9 s/ J! ]2 U
下图是我最终写好的代码,所有功能代码都写在main函数里,没用单独函数单元,现在看着真的是太渣了。$ `- {9 P* O% I8 g3 _+ H

; [0 f* L& I/ @/ J2 y4 A/ P9 p
  Q% M* f0 m: @/ ]. j+ V学习一款新单片机最好的方式就是买一个开发板,所以我自掏腰包买了一个开发板。# J2 {# P- R: R
& t/ w8 u& |' w6 g" a! ^! x3 Z" K& V7 X
那个时候开发板还没现在这么完善,只有每个外设使用的例程,没有配套视频教程。
8 d# h# P8 V! a% a( v
. V) Y# d! M; m" |. }. x4 \, a( L开发板拿到以后,我就开始从最简单的GPIO开始学习。' n; t: a, j6 w8 y9 m# U
- N  s4 C, a% X) C0 k  l2 }
但…当我打开GPIO工程的那一刻,我懵逼了…这是什么鬼?用一个IO口怎么都这么复杂?! y/ J/ P4 A* f, J
4 a7 M6 Z& ?" Y
到处都是结构体,指针,回调函数。: ~2 ~- w( H; k1 C+ _5 H; `
1 d2 c( h4 o+ M. k* i1 M8 Y
STM32和51单片机代码架构不一样,虽然底层都是配置寄存器去使用单片机外设,但STM32不用我们自己配置寄存器,而是调用官方固件库直接打开。
0 @9 D4 b4 r3 t* U! @1 R
( h8 L/ [6 q) _0 {  V所以,原本是学STM32单片机的,最后变成了学固件库,学会固件库你就学会了STM32。
5 q2 H' U' T+ G* @/ g& _7 X$ i9 g% W3 v* ]
但是想要学固件库,需要你有一定的代码理解能力和水平的基础铺垫,比如说你要熟悉指针、结构体、枚举。
7 R% D1 A; X/ ?* `
) T# l2 b. v3 \很多人心急,一在开发板上学完51单片机,马上就开始学STM32,连项目都不做一个,有些甚至直接学STM32。
7 I1 W  Y  b" b+ i& B, j: _! L+ @$ F9 |5 F! s5 ~) B9 Y  }
导致在学习STM32的时候举步艰难,每学一步都碰到各种问题无法解决。' X. c+ w2 Z9 c$ ~- c
0 \# s, O8 v# k0 r6 n
这也是为什么我们无际单片机编程要求学员先学51单片机,再做一个项目,做完再学STM32的原因。
: G: B/ E9 a# R1 I6 b  j2 g7 R/ Q, w4 H3 n7 w  i# L! _
学习这个就像我们玩游戏一样,先升级搞装备,再挑战boss。2 O; Q6 g, v! M

+ m# D: \3 j$ v# Y$ C. ^' w我在学习STM32之前已经接触过几个项目,所以至少保证了固件库代码都能看得懂。# h7 z" c8 I' F/ s/ S/ Q8 J
, l, k! b- K4 b) |0 Q6 ~6 C) r! W  L
我一边改开发板的例程,一边在开发板上做实验。
3 V! p* b0 v0 H+ }# M( C6 O( u2 a3 s
我会举一反三去做实验,比如说开发板是配置PA0,那我会改成PB0、PC0试试。
. T" i  C0 m1 x* O4 Z( ^  L$ o; Q" n
其他外设同理,开发板开启定时器1,那我会改成定时器2。( Q4 S) C* y3 G4 @5 F) g

5 M" s- Y* o* B* f我只研究我这个项目用到的外设,GPIO、定时器、串口、NVIC、DMA、RTC、ADC。

& ], W) o+ v6 n6 C9 }, {
  n0 m* j) c& t7 s其它没用到的我看都不去看。
( A7 D. u# r3 \2 N2 Y0 J, j: p. z9 e& F. a( [- w8 m
大概花了半个多月的时间,我就把这些外设用起来了,用熟了以后感觉太爽了,比51单片机和LPC爽多了。7 U9 j9 p, c# |

8 i: ]1 R/ I4 ]' D( K& D/ R用熟固件库,甚至连数据手册都不用看就能把外设用起来,更别说看寄存器了。
( J$ V! Z+ G& _8 q! O4 }
3 B7 B2 }# b% ]; V项目时间也紧,没时间给我去研究。; W3 p: h4 h- E3 L% o/ n" s
7 q0 k/ ^: K2 f0 t/ @4 U. s) m1 u* ]
时隔多年回想起这件事,我都感觉误打误撞走了捷径,我很庆幸当初没深入去研究寄存器,没深入去看数据手册,不然走的弯路能绕地球一周。& W- k7 J& f5 M. r+ r

6 Z4 I! q! L* K0 Z7 @8 H& B因为看了也是白看,根本看不懂,还会打击自己自信,有现成代码为啥不用?
" d% t, G) E9 L6 L+ f
' `! ~  e9 z8 hSTM32单片机外设用起来以后,后面基本上就没怎么研究过单片机内部的东西了,剩下的时间基本就是完成产品的功能。. ~# M3 G) C! [( C

. v& O# ]' b/ h) }3 D* o所以,学习STM32最好的方法就是通过项目去学习。
  f9 J6 \6 g. v0 f# ?3 A7 k8 a

6 }. I- ^% M) N7 _: {等你做开发几年以后,相信你也会明白,虽然我们从事单片机程序开发,但真正的核心不是单片机,而是你的编程水平和思维。
! c3 `4 P6 u5 _7 J: t* _: p7 e( K6 p8 E0 y' o2 S2 ]
当你连自己写代码实现功能都困难的时候,先不要去想如何把代码写的更好,而是先实现。/ u3 g1 w" Z4 M- B

# |" L) v# X9 t3 }等你实现了以后,再想代码怎么能写得执行效率更高、可移植性、可扩展性更好?
6 E: v  ?! {7 S8 D8 J% q: E, h+ g( ^# n. Q" d/ M
执行效率讲求的算法,可移植性和可扩展性讲求的是程序架构。
2 o( F6 y- d. R
0 D) {- \; F+ p% T/ ^这块,没经历过几个中大型项目的锤炼是很难领悟的。
3 |, V2 o1 \/ i- A
7 Z! `. K( x! y: L( P程序架构这块,我在19年录制了一套比较系统的教程,目前看来可能是实用性比较强的。
/ `6 _; E$ g5 j, a8 P7 Q% S - f9 @0 D% ~4 |" |$ a% F

+ w( @% z( A) g% v教程讲了指针、结构体、回调函数、任务管理、队列这些高级的应用。
3 g; D# U2 R, u* }( J% C" O  ]/ @: X; P4 |1 H) h3 r7 p
也可以直接套在自己产品上,至少能提高30%的开发效率。
3 O0 W, u( U6 y: b
/ A. a7 {0 f* f教程都是开源的,不用花1分钱。3 P/ V6 W2 V; @* [* p! l/ X
2 Q) U9 t3 z5 s
最后总结:
! x+ a  J  E) G  ]) d  R+ o
; R* Z6 _# O* v/ L    学习STM32最快的方式就是通过项目去学习。
5 q  S; x+ O; g" V, n: \    不用每个外设都学,只需要学常用的外设,剩下项目用到再去学。; ?0 G3 q6 s, j- H9 W/ Q& A! N
    把STM32当作一个工具使用,外设会用就行。
$ ?: y" T% U- p; `9 e, ^" h0 l4 d

9 l8 Q8 x; ?3 x8 h' L+ Q3 r& ^  N5 \

该用户从未签到

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

该用户从未签到

2#
发表于 2022-5-17 14:24 | 只看该作者
多向大佬学习,不能闭门造车,让自己变成井底之蛙
4 O7 a8 d3 w+ Y2 q+ L+ O& Z1 E2 p7 G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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