我的嵌入式软硬件学习
Posted “逛丢一只鞋”
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的嵌入式软硬件学习相关的知识,希望对你有一定的参考价值。
研究生和本科还是有着非常大的差距,本科大家可以浑浑噩噩,可以去专心考试,也可以去专心水竞赛,更可以专心去混社团学生会,参加各种文化活动
并且这些也都是本科阶段大家所认可的,有一两项突出就可以在本科有滋有味,拿奖学金,拿优学优干
可是到了研究生,之前可能引以为傲的都开始变得不重要,研究生的衡量标准只有学术能力、实践能力,也就体现在写论文和做实验
不仅衡量标准发生了变化,环境也发生了变化,研究生大家即使跟着同一个老师,研究方向也会不同,这就导致了研究生狭小的圈子变得更小,社交关系开始局限于宿舍和同门师兄弟
就这样,大家研究方向不同,各有各的生活方式,共同语言也仅限于生活的琐事,实验室的八卦,再也没有了本科一群人不同班级不同专业嬉戏打闹喝酒吃肉的生活
对于我看到的研究生而言,大家抱着最初本科考研为了提升学历找个好工作的心态可能会让一部分人的研究生生活不这么纠结
因为研究生的导师制,学生的上限和下限很大程度是导师决定的,并且僧多肉少,这么多的研究生,很难雨露均沾,都享受到足够的科研资源
这里的科研资源指的是 天时地利人和下导师有精力有项目可以进行资源的投入和学生的培养,一切都是刚刚好
可大多数情况下是,老师们一次次的苦口婆心,精力、时间、金钱换来的是学生的摆烂和达不到预期,面对这样的学生,被消耗的信任很难在一茬又一茬的学生中建立起来
研究生招生入学的学生又是五湖四海,什么样目的、什么样基础的学生都有,并且不同于本科生,研究生的学习方式,待人待物都已经固化,很难通过教导进行培养
就这样,导师的选题和研究方向万一再不是学生的兴趣和擅长,考上研究生无疑是一切痛苦的开始
对我来讲,要么是端正态度,用百分之二百的努力去努力达到要求;要么端正方向,跟老师促膝长谈换方向,自己对自己负责;要么是就地摆烂,能毕业就行,达到学校最低毕业要求即可
导师和学生相见恨晚本来就是小概率的事件,学习本来就是个经历痛苦的过程,从来也没有人要对自己负责。认清了现实,认识到导师带研究生也只是他作为学校老师多项工作中的一项工作
实在是上岸了才发现自己不适合学术,那就去达到毕业要求,去做自己想做的,三年的时间足够去不断地试错,找到自己的适合
本来就只有少数人适合学术,何苦难为了自己,又难为了导师呢
回到我自己,接着说嵌入式软硬件的学习
在研究生入学时,心想本科解除了单片机,研究生要是继续学习那不得学一个牛X一点的,怎么也得是FPGA
那时候的我对单片机认识还过于浅显,仅仅是控制两个IO引脚就觉着单片机不过如此。丝毫没见识过单片机冰山下的深海,汇编、内存管理、通信协议、驱动、BL、计算机体系结构…
跟卢老师交流后,因为有一些单片机基础,会写点C语言,决定还是先学一学STM32,毕竟最近的项目需要用到,当时还满心欢喜的安排着先学STM32,研二再学FPGA,到时候二者相结合,完成毕业设计
谁能想到,刚过完第一学期就碰上了该死的疫情,一切计划都被打乱了
研一上学期在学校主要是跟着正点原子做了STM32的实验,并对程序进行修改,实现一些特定的功能需求(PS:单片机的学习除了各位老师,第一个要感谢的就是豪哥
正点原子的资料还是非常值得推荐,但是我建议要用最快的时间把STM32的实验过一下,对以后可能用到的部分着重看一下原理,不要花太多时间,不要花太多时间,不要去纠结于一些自己可能永远不会用到的实验
正点原子作为入门教材非常的好,可以由浅入浅的最快让我们了解到我们要做什么,以及怎么做,和为什么这么做
在简单的部分,如打控制蜂鸣器,串口什么的,可以发现正点原子讲的很好很细致,但是仍然会感受到正点原子例程的束缚,以及扩展性太差,程序也大都是为了演示功能而存在,实战意义差(当然这并不是要甩锅正点原子,人家本来就是入门开发板
我受不了正点原子是当讲到以太网时,开始跳跃式的避重就轻,我关心的IO配置,LWIP修改都介绍的模模糊糊
我想应该是因为这部分涉及到的知识面过多,无法面面俱到,即便是例程,也只是在正点原子本身开发板的基础上进行功能实现,功能嵌套
本质上是大家在学习正点原子教程时,都是用的是较老的“标准库”版本,都是以固定的纯代码为基础,当牵扯的功能较多时,会导致整个程序看起来非常混乱,并且移植性很差(主要原因是没有使用ST官方提供的CubeMX工具,这个后面详细再讲
时间来到了20年年初,突如其来的疫情导致无法返校,一切噩梦的开始,软硬件的学习在家几乎是寸步难行,为了减少疫情影响,STM32F407的开发板还是辛苦卢老师邮寄到家中(正月十六
起初是打算做一个之前项目控制板的升级,但是由于我的拉跨,器件清单都没整明白,再加上在家中实在无法支撑,后来也就不了了之了
时间来到了3月底,一个机会到来,需要帮赵老师做一个假负载的主控模块
很快,结构图到手了,虽然现在看起来很简单,但对我来说,除了按键、蜂鸣器我能100%保证,其他要么没接触过,要么没听过
当任务到我手上时,我相信自己能做出来的唯一底气或许真的就是卢老师的技术支持,也有着一股初生牛犊的感觉
第一个难点就是要画PCB,要说单纯的画PCB我敢画,但是从需求分析,到原理图设计,再到器件选型,以及PCB拓扑结构,最后投板应用,这一套我是真的慌,PCB几乎零基础,仅仅自学了怎么连线,可以说两眼一抹黑
第二个难点是需要在STM32F103平台进行开发,之前我一直使用的是STM32F407,虽说大同小异,但还是会有点犯怵,毕竟没搞过,不知道里面到底有多少的坑
第三个难点那就是像串口屏、频率检测、信号调理这些个“新鲜”玩意儿,有些只是听说过,在文字里能感觉到一丝丝的熟悉,而有些压根没见过,脑袋里连个概念都没有
第四个难点,我,在家,几乎除了一台笔记本,一个STM32F407开发板,就什么都没有了
在一切正式开始前,决定先进行功能实现的验证,试试能不能把几个比较难的骨头啃一啃
先买来了串口屏,试试这玩意儿到底怎么用,指令怎么发和怎么接收
随之而来的是一个又一个的设计文档,说明文档,对我而言,最缺的是时间,必须尽快掌握设计的方法
文档中能搜集到的有效信息就是如何通过指令对串口屏进行控制,验证串口屏的可用
然后就是去找串口屏有没有别人已经写好的库,可以直接调用点线面的设计,甚至是显示汉字的函数,在折腾了几天后,终于找到了库函数
简单的通过函数在串口屏绘制了几个方框之后,后面就是逻辑的叠加了,达成设计只是时间问题
接下来就是验证ADC的检测,这也是控制板的核心功能,通过ADC来检测功率映射过来的电压
研究正点原子的例程后,确定了可以魔改的部分,以及可以调用的接口函数
就这样,前期的验证工作告一段落了,接下来,游戏开始!
首先是原理图的设计,之前对数字电路的认识仅存在于数字电路课本,再多一点就没有了
原理图心想或许也可找一个别人的参考抄一抄?
出发点很好,但也一步迈入了一个大坑,先设计最小系统,本来盘算着最小系统还能有问题,MCU+晶振+电源+复位+Boot,这不就OK了
晶振就首先出了问题,参考了几个图之后发现晶振各有各的频率…
至于为什么晶振选择这个大小,以及选择这个大小后程序能不能正常运行,这可让我犯了难,最后还是选择了最稳妥的参考,参考正点原子的!毕竟要在正点原子的例程上进行魔改
在设计过程中,考虑到正点原子用的元器件我不一定可以找到一模一样的,所以还要对全部的元器件进行替换,替换成已知封装
然后是ADC缓冲运放电路通过一个SMD接口接入,主要包括一个限位器,和一个运放
因为STM32的ADC集成在内部,所以通过IO口直接输入,但是通过芯片手册可以发现对应引脚最大输入电压3.3V,这就需要限位器进行分压,防止芯片被烧毁
最难的还要数电源的设计,这次只能靠MP2359芯片手册了,啊,这就是优秀的芯片手册,依葫芦画瓢原理图就可以了
看到建议PCB的拓扑结构后,我懵了,这是个啥,怎么还画画了
严格按照数据手册参考布局,之后应该是这样的,颠覆了我PCB只能画线的认知
继电器需要的驱动电路,蜂鸣器需要的放大电路,风机检测需要的防反接电路,也都是一步一个坑的走过来的
不能说是死缠烂打吧,也是抱着卢老师大腿不放了,最后好歹两个星期搞定了硬件设计
这两星期,其中酸楚也只有自己知道了,做梦都是在调整拓扑结构,都是在更换器件封装
硬件设计完成后,开始软件设计,这部分虽然也有很多坑,但相较于抽象的硬件设计还是简单了不少
因为硬件和软件都是我自己设计,在测试过程中出现的所有问题也只能自己背锅
印象深刻的就是风机检测电路,对软件而言,就是一个简单的判断IO输入是高电平还是低电平,但是始终没有办法检测到输入变化
因为自己也是大姑娘上轿头一回,一度无法判断是自己的软件有问题还是硬件有问题,毕竟可能都有问题
最后还是在卢老师的提醒下,用多块板子进行了交叉验证,锁定了问题出在了防反接器件BAV99上,是公司那边焊接错了元器件,用电烙铁拿掉器件之后,功能一切正常
就这样,折腾中,边验证硬件功能,边实现功能逻辑,五六天结束了这个简单设计,主要就实现了一些人机交互,状态更新,ADC映射、温度检测的一些逻辑
温度检测用的也是模块,LM75,直接通过IIC就可以读取到数字温度了,非常方便
难得也就是整个界面的交互策略,设计不好的话操作起来容易反人类,这个看起来简单的交互,甚至也经历过完全的重写
后来为了写小论文还设计了一个上位机
本来以为万事大吉,终于可以收工,可以度过一个轻松的5月,结果在公司那边调试测试的过程中,发现功率映射始终不正确,才发现其映射关系不是线性的,经过反推参数,最后确定了映射关系,这才算告一段落
半年后,为了写小论文,给这个小板又增加以太网功能,顺便将“标准库”移植到了开发更方便的“HAL库”,不过这都是后话了
STM32的学习还远没有结束,真正的考验还在8月,今天就到这里了,已经四千字了,下次再见
2022/05/12
以上是关于我的嵌入式软硬件学习的主要内容,如果未能解决你的问题,请参考以下文章