天天看点

嵌入式学习路上的一些总结大学工作 总结:

出来工作也有快两年的时间了,总结一下自己在嵌入式学习的心路历程:

大学

       大一期间一直待实验室敲C语言。真正玩起的单片机还是从大二开始的,当时实验室导师自己做了一批IAP15的单片机,但是没什么资料,上手很难,于是自己就花了几十块钱买了块STC89C52的单片机,就跟着视频教程走,点灯、点蜂鸣器、做密码锁和搞矩阵按键等等。记得大概是大二末期,老师让实验室的成员每个人想一个单片机项目报给他,然后按计划实施,当时那段时间我喜欢上了无线传输,像什么蓝牙、ESP8266、NRF24L01和红外NEC传输都再玩,觉得很有意思,看不见摸不着的东西在自己手上实现了数据传输。于是乎就报了无线红外空调遥控器,其主要功能:

       ① 学习实验室格力和美的空调遥控器的开关键码,实现对空调的控制。

       ② 实现键码掉电保存。

       ③ 增加WIFI模块,实现手机控制收发。

        最开始,我在某宝上买了一块可以支持收发的红外模块。当时带红外发射同时又带红外接收模块的单片机不多,找了好久才找到了一个卖家。好像是做什么项目剩的几个,也是STC15系列的主控,卖家很好,送了我一个demo,能够实现红外解码功能的,当时也不知道怎么验证,就只会串口printf打印。仅仅只有这个小模块,怎么才能实现我的无线空调遥控器项目呢?首先这个模块也没法外接WiFi模块,权衡之下只能先在这个板上调红外功能,然后自己做板添加其他硬件模块。于是我就拉了实验室的一个同学合作做这个东西,他重点负责硬件画图,我就重点负责软件功能设计。

        因为都是小白呀,所以一切都得从头做,我就负责在之前的小模块上调试软件,他就照着这个小模块的原理图做图,每天七点钟去实验室,晚上十点钟离开(该上课上课)。当时调试过程遇见了很多棘手的问题,这里列举一二:

      其中有一个很烦的问题,买的那小模块经常下不进去程序,硬件一点都不稳定,非常影响进度。怎么办呢?找卖家返修。老板人也不情愿:就一个几十块钱的小的东西,你来来回回找我好几遍。最后软磨硬泡终于给我换了个,然后老板人直接商品下架了。换了以后,刚开始用的挺好,最后还是会出现程序下不进去,很迷茫呀!不知道为啥,也不能找卖家了。模块总是出一些乱七八糟的幺蛾子,进度几次出现停滞状态,最后实在没办法,寻求实验室老师帮助,老师给我们换了主控芯片,就好了很多。

       还有就是软件实际调试发现,格力和美的人遥控器的数据协议跟你书本上的不一样呀!书本上是16个字节好像,但是当时我们实验室那两个品牌的空调好像一个是36+36个字节另一个是48个字节(时间太久,记不太清了)。关键是格力(还是美的)会发两遍,中间有一个固定时长的低电平连接,实际测试中少发一遍都不能控制。最后没办法不能按书本上的来,实现对这两种品牌的定制化编程,因为两者的起始码时序不一样的,可以凭借这个识别是哪个品牌,进而实现定制化编程。

      历经三四个月,终于板子图PCB出来了,打印墨纸,腐蚀铜板、焊接元器件,无线空调遥控器V1.0 硬件总算出炉了,第一次下程序很谨慎呀,生怕哪哪弄不好把板子烧了,其实板子也没有我们想象那么脆弱,只要保证电源电压不给高了就行。三四个月的时间,我对红外NEC通信协议研究的七七八八了,在小模块上基本实现了对空调的控制(通过按键触发)。最后在做出来的大板上,程序跑的跟小模块一样,能够实现基本的控制。但是有一点缺陷,距离太**近了,实测是在1米之内,但是人家遥控器就能在五米前后精准控制,起初怀疑是不是功率不够呀,又是改电阻又是换电容的,换上之后好像是有点改善,1米内能够稳定控制,2米稳中带虚时灵时不灵的。千思百想不应该啊!总是怀疑电路问题,突然有一天,突发奇想测测遥控器的红外发射管的波形,上了逻辑分析仪,一测!发现门道了,人红外加的载波跟课本上的不一样呀!书上说是38KHZ频率的载波,但是人家用了76KHZ的红外载波呀!于是,在软件上改定时器周期,加大了载波频率。满怀激动的测了一下,终于成功了,且距离大大提升基本和遥控器的控制距离不相上下!我和另一个同学非常正式的握了握手:“合作愉快!”

        这个项目最基本的也是最难的就是红外键码的学习和发射了,再后来,为了那这个作品去参赛,我们又完善了WiFi功能、添加了DHT11模块和ds18b20模块,同时又拉了两个同学组成团队,他们负责安卓的app开发和电脑端的上位机开发,实现电脑端和手机与硬件的WiFi数据交互。进了国赛,拿了二等。还有一笔不错得到奖励金,高兴!

       当时就是这个项目,让我的单片机编程能力有了一些小提高,可以说是完全入门了。学会了画原理图,对电路也有深一步了解,会用逻辑分析仪、建立通信协议、各种串口交互架构搭建和调试方法等等。最后在大三末大四初的那个暑假留校,开始着手自己的毕业设计了,是stm32单片机作为主控的,这期间对stm32有了进一步的学习,嵌入式编程能力也步上新阶段。

