【小白】【大学】一名嵌入式软件开发小白的单片机学习历程、心路历程、经验分享

我的嵌入式学习之路

  • 我为什么写这篇文章
    • 先简单介绍一下我自己
    • 与每一个技术小白共勉
    • 这篇文章写给谁
  • 我的学习经验分享
    • 我的成长之路
  • 我的单片机学习历程分享
    • 51系列单片机学习历程
      • 预备知识:(可以查百度)
      • 正式学习路径
    • STM32系列单片机学习历程
      • 预备知识:(可以查百度)
      • 正式学习路径
  • 结束语

我为什么写这篇文章

先简单介绍一下我自己

  本人就读于山东一普通高校,上个月从自己一手创办的创客社团退位,即将毕业,9月26号拿到了青岛一家企业的offer,做嵌入式软件开发。
  回首大学几年时间,一晃而过。整个大学生涯进过学生会、带过社团、参加过大赛、创办过公司。大一起进入实验室学习,从电气到电子,做过电气控制、工业机器人项目,基于西门子s7-200、200—SMART、300、1200做个几个大型的项目,基于汇博机器人、栋梁机器人、汇川做个几个技能技术大赛。交叉于电气控制技术的学习,大一开始了解到51单片机、Arduino,到大二开始接触ARM,前前后后做个相关项目十余项,整个学习过程大都靠自学,学习历程痛并快乐着,因为参与各类大赛的缘故学习有明确的目标和动力源。大学的整个学习生涯中参与技能技术类大赛、科技创新类大赛取得国赛二等奖两项、省赛一等奖七项、二等奖五项。经过这几年的学习和摸索,终于找到了自己的定位,选择了嵌入式软件开发方向,并逐渐入了门。

与每一个技术小白共勉

  从迷茫焦虑痛苦到逐渐发现乐趣取得成就感,短短几年时间,技术的成长方面走过弯路,有过很多误区,对嵌入式学习、自动化学习、电气控制学习(大学阶段)有自己的一些看法和经验,大学生涯即将结束,走过学校的每一条林荫小道,经过的每一个洋溢着青春色彩的学弟学妹,回想过去的一点一滴,感触良多。所以希望通过这个平台将我以往的经历记录下来,把我自己的学习经验分享给大家,希望每一个刚入大学的学弟学妹们快速渡过迷茫期,找到自己的愿意为之追求一生的目标和事业,今早制定出自己的学习规划,并为之努力。我的大学毕业在即,而学弟学妹们还大有可为,只要努力,万事皆有可能,任重道远,我以后会通过这个平台与朋友们持续分享自己的所得所想,个人对技术的感悟与看法,也会一点点的分享出来,希望以后越来越好,未来可期!

这篇文章写给谁

  这篇文章接下来会分享我在单片机及嵌入式方面的学习心得、学习历程。如果你是自动化类专业新生、电子信息类专业新生、计算机软件类新生想进一步了解单片机,了解嵌入式和物联网,如果你决定要学习嵌入式或单片机但是不知道怎么学,不了解嵌入式和单片机需要先学什么再学什么,或者不知道学习这些需要哪些资料,那么我希望我的这篇文章能够给你带来帮助。

我的学习经验分享

