五年懂行,十年称王。

当初自学转行的我,怎么也没想到自己能从事单片机开发10年。

王不敢称,还算懂行。

10年前我刚毕业,即将面临社会毒打,我慌得一批。

我学的是电气工程,后面主修电梯。

毕业后和大家一样,感觉还是啥也不会,啥也不是,最悲哀的对本专业还很排斥。

那个时候看得不远,就看实习的那些师兄前辈们,完全打消我从事这个行业的欲望。

工资低、责任大、体力活、24小时待命。

相信一个正常的年轻人都不会去选择这样的工作,除非生活所迫。

所以,我虎躯一震,决定大胆一次,选择了自学转行。

可能是上天比较眷顾勇敢和有自己想法,又肯努力的人,再加上10年前门槛相对没那么高。

我只学了STC 89C52,也就是51单片机,然后做了个智能小车就找到工作了。

中间也很坎坷,至少被20几家公司拒绝过,从绝望到不服输的辛酸史今天先不提。

下面,我将通过我的个人经历,来分享下我当初是如何从51单片机过度到STM32的,希望有同样烦恼的认真看完,绝对能让你受益匪浅。

我第一份工作是做单片机软件工程师,当时也没什么项目经验,老大自然也不会给我参与什么新项目开发。

我每天的工作就是维护公司老产品,改改代码,给定制化的客户升级下功能。

改代码是一件非常痛苦的事,比自己重新写还痛苦,因为要去理解别的工程师的思维。

不过,这是一个工程师必备的技能,现在回想这几年,成长最快的时候就是看那些大佬写的代码,闭门造车,只会让你成为井底之蛙

公司的产品大多数都是用stc 51单片机做的,还有就是NXP的ARM7单片机。

刚从51单片机过渡到ARM7的时候,那段时间确实掉头发更严重了,太特么烧脑了。

还好,开发模式基本跟51单片机相同,都是通过配置寄存器使用,只不过寄存器要复杂也多很多,我记得当时用的好像是lpc2103。

还好只是改代码,如果让我看数据手册去配置寄存器,估计我也做不出来。

大概做了3,4个月,我基本上上手了,原来改个功能要半个月,现在改个功能只需要1周左右。

那个时候就有点飘了,单片机开发也不过如此。

后来,跟同事相处多了,也熟了,有个同事介绍了一个外单问要不要一起做。

当时,我想跟着这些老油条做,即便不挣钱积累点经验也好就答应了。

整个项目需要用到2个单片机,一个51单片机做屏显示,一个做主控,主控这边需要一个类似于ARM7这种资源丰富点的单片机。

这个项目我非常积极,主动要求做工作量最大的主控程序,然后钱平分,同事听到连忙点头叫好。

硬件选型是他选的,他推荐我们用STM32的单片机,开发起来挺爽,我也不懂,完全听他安排,反正这个项目我完全冲着学东西去的,哪怕是自己亏点钱

在同事设计电路的时候,我就同步开始研究STM32单片机,最好等硬件回来就能开始调试功能。

下图是我最终写好的代码,所有功能代码都写在main函数里,没用单独函数单元,现在看着真的是太渣了。

学习一款新单片机最好的方式就是买一个开发板,所以我自掏腰包买了一个开发板。

那个时候开发板还没现在这么完善,只有每个外设使用的例程,没有配套视频教程。

开发板拿到以后,我就开始从最简单的GPIO开始学习。

但…当我打开GPIO工程的那一刻,我懵逼了…这是什么鬼?用一个IO口怎么都这么复杂?

到处都是结构体,指针,回调函数。

STM32和51单片机代码架构不一样,虽然底层都是配置寄存器去使用单片机外设,但STM32不用我们自己配置寄存器,而是调用官方固件库直接打开。

所以,原本是学STM32单片机的,最后变成了学固件库,学会固件库你就学会了STM32

但是想要学固件库,需要你有一定的代码理解能力和水平的基础铺垫,比如说你要熟悉指针、结构体、枚举。

很多人心急,一在开发板上学完51单片机,马上就开始学STM32,连项目都不做一个,有些甚至直接学STM32。

导致在学习STM32的时候举步艰难,每学一步都碰到各种问题无法解决。

这也是为什么我们无际单片机编程要求学员先学51单片机,再做一个项目,做完再学STM32的原因。

学习这个就像我们玩游戏一样,先升级搞装备,再挑战boss。

我在学习STM32之前已经接触过几个项目,所以至少保证了固件库代码都能看得懂。

我一边改开发板的例程,一边在开发板上做实验。

我会举一反三去做实验,比如说开发板是配置PA0,那我会改成PB0、PC0试试。

其他外设同理,开发板开启定时器1,那我会改成定时器2。

我只研究我这个项目用到的外设,GPIO、定时器、串口、NVIC、DMA、RTC、ADC。

其它没用到的我看都不去看。

大概花了半个多月的时间,我就把这些外设用起来了,用熟了以后感觉太爽了,比51单片机和LPC爽多了。

用熟固件库,甚至连数据手册都不用看就能把外设用起来,更别说看寄存器了。

项目时间也紧,没时间给我去研究。

时隔多年回想起这件事,我都感觉误打误撞走了捷径,我很庆幸当初没深入去研究寄存器,没深入去看数据手册,不然走的弯路能绕地球一周。

因为看了也是白看,根本看不懂,还会打击自己自信,有现成代码为啥不用?

STM32单片机外设用起来以后,后面基本上就没怎么研究过单片机内部的东西了,剩下的时间基本就是完成产品的功能。

所以,学习STM32最好的方法就是通过项目去学习。

等你做开发几年以后,相信你也会明白,虽然我们从事单片机程序开发,但真正的核心不是单片机,而是你的编程水平和思维。