工作

         大四的上学期11月份,做完毕设就出来实习了。入职了一家搞IOT的方案公司,主要负责搞共享项目的,其主要由GSM模块+单片机构成,其中GSM通过MQTT/HTTP连接到阿里云,公司会做一个自己的平台连接到阿里云上,我主要负责硬件连接阿里云以及与阿里云数据交互,其实主要就是做Json的封装与解析以及单片机对底层控制逻辑。当时闹了个笑话: 我最开始把Json叫成Jason,被阿里云的技术吊: Jason是人名! 除了做这个,还会做stm32的一些项目。记得有一个: 当时老大丢给我一个电机小模块,就是门上的电机小锁,集成一个单片机+电机+GSM,我就负责驱动电机和降低功耗。最后待机做到几百uA,但是手册写的好像是能达到10几uA好像。前后也做了好几个共享的项目,不过都是现成的代码,自己在里面加功能。唯一有一个自己独立实现所有代码逻辑的项目,还黄掉了(功能都做齐全了!)。带我的老大,话很少,但是单片机的能力经验还是很强的,从他身上我又学会了很多编程和调试的技巧,也学会了keil工具debug的更多使用方法。

        毕业后,跳槽到了现在的公司,最初做的也是单片机IOT,公司架构调整以后,转到了安卓驱动,当时一门心思想搞linux驱动,觉得linux更有趣且以后发展也会更好。买了一块韦东山老师的imx6ull开发板,跟着手册学习。也会参照安卓驱动来写一些驱动放到imx6ull开发板运行。

总结:

本篇就是对自己入门嵌入式的前后的一个小总结,路线就是C语言 --> 51单片机 --> stm32单片机 --> Linux。

几点对自己的忠告:

    1. 原则上,不要因为一些特例否定正确的原则。不要因为身边的人,轻易放弃自己的初心。别人做不到的事情,不一定自己也做不到,总结别人的失败,充实自己的想法。 

    2. 技术上,学习与沉淀。大方的将自己的经验与代码开源到网上让更多人看到,自己玩自己的,进步不会太大。如果自己的观点有错,坦荡的承认,真正的大牛也不会与你计较。

    3. 为人上,不要把别人身上看不惯的毛病在自己身上重现。

    4. 处事上,万事留一线,对于所有可能性,不要一票否决。不要过多去争论一些没有意义的观点。谦虚的对待每一个人,不要轻易忽视他人的观点,思考别人说不定对你就有启发。

    5. 学习上,多做笔记,遇见一个需要思考过的问题,就立马记下来。

     最后,也是众所周知的道理:认准一件事,踏实的坚持下去。正确的坚持是成功另一个宏定义!