我的成长之路

  第一次听到单片机的概念是在大一上学期一个电子技术类社团的纳新大会上,我是众多参与大会的小白之一,同时接触到的还有PLC,说实话第一次听到这个概念,我心里是没有什么感觉的,那时候我根本get不到自己的兴趣点,我唯一的优势就是对任何事物都不排除愿意尝试,相信兴趣是可以培养的(这点非常重要,基于这一点认识,我竞选了班长,进到学生会,进到实验室,才最终发现了最适合我的发展方向),可惜的是当时没有进入这个社团进行电子类技术的学习(原因是当时我在学生会工作,这个社团十分排斥),再后来因为我是班长的缘故与各个老师关系比较紧密(老师与学生间的沟通桥梁嘛),我们专业的教研主任也是我们专业的负责老师介绍我进入了麦科电气社团一个电气技术类社团(我的技术的发源地),开始学习电气控制技术,并正式进入实验室学习(那时候社团发展并不好,整个社团团队加上我只有寥寥几人,同级的学生只有我自己一个人),有时候机会到来的时候是悄无声息的,大一寒假,老师在群里要求假期提前返校培训(提前到大年初七),真正参与到培训的只有五个人,其中4个是大三的学生大一的学生只有我自己,培训的内容是现代电气控制,基于西门子s7-200,STEP7,梯形图编程(这是我接触到的第一种编程语言,与C差别很大,但是万变不离其宗),很多朋友不愿提前返校培训,甚至他们可能会觉得我吃亏吃大了,吃亏是福,正是因为这个假期培训让我领先了跟我同级同学院的所有人,等到培训结束,大家都返校以后,我就开始自己去学着做团队带团队了,那时候几乎一有闲空就会到实验室自学,刚开始的一段时间偌大的实验室只有我自己一个人,慢慢我交结到几个志同道合的朋友,拉入我自己的团队一起学习,经常是我先自己去学习一类指令,然后在黑板上给他们讲(这段时间进步很快),到2016年5月份(大一下学期)整本PLCs7-200的教程都被我吃透了,很自然的进入了工业机器人的实验室,加入到全国工业机器人技术应用技能大赛备赛小组(含金量很高),再往后到现在几乎没有过任何一个完整的假期,成年累月的在实验室学习,虽然很累,但是快乐是打心底的。
  2016年4月,接手了大学生涯的第一个项目,由一个电子信息专业的老师指导,基于物联网的森林防火系统,技术含量很高,用到stm32跑FreeRTOS系统,用了一大堆外设,跑了一大堆的通讯协议,那时候什么都不懂,软件硬件大都是老师在做,我们在看,我就只负责简单的焊板,接线走线,配电箱的打孔这些工作,这个项目虽然我实际接触到的不多,但是那种第一次去做一个项目去体现我自己价值所在的兴奋与喜悦只有经历过的人才会懂。这是我第一次真正接触单片机、接触电子电路,也是我单片机学习之路的开始,值得怀念。4月PLC学习结束后,我立即开始了单片机的自我成长中,我的学习平台是普中科技的51开发板及相关的一些教学视频。当时是真正的零基础学习,没学过C语言、不懂GPIO、不懂SOC得工作原理,刚开始学习的那段时间因为涉及内容简单,学起来没那么痛苦,但是学起来也是困难重重,直到开始学习定时器中断,到了学习瓶颈,又赶上工业机器人项目的集中培训,单片机的学习中断了一段时间,集训结束后,因为接手了一个基于51单片机的园丁机器人项目,又从新把51的学习拾起来,攻破了定时器中断的学习瓶颈,进一步学习PWM输出,及各类外设的简单控制,成功用园丁机器人拿下了第一个省赛的二等奖,这个项目是我独立自主设计开发的第一个项目,取得省二的成绩真的已经超级开心了,赛后单片机的学习又因为工业机器人省赛备赛搁置了一段时间,后来2016年10月再次启动了硬币兑换机的项目,这时开始慢慢接触到了STM32(项目用到的是基于ARM cortex-M3架构的STM32f103ze系列单片机),又再一次被这款MCU性能之强大,学习之痛苦震撼到了。在老师的指导下,因为学习时间紧迫,勉强将硬币兑换机的项目做出来参赛(12月三个省级大赛),意外的是拿到了省科技创新大赛一等奖,还因为这个比赛被齐鲁卫视几个媒体报道过,当时在学院也已经算是个风雨人物了(早在16年6月接手了麦科电气社团和电气电子创新工作室、纳新、活动、培训一手操办,能力提升飞速)。
  2017年1月开始,我陷入了一阵迷茫期,迷茫来自未来方向的选择(电气方向还是电子方向),说实话我在电气控制方向也许更有希望一些,因为电气方向参加过很多高含金量的比赛,例如全国工业机器人技术应用大赛、“栋梁杯”工业机器人大赛,常用roborstdio做工业机器人的离线编程,精通西门子s7-200、200smart、1200系列PLC的软件编程及硬件设计搭建,熟练掌握西门子博途硬件组态网络、SCL程序设计、HMI设计、及组态王软件应用等,这些都是我在电气控制方向优势的一面,而反观电子方向,当时没什么突出的优势。这个时期很关键也很痛苦,一方面要继续准备工业机器人的国赛,一方面我发现自己在单片机方面更有兴趣,这个时间段持续了4个月的时间,直到2017年5月国赛结束,国赛发挥有些失常,因为国赛要求每个省份只推出两只参赛队伍即一队、二队,是代表山东省去参赛,作为山东省一队队长压力巨大,因为我带领团队失误,导致做机器人部分的队员没有顺利发挥,从而只拿到了国赛二等奖的成绩。
  2017年5月国赛结束后,我立刻组建团队设计自己的项目低成本智能分拣流水线,项目还算比较复杂,由24个光电传感器搭建出一个传感阵列,来模拟工业相机的作用,这个项目我前后做了三遍,分别用51单片机、arduino和stm32各做了一遍,所用外设也全然不同,一遍比一遍优化,也因此拿下了不少奖项,单片机方面技术长进不小。成功就是这样熬出来的,现在现在意义深刻。2017年暑假参加了2个省赛,一个电气类的栋梁杯工业机器人技术应用大赛,这段时间我差点就要选择要走工控这条路了,大赛拿下了省二的成绩(因为粗心大意把题目要求搞反了一个大题的分丢了,本来是稳稳可以进国赛的),好在机电产品创新设计大赛拿下了省一成绩,这让我更加有信心走好嵌入式单片机这条路,2017年下半年做了两个大型的电子项目,一个是二足机器人,拿下了省赛一等奖的好成绩,一个是“华航唯实杯”的移动机器人项目,去北京参加国赛拿下了国二的成绩(这个项目用到了myrio基于labview编程)。再后来2018年开始创业做创客教育,给小孩子教编程,这方面就不多介绍了,18年做了几个单片机的项目,包括robomaster迷宫机器人、对战机器人、基于stm32的物料分拣系统等多个项目,基于ARM搭建各种RTOS,基于S5PV210跑Linux系统做了几个简单的项目,同时在18年9月创立了自己的创客协会,转眼就到了今年,忙过去创业,又陆陆续续参加了几个比赛(包括电子设计大赛、省信息技术大赛),紧接着进入到就业找工作的大军中了。关于应届毕业生应聘相关的一些问题和看法,我打算抽时间另写一片文章来介绍。
  以上就是我从一个菜鸟成长为一个小鸟(还是很菜)的学习历程,当然除了技术学习外,我也有一些其他重要的历程想简单聊一下,我一直相信我们可以一辈子痴迷技术,但是不能一辈子靠技术生存,因此我建立了自己丰富的非技术目标:
  1、站台能力(演讲、宣讲),我从班级班长日常班级例会开始锻炼,到学生会宣讲活动,到社团各种活动大会(包括走班纳新宣讲、例会、年会等),到新生开学典礼面对进一万新生的学生代表发言,经验分享等。
  2、管理能力,从班级日常管理,到学生会活动组织举办,到社团各种培训活动组织、会员干事管理创业公司管理、参赛团队管理等。