当你连自己写代码实现功能都困难的时候,先不要去想如何把代码写的更好,而是先实现。

等你实现了以后,再想代码怎么能写得执行效率更高、可移植性、可扩展性更好?

执行效率讲求的算法,可移植性和可扩展性讲求的是程序架构。

这块,没经历过几个中大型项目的锤炼是很难领悟的。

程序架构这块,我在19年录制了一套比较系统的教程,目前看来可能是实用性比较强的。

教程讲了指针、结构体、回调函数、任务管理、队列这些高级的应用。

也可以直接套在自己产品上,至少能提高30%的开发效率。

教程都是开源的,不用花1分钱,跟无际单片机编程拿就可以了。

最后总结:

  1. 学习STM32最快的方式就是通过项目去学习。
  2. 不用每个外设都学,只需要学常用的外设,剩下项目用到再去学。
  3. 把STM32当作一个工具使用,外设会用就行。

Ok,今天就写到这里,写写删删,不知不觉肝了2个小时,如果对你有帮助,麻烦给我安排个三连吧^^!

为什么我学51单片机很顺利,学STM32却一头雾水?相关推荐

  1. stm32难不难学,没学51单片机可以直接学STM32吗?

    10年前,我是跨行自学进入嵌入式单片机开发这个行业. 学习的过程很枯燥,当初差点放弃,但是后面我通过一些技巧顺利进入这个行业并以此为生. 结合自己的经验,我先给大家总结原因,再给出解决办法: 1. 学 ...

  2. 《uCOS51移植心得》---七年前之《快快乐乐跟我学51单片机操作系统和IP栈》

    http://www.amobbs.com/forum.php?mod=viewthread&tid=3396563 <uCOS51移植心得>---七年前之<快快乐乐跟我学5 ...

  3. 手把手教你学51单片机——函数进阶与按键

    目录 写在前面 一.单片机最小系统解析 1.1电源 1.2晶振 1.3复位电路 二.C语言--函数 2.1函数的调用 2.2函数的形参和实参 三.按键 3.1独立按键 3.2独立按键控制led数码管显 ...

  4. c语言52单片机液晶屏显示,[手把手教你学51单片机C语言教程]22 LCD12864液晶屏显示.pdf...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 [手把手教你学51单片机C语言教程]22 LCD ...

  5. 第11章 UART 串口通信(手把手教你学51单片机pdf部分)

    手把手教你学51单片机-C语言版.pdf  

  6. 从头开始学51单片机之实例2:用定时中断实现流水灯

    一.仿真环境 Proteus8.9 Keil5 二.Proteus模型搭建 具体过程参考上一篇: 从头开始学51单片机之实例1:用Proteus和Keil搭建流水灯模型_Forster-C的博客-CS ...

  7. 跳过51单片机,直接学习STM32单片机怎么样?

    经常有学员问:" 跳过51单片机,直接学STM32单片机怎么样?" 武汉华嵌科技的工程师给大家定心丸:"不管C51有没有落后,学习51都是值得的,不会浪费你的时间和精力, ...

  8. 跳过51单片机,直接学STM32有什么严重后果?

    STM32现在之所以这么普及,主要是教程资料非常丰富,一些卖开发板做教程的至少有50%的功劳. 再价格也算合理,导致很多企业用这个单片机去做产品,初学者也更渴望掌握这款芯片. 不过STM32这两年涨价 ...

  9. 放弃51单片机,直接学STM32开发会有什么严重的问题?

    本人从事单片机开发10年,我一直认为只有起点和你差不多的人,经历过的路,才具备参考的价值. 别人开局就是一套终极装,在各种资源背景加持下经历像开挂一样,你参考个锤子啊. 我当初是电气工程转行到嵌入式单 ...

最新文章

  1. Java 程序员必须掌握的 10 款开源工具!
  2. 今天写的一个GetProcAddress
  3. java学习笔记(十二)----集合
  4. ITK:使用Viola Wells互信息执行多模式注册
  5. Python内置函数sorted()和列表方法sort()排序规则不得不说的事
  6. 博客园 使用锚和书签制作目录
  7. 【文献阅读笔记】(2):使用IMPUTES2和minimac软件完成群体特异性的基因型填充(Imputation)
  8. Android MTK PDAF流程
  9. php tracert,使用tracert查看网络状况
  10. Linux运维高级工程师要掌握的技能
  11. 你所不知道的那些阿里面试|原来我也可以从小白到年薪百万!
  12. 游戏的帧率与屏幕的刷新率
  13. 三大运营商eSIM商用情况
  14. 利用python进行数据分析数据集_《利用Python进行数据分析》终章·数据分析案例·学习笔记(二)...
  15. Python --- 笑脸检测+口罩人脸识别
  16. 服装行业MES解决方案
  17. Typora:简介和常用功能集锦,窗口置顶,自定义快捷功能,粘贴图片自定义保存位置
  18. 英雄远征Erlang源码分析(7)-场景与副本
  19. DirectCompute开启Windows7 GPU运算大门
  20. iterator - 在&vec与vec.iter()之间进行反向迭代

热门文章

  1. 爬虫练习(2)-- 使用正则匹配爬取果壳问答
  2. 2011RTIC论坛回顾
  3. 算法4 Java解答 2.4.18
  4. 高中历史教师资格证考试成功通过前辈备考经验分享
  5. 洽洽:成于瓜子,困于瓜子
  6. 专访阿里巴巴毕玄:异地多活数据中心项目的来龙去脉
  7. 保险公司真得保险么?
  8. 计算机端口怎么配置波特率,PLC波特率设置
  9. 【时序】DeepGLO:可以学习全局依赖和局部信息的多时间序列预测模型
  10. vu3响应式原理 代码分析