大家好,我是兔子。是一名嵌入式工程师。
我在学校的时候,先后自学过51, ** R,msp430以及STM32F103系列。
工作后,又用过PIC以及TI的蓝牙芯片CC2 ** 0R2F以及stm32F4系列。
我想以我的学习经历,带大家少走坑,不迷茫的学习单片机。
1.初识单片机兔子我第一次了解单片机的时候,是在大二上学期的一门选修课上。
出于对技术的兴趣,选修的是机器人技术的选修课。
也正好是这门课的任课老师,在一次课上讲解到单片机。当时也是听不懂,听的稀里糊涂的。选修课结束后,老师向所有同学提供了一个机会,可以报名进入实验室选拔,进而可以参加全国机器人大赛。
于是我就报名参加。
2.外界驱动力刚进实验室,老师丢给我2个选择。
一个是坦克,只有电机。坦克是要能前后左右能动,用单片机控制。
另一个是超声波测距。也使用单片机操作,数码管显示测的距离。
让我选择一个,也可以选择电路部分,也可以选择程序部分。1个月后拿给他作品。就算获得参赛门票。可以一个人做,也可以和其他同学一起。
当时本来想选程序的,网上找了很多教程。不知道怎么上手。后来眼看时间不够了,就只能选择电路。从某宝上找了一个卖家,买了他的超声波套件,把元器件都按照卖家提供的图纸一个一个焊接在洞洞板上。期间正好又和一个同学配合,他学程序很快,就让他帮忙给超声波写了51单片机的程序。
兔子的第一个作品 正面兔子的第一个作品 反面这期间,我们老师不提供任何技术支持,只提供场地和一些芯片。由于时间紧迫,逼着什么都不会的我去疯狂的找方法。除了上课,几乎天天都窝在实验室里焊板卡。
也就这1个月的时间,兔子我简单的原理图能看懂了,也知道不会的东西除了问同学,还需要网上查资料。
学会用烙铁,以及锡接走线。
也随口和我一起配合的同学问了一下,告诉我可以看郭天祥的“10天学会单片机”的视频入门。让我的单片机的学习有了方向。
小结:
1)硬件原理图需要大致能看懂,了解怎么接线。
2)学会网上查资料。
3)学会动动烙铁,至少直插的元器件可以焊一焊。(纯嵌入式开发,可以不强求)。
4)单片机入门,郭天祥的”10天学会单片机”视频以及配套书籍。
3.单片机的入门之旅在网上,搜索到了郭天祥的视频后,同时在某宝上买了一款51开发板。(没买郭天祥视频配套的板卡,视频介绍的是方法,无非就是根据板卡调整外设对应的端口号)。
就每天边看视频,边操作51开发板。
从点灯开始,串口、定时器、外中断。这些和MCU相关的操作。
到后面的控制数码管,lcd1602,lcd128 ** ,时钟芯片DS1302,步进电机以及温度传感器DS18B20。
Ps:其中时钟芯片DS1302 ** 作失败。读到的数据一直有问题。直到后续我调msp430,第一次使用到仿真器时,我才知道我之前的问题出在哪里。
小结:
1)找套路,任何一款新MCU,IO口控制、串口、定时器、外中断是必须优先学习。
会了这些,基本上就对这款MCU来说,可以开始写应用了。
2)有调试器或仿真器,会节省很多调试时间。如果没有,也可以用串口,在关键的程序处输出对应数据。通过串口助手,可以方便的知道程序运行到哪一步了,关注的变量输出的是什么值等,达到调试的目的。
4.之后的路我把买的51开发板玩了个遍后,开始想找一找,不同MCU之间的开发差异。当时我们实验室的同学都直接上stm32f103。我当时也在他们的怂恿下,自己焊了一块stm32f103的最小系统板。用的库函数,当时觉得好难,点个灯,费了半天劲都没点成功。后来才知道是对应的IO口时钟没配置。和51相比,有很多时钟需要配置,配置有问题就导致无法使用。
后来准备还是慢慢来,就先上了 ** R的ATMega16,以及msp430f149。
兔子的stm32f103最小系统板这期间,也学会了焊接QFN芯片。上图stm32f103芯片就是我自己网上找视频学着焊接的。
自己用 ** R的ATMega16做的温度检测系统。
兔子的基于 ** R ATMega16温度检测系统msp430f149做的寻迹小车,当时参加的TI杯电子设计大赛校内选拔。
毕业设计
stm32f103制作的全自动洗衣机控制板。
板子自己画的,器件手工焊的,程序自己写的。显示屏做了2级菜单。
小结:
1)如果觉得stm32有难度,可以循序渐进,慢慢理解,从其他的MCU慢慢过渡。兔子我感觉我理解慢一点,我同学理解的快,51学完直接上的stm32,也没什么问题。
2)注重积累,C语言有很多高级用法不熟,也是慢慢学的,看开发板提供的Demo程序,也可以借鉴写的好的语句。
3)驱动程序可移植性, ** R,stm32的驱动。有些都是我之前51上写过的,再重新写一遍也没必要。可以多定义一些宏定义,方便在不同的MCU上移植。可以也尝试一下程序移植的感觉。
5.工作之后兔子我学MCU一方面是爱好,另一方面也是找工作需要。
达到上述能力,基本上毕业找工作会比较容易,当然,学校的好坏也是一个敲门砖。
程序需要利用定时器和外中断等资源,合理分配资源来处理多传感器及计算等。以免影响MCU的实时性。这种情况基本上找个MCU嵌入式开发工作,可以胜任一些独立的小项目。
目前兔子我工作了5年了,在工作中也使用过RTOS以及uCOS嵌入式操作系统开发过产品。基本上做嵌入式驱动的上限就是把这种系统用好。
嵌入式也有算法方向。
兔子我最近准备转战嵌入式Linux。向爱好及工资继续前进。
-------2020年2月22日---------
兔子内部转岗Linux驱动开发。
前期看的是韦东山老师的视频,用的也是jz2440。后面觉得2440有点老,有兴趣的同学可以去看一下韦东山老师出的新开发板和新视频,新视频绝大部分是免费的,而且上Linux开发的节奏。
兔子我也是从jz2440->周立功的i.mx287->firefly系列的rk3288,rk3308开发板。慢慢一步一步走来。周立功的i.mx287我还特别写了知乎专栏。如果入门做一些嵌入式Linux应用可以关注一下我的专栏。
从51单片机到Linux