我的单片机学习历程分享

  上面介绍了我整个大学,学习的经验分享,那么接下来我就单片机该怎么学做一下简单的介绍,并把我自己的学习大纲给大家分享出来,希望这些对你有用:
  首先简单分析一下什么时候去学习51单片机最合适,有很多学弟学妹问我,我才刚上大一专业课都没学过几门,现在去学习单片机合适吗?我想说的是其实51单片机的入门门槛没那么高,你只需要会用电脑会打字,高中门槛,学习起来就不会有任何问题,现在有很多孩子从初中就开始接触单片机了,所以如若认定要学习它就立刻投入学习即可,不需要太多的专业课支持,相反单片机学习的过程会促进你对专业课的学习欲望。至于单片机该怎么去学习,这个问题,我接下来会介绍到。有学弟会问单片机这个东西要学多久能学通,这要看你自己,你想学到什么程度,你是不是打算以后从事这方面的事业,还是只是玩玩而已,如果你只是玩玩而已会编个程序装装逼刷刷帅就够了,那你很简单,几天你就可以耍帅了。但是如果你把它看做自己的一份事业,你也许要做好长期学习的准备,嵌入式单片机的学习曲线又陡又长,如果坚持不下去我建议还是不要去做这方面的学习了。
  如果你准备好了可以继续往下看了

