arrarpetahack 发表于 2023-3-20 21:15:57

能详细地讲讲stm32该怎么学吗?

现在一说到嵌入式、单片机,很多人想到的可能是STM32。
因为STM32的市场应用实在是太广了,我们在招聘平台随便搜嵌入式/单片机工程师,都要求最好会STM32.

https://p3-sign.toutiaoimg.com/pgc-image/a1cad71656804289b28c3f0a2593fc22~tplv-tt-large.image?x-expires=1994681097&x-signature=97EafXtBq2TVuE5ZUFQkt5teYaM%3D


https://p3-sign.toutiaoimg.com/pgc-image/a26a1337be4943999fb54a924a0ddf66~tplv-tt-large.image?x-expires=1994681097&x-signature=Cb5uxJnesd5Ez3y%2FOy9c3TAOpFM%3D

当然,一款单片机的火爆绝对不是空穴来风。
我自己也用STM32开发过很多产品,客观地说确实比大多数单片机用起来要省心。
主要体现在以下几点:

[*]ST把复杂的东西封装了起来(寄存器配置),使得我们直接调用固件库就能轻松使用。
[*]芯片比较稳定,不会有乱七八糟奇奇怪怪的问题。
[*]不同系列兼容性强,固件库通用性强。
到目前为止,我做了开发近10年,现在最喜欢用的单片机依然是STM8/STM32.
但凡用STM32做产品,效率都很高,因为代码框架都是复制粘贴,剩下的就是完成产品功能。
如果你像我这样,自己写了一套通用性比较强的程序架构,至少能缩短30-50%产品代码的开发周期。

https://p3-sign.toutiaoimg.com/pgc-image/604270dca4d1440dba7941a69b3651c9~tplv-tt-large.image?x-expires=1994681097&x-signature=c3mPFuIrxpRHSGU7ikjj39w4muU%3D

Ok,下面来聊聊stm32该怎么学?
这里只分享我亲身经历过,并成功的方法,我没做到的绝对不误导,我能做到的,按照我的方法你也一定可以!
STM32和51单片机不一样,51单片机我一般要求无际单片机编程的学员要相对深入地学习。
说白了就是要搞懂如何通过配置寄存器去使用单片机外设的,这对我们理解单片机和一些别的功能芯片都有很大的帮助,比如说LCD驱动芯片、时钟芯片、存储芯片等等。
大多数芯片都是需要配置寄存器去实现芯片特有的功能,我们核心是理解这个,其次就是通过数据手册去看每个寄存器每个位对应什么功能。
而学习STM32则需要一定的技巧,否则你会有走不完的弯路,别人学半个月,你学1年,差距就是这么大!
新手最容易走弯路的有以下几点:

[*]深入研究寄存器,以为用寄存器开发就很牛逼
[*]看不懂数据手册,就以为学不会
[*]以为把STM32的外设都学完才能做产品
[*]看得多,实践得少。
学习STM32,我总结出来的核心就4个字:循环渐进!
不要一下想把STM32的内部资源吃得透透的,会让你吃不了兜着走。
很多都是通过开发板去学习的,开发板基本上把STM32每个外设资源都利用起来了。
其实很多可能你工作10年也用不上,比如USB、以太网、FSMC、SDIO、CAN。
这些对新手来说也是比较难的,很多如果你没写过一定的代码量理解起来也很困难,在你经验不足的时候学习周期会更长,不划算。
而且实际产品开发,跟开发板还是有挺大区别,实际产品需要考虑成本尺寸多因素,同样一个屏驱动,一般产品不会用开发板的方式去做。
我认为前期新手只需要学习以下几个外设就可以了:
GPIO、systick、定时器、NVIC、EXTI、串口、DMA、ADC。
除了外设以外,还需要掌握常用协议:
IIC、SPI、单口通讯。
学完这些,学习STM32的任务也算是完成了,剩下的外设工作/项目需要再针对性学习。
那接下来的任务呢,就是不断通过STM32去做项目,比如说我们无际单片机编程带学员做的网关。

https://p3-sign.toutiaoimg.com/pgc-image/87f0f3acefdc4aadb2f8bff845ff3474~tplv-tt-large.image?x-expires=1994681097&x-signature=Nvp0DxqKa2qeq%2B9vC62rexXwtyQ%3D

虽然硬件看起来没什么东西,但是精华都在程序里。
大家如果有兴趣去拆解下大厂做的产品,基本硬件没啥东西,但是功能还挺丰富,这样可以有效降低批量出货的风险,毕竟硬件一出问题分分钟赔到破产。
我们这个主机整个程序分为三大板块:

[*]STM32外设
[*]自己写程序架构
[*]产品功能程序

https://p3-sign.toutiaoimg.com/pgc-image/ee56863223ee49e1abc6f855d3c8a7c0~tplv-tt-large.image?x-expires=1994681097&x-signature=KyqcYyUwPYmR%2BZxdEBSm584Ud6s%3D

程序架构是贯穿整个项目的,而不是某个文件的代码,其中涉及到很多考验你编程水平的代码,比如指针、结构体、枚举、队列、回调函数、链表、任务管理等等。
如果通过开发板,我们一般只能学会STM32外设,学不到程序架构、产品思维,更别说提升自己编程水平。
而这些往往才是企业需要的,听到耳朵起茧的项目经验就包含了这两项能力,而不是你会用什么单片机。
所以,很多人虽然把STM32的外设都能用起来了,但是感觉还是什么都没学会?
其实,就是你没把你学的东西落地,没通过它们做出实实在在的东西。
即便做出来了,也感觉不是很完美,感觉很不专业,你写的代码都是你认知水平内的。
想提高,就必须向做得更好的人,更有经验的人学习。
当你真正做过一个中型以上的项目,做过几年开发,你就会发现,单片机屁也不是,就是个工具而已。
随手一个单片机过来你都能得心应手,游刃有余。
现在更是如此,原厂/代理商提供外设例程,提供技术支持,你只需要懂复制粘贴,就能把单片机外设用起来。
最后总结:
新手学会用单片机的外设以后,学习的重点绝对不再是单片机,而是怎么通过这个工具去做项目。
核心的东西,是通过项目练出来的,不要闭门造车,多向大佬看齐。
页: [1]
查看完整版本: 能详细地讲讲stm32该怎么学吗?