51系列单片机学习历程

  51单片机的学习,首先你要有一款开发板,开发板就是你学习单片机并实践的工具。打开淘宝一搜51开发板一大堆信息,当时我用的是普中科技的开发板,普中科技的开发板做的还是非常不错的,建议要买可以买个外设多一点,功能全一点的,小板子虽然便宜内部电路都是设计好的不需要你拿排线接线,很多东西不容易理解。当然现在网上各种板子资源多了,也可以选择其他厂家的板子来学,但是教程一定要配套这样可以减少很多问题的出现,课程的话我推荐朱有鹏老师的单片机完全学习系列课程,我现在系统学习嵌入式软件开发看的就是朱老师的课,讲的非常细致,又通俗易懂。可惜当年我学的时候,朱老师还没有开始录单片机的课程,自己学习遇到大部分问题都要好久才能解决,所以朱有鹏老师的课值得你去学习。预算足够的话直接看他的课,从51到32,从裸机到跑一些简单的RTOS,基本上一站搞定(我这不是打广告,主要还是因为朱老师讲的真的好,简单推荐一下)。当你买到自己的51开发板以后就可以开始正式的学习了。
  接下来我参照我自己的学习历程经验及朱有鹏老师开设的课程简单介绍一下51学习的大纲

预备知识:(可以查百度)

1、C语言基础,这个可以去看朱有鹏老师的免费教学视频,也可以看中国大学mooc里面各高校的优质课源。也可去看开发板自带的教程。
2、要了解单片机与c语言的关系,为什么要学单片机,为什么从51开始学起,了解51单片机的介绍。
3、要了解什么是单片机的最小系统,怎样去搭建51单片机的开发环境。
4、了解ROM与RAM,单片机的工作原理,什么是外设,软件与硬件的区别和联系。
5、了解51单片机发展史,主流单片机及各自特点,51各个系列的特点,简单了解做项目时如何选型主控单片机。
6、开发板功能的学习,这里要学会去看开发板的功能介绍手册和电路的原理图,这个开发板自带的教程一般都会有。

正式学习路径

1、学会向单片机下载程序并运行。
2、学习了解什么是Keil软件并安装Keil。
3、了解什么是二进制和IO端口,并学会使用IO去点亮LED。
4、了解怎么编写C程序实现延时功能,并使LED闪烁。
5、C语言循环语句回顾,并实现流水灯。
6、了解什么是数码管,实现静态数码管的初步驱动,了解动态数码管并做相关项目。
7、了解LED点阵及字模,编写驱动,并实现文字显示,也可以适当做一下项目。(当时用点阵给我女朋友做了一个生日礼物,非常华丽,来自工科生的浪漫,哈哈)
8、了解怎么读取信号输入,学习按键、外部各种传感器的使用。
9、了解.51单片机的中断系统简介,外部中断、定时器中断、串口中断、看门狗中断,概念学习。(比较难,我第一次的学习就是卡在这里了)
10、了解软件控制硬件的关键-寄存器(很重要,进阶32单片机的关键)。
11、基于以上所学先去实践几个项目,通过项目进行学习才能更好的掌握。
12、了解蜂鸣器的原理,了解基于定时器中断怎样去搭建PWM发生器。,并在蜂鸣器上实践一下(也可以用舵机来实践)。
13、学习直流电机的控制,了解步进电机理论,并进行步进电机编程实践。
14、了解通信有关的常见概念,学习什么是串行通信,了解51的串行通信相关寄存器,并进行串行通信实战。
15、学习RTC有关的背景知识,学习时序图的读法,编程实践并添加串口调试。
16、学习DS1302的时间格式详解,编程向DS1302写入时间,并及时对程序进行规整。
17、学习EEPROM及其背景知识,了解I2C低层时序图和程序及EEPROM读写程序设计。
18、学习AD转换及其相关背景知识,结合例程分析时序,编程实践串口直接显示电压值,进而学习DA转换
19、开始学习LCD显示器相关背景,以及控制器的低层时序,学习LCD1602、LCD12864,了解LCD12864低层时序。
20、学习ST7565的指令集,学习并实践LCD12864显示文字、图片。

STM32系列单片机学习历程

  很多朋友问我,我没学过51想直接学32可不可行,这个我不好回答,因为本身我没有尝试过,我是从51开始一点一点慢慢学过来的,但是理论上直接学习32单片机也是可行的,只是开始会痛苦一些而已,那有的同学也许就会说,那直接学32就好了呀,这个还是个人,51单片机现在市场也还是有很多产品在用,如果你时间紧急目标就是要把32学好,那你可以直接去学32没问题,如果你想一点一点吧基础打好,有的是时间学习,那你也可以先把51学好,再去看32,循序渐进学习的同学学到32就不会那么痛苦,只需要转变一下学习方式就好了。
  这里谈一下32和51有哪些差别,首先32的内部资源更多,地址空间上51单片机只有64KB;STM32有4GB。片上资源:51单片机ROM只有2K-64K,RAM仅为128B-1K;STM32的ROM为20K-1MB,RAM有8K-256K。外设上:51单片机仅有三个定时器和一个串口;STM32却拥有AD,DA,Timer,WWDG,IWDG,CRC,DMA,IIC,SPI,USART等众多外设,操作系统方面:51单片机连RTOS都很难能跑;STM32可以跑很多RTOS。所以学习起来,两者之间是存在很大差别的。
  好了接下来介绍一下STM32的学习大纲

预备知识:(可以查百度)

1、自学STM32的来历背景。
2、学会去看各个SOC的Datasheet。
3、了解STM32简单中文手册。
4、了解STM32的各种仿真器调试器是怎么回事。
5、了解STM32的标准库和HAL(cubeMX)库是怎么回事。(这个非常重要,32的编程学习与51还是有很大差别的,51的学习大都通过寄存器直接配置编程控制,32除了寄存器控制外,st为32提前做好了大量的库文件,我们在编程是只需要按需要调用调参即可)
6、了解STM32的存储器映像,与51的可以按位寻址不同,这里要重点了解攻破。
7、学会STM32的位带操作,既然不能按位寻址,这是我们的解决办法。
8、了解STM32的启动模式。
9、了解STM32的电源管理系统。
10、学习STM32的时钟框图。
11、看开发板原理图了解开发板详情。
12、学习开发板ISP下载原理分析。
13、了解STM32F4的浮点运算单元是怎么回事。
14、学习了解MDK5软件的安装使用。
15、学会使用JLINK程序下载。

正式学习路径

1、基于库函数学习新建工程。
2、基于寄存器学习新建工程。
3、看数据手册了解GPIO工作原理,及重要的寄存器。
4、学习利用GPIO实现LED的控制。
5、学习利用GPIO实现按键等数字量传感器的信号读取。
6、学习 STM32时钟系统精讲。
7、学习时钟系统初始化函数的使用并实践。
8、了解端口复用和重映射功能。
9、学习NVIC中断优先级管理。
10、学习串行通信原理讲解-UART。
11、学习STM32串口寄存器库函数配置方法。
12、学习外部中断-EXTI,并利用按键进行实践。
13、了解独立看门狗、窗口看门狗。
14、学习了解通用定时器基本原理。(基于51中断系统再来学习32会容易很多)
15、编写程序配置定时器中断实现LED闪烁功能。
16、学习PWM输出配置实现。
17、了解基于中断系统的输入捕获。
18、学习OLED显示的基本原理,并调用库函数进行控制实验。
19、了解LCD-TFTLCD原理与配置介绍。
20、学习USMART调试组件。
21、学习RTC实时时钟_备份区域BKP 原理并变成实践。
22、学习如何待机唤醒-实现低功耗。
23、学习ADC基本原理。
24、编程实现ADC模数转换实验。
25、利用ADC实现内部温度传感器实验。
26、学习并进行DAC数模转换实验。
27、学习如何利用定时器配置 PWM。
28、 DMA基本原理学习及编写程序实验.
29、学习I2C通信实现基于I2C通讯的传感器信号读取。
30、学习SPI接口原理与配置。
31、学习485通信。
32、学习CAN通信基础知识并实现CAN控制器配置。
33、学习并进行触摸屏实验。
34、学习红外编码并进行红外遥控器实验。
35、学习MPU6050六轴传感器实验。
36、学习并进行2.4G无线通信实验。
37、学习FLASH闪存编程原理与步骤,利用FLASH模拟EEPROM实验。

结束语

  以上是我分享的学习历程,希望能给你带来一定的启示与帮助,嵌入式软件方面的内容,我还在不断努力的去学习,未来的学习道路还长,我会把我在学习之路上的感想慢慢与大家分享,最后一句话与大家共勉:理想,是我们一步一个脚印踩出来的坎坷道路。

你可能感兴趣的:(我的大学成长之路,STM32,单片机学习经验,我的大学,嵌入式软件,经验分享)