#杂谈 个人嵌入式开发的学习

本人目前从事的是嵌入式软件开发的相关工作。这是一个关于个人做项目时用过的开发工具的杂谈,仅是为了记录学习经历,同时也为和我有同样瞎搞东西的爱好者提供一个学习思路。


前言

我的技术栈:
下面介绍一下我用过在或者还在用的开发工具,实际上有的因为平常搞东西很少用到,有的都不太上手了,也请各位看官酌情参考。

单片机:arduino、AVR、C51、STM32、ESP8266、ESP32、MSP430/432、中微Bat32

编程开发:C、C++、Python

电路设计: AD(altium designer)、立创EDA

机械结构设计: AutoCAD、Solidworks、CREO\PROE、Fusion360。

不务正业的: APPinventor(图形化编程)、PS修图、PR视频剪辑、AI排版


一、单片机学习

arduino
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。arduino本质就是一个8为寄存器的avr单片机,只是一些热爱折腾的人为它做了很多封装好的函数库,而且把这个单片机最小系统集成到一个板子上,并用“arduino”来称呼,使得它能让初学者不需要了解单片机底层就能迅速上手。个人而已,它更适合做一些对性能要求不高,类似玩具之类的东西。

arduino是我刚上大学就接触的,我还记得在小黄鱼上花了一百多块钱买了一套人家做小车剩下的套件,利用军训的空余时间在宿舍里捣鼓。以至于半夜熄灯的时候,室友都睡着了,我还在搞流水灯的程序,宿舍还一闪一闪的。后来又接触了L298N电机驱动、循迹传感器、蓝牙模块这类电子模块,一个月后搞了一辆蓝牙小车,体验到了用手机APP控制小车的乐趣,也因为这个小车我有幸进入了院系的实验室,后来又用arduino uno做循迹小车参加学校的机器人比赛。
arduino中文社区:https://www.arduino.cn/


51单片机
是对兼容英特尔8051指令系统的单片机的统称,atmel的at89c51和国产宏晶的stc89、stc15w都属于51单片机。因为51单片机的指令系统、内部结构相对简单,所以国内许多高校用其进行单片机入门教学。

我是大一时开始学51单片机,当时在小黄鱼上买了一套二手的普中科技开发板,别人做毕设用剩的,用的就是比较典型的STC89C51这款芯片,当时一下课就回到宿舍便看视频,边照着敲代码。从点亮一颗LED开始,到后来的定时器中断、串口中断,渐渐对单片机的系统有了一定了解, 比如大部分单片机共有的时钟电路、复位电路还有下载电路这些都有了初步认识,以后学习的各类单片机其实都是基于这个框架进行延申拓展。大三的时候,《单片机原理与接口技术》教的就是51单片机,有意思的是,这门课竟是个理论课,课堂上老师都是照着书本念到下课。一周一次的实验课,连个开发板都没有,都是用Protues在一台旧电脑上进行仿真,然后写实验报告完事。学习还得靠自己。


stm32
STM32是意法半导体(ST)推出一款32位的单片机。STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性、极低的开发成本等优势。STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多32位单片机中脱颖而出,也是目前很多公司还在用的。

这也是我目前工作最常用的了。这是我在大二时候才真正开始学习的,那年寒假从学校实验室带回了一个正点原子的stm32f407的开发板,刚开始也是照着视频敲代码,看视频真的一脸懵,要弄那么多.c和.h文件,感觉这玩意比51单片机复杂多了,曾有一段劝退期,但是为了比赛需要,不能不硬着头皮往下学。后来参考网上相关资料,用stm32做了平衡小车、擂台机器人还有舞蹈机器人等等。


ESP8266
ESP8266 是一款超低功耗的UART-WiFi 透传模块,具备 GPIO、I2C、ADC、SPI、PWM 等功能。总的来说,ESP8266 是一个高性能的无线SOC,它的内部集成有超低功耗的32位微型MCU(单片机),主频支持80MHZ和160MHz,甚至能够跑 RTOS。


ESP32
ESP32系列采用Tensilica Xtensa LX6微处理器,包括双核心和单核版本,内置天线开关,RF射频模块,功率放大器,低噪声接收放大器,滤波器和电源管理模块。


MSP430/432
MSP430和MSP432都是大三时候应付电赛被迫学习的,这是TI(德州仪器)推出的两款单片机,其中MSP430是个类似51单片机的8位单片机,MSP432则是个类似stm32的32位单片机。电赛的时候就是用MSP432这款单片机做了一个信号失真度测量仪,说白了就是做一个示波器,用于测量任意信号的波形。


中微bat32
BAT32G系列是中微半导推出的高性能超低功耗MCU,其提供高速高精度的模拟外设,丰富的通讯接口,强大的DMA数据搬运功能,数字功能均可自由映射到任意端口等,最大限度地简化硬件设计,优化BOM成本。
它和stm32g0的类似,都是基于CM0+架构的32位单片机。出来工作后在公司做项目使用到的,但是这款芯片网上资料特别少,开发的时候主要都是对着官方的技术手册配置寄存器,而且手册和参考例程还有错的,程序出现问题了,但找不出问题所在,叫天天不应,叫地地不灵,一度搞心态。目前用这个单片机发展还不成熟,用的公司应该不多。

中微官网:https://www.mcu.com.cn/cmsproduct/ultra-low-power_8.html

我发现用了那么多单片机,其实各类单片机很多东西都是通用的,像GPIO、外部中断、定时器、串口这些外设在配置的时候,都是大同小异的。学习路线建议先学51单片机,特别是把中断、定时器、串口这个部分都理解透彻,再学stm32或者其他单片机会轻松很多。

上面说的所有单片机都是基于裸机开发的,想再玩的深一点可以学一下实时操作系统,可以同时执行多个任务,开发效率更高,比如VxWorks,QNX,RT-Thread ,还有FreeRTOS,正如名字一样免费的。据个人所了解,目前很多智能家居产品,特别是汽车电子、物联网方面的会用到rtos。我个人在校期间也自学了一段时间,在找工作中发现都是要3-5年经验的,一顿摸索之后还是先做着单片机裸机开发的。

除了单片机,也可以玩玩树莓派,这玩意相比单片机,它更像一台具备单片机功能的mini电脑,树莓派的部分引脚用2*40pin排针引出来,可以做单片机点亮一颗LED,然后插上鼠标、键盘还有显示器之类的就能具有电脑的所有功能。此外,树莓派在人工智能、图像处理方面也表现很突出,也可以用它来做个数字图传,实现航拍远距离传输图像。

也可以学学其他基于Linux平台的东西,买个AI开发板,学习ROS机器人操作系统。

当然了,上面说的两个,还得要在资金允许的情况下。目前树莓派4B价格涨到一千多块,然而一个stm32最小系统板才20块钱。


二、编程开发

C语言
C语言无疑是编程界的老大哥了,嵌入式用的基本也是C语言。其实我在2018年高考结束之后的那个暑假就在家学C语言了,当时买了厚厚的一本《C语言从入门到精通》的书籍在家偶尔啃一啃,主要还是看网上小甲鱼的零基础入门视频学的。指针还没搞懂,就会些if、for、while语句,模棱两可的学了一个多月,就上大学了。这也为我进入大学后玩arduino、C51单片机打下了一定的C语言基础。然后再经过课堂上的系统学习,再加上竞赛积累,对C语言的应用算是由浅入深了。目前在公司搞单片机开发用的也是C语言。
有关C语言的,我在另一篇文章有整理:梳理嵌入式单片机C语言基础
还有这篇:#学习总结 C语言编程规范

C++
学习总是一个循环渐进的过程,学了C,最好是往C++方向再学习。我学习C++是因为要用QT平台搞个上位机才学的,当时想弄个自己的串口调试助手,就学了几天QT,然后在B站跟着一个大佬手把手弄一个。在学QT过程中,涉及到C++的“类”这玩意,还有C语言常用的打印函数printf(),在C++中用的是cout<<。于是我果断从同学那花20块钱买了一本二手的书《C++从入门到精通》,厚厚的一本,正好可以当枕头用。更多的是在网上看视频学的,也是从那时起,我开始用上被广泛使用的代码编辑器VScode,看着纯黑的界面,比在学校教的VC++6.0炫酷多了。

python
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。python语法简单,我学习python主要原因是在学校搞摄像头识别物体的时候涉及到了openMV这玩意。openMV的主控是stm32f4,基于microPython开发的。microPython也可以移植到esp8266、esp32上,让开发更加简单。python还可以做一些小游戏之类的。

至于要不要学汇编,刚毕业的时候也这样问过一位干了10多年驱动开发的老师傅,他给出的建议就是如果要干驱动开发的话,学习汇编有助于深入了解底层,知道系统是如何启动的?中断产生之后,cpu是如何处理的?
如果是干偏向应用开发的就不需要学汇编,学好、用好C语言就足够了。


三、电路设计

Altium Designer
简称AD,是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统,主要运行在Windows操作系统。这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件使电路设计的质量和效率大大提高。

立创EDA
立创EDA是一款基于浏览器的,专为中国人设计的,友好易用的EDA设计工具。服务于广大电子工程师、教育者、学生、电子制造商和爱好者。致力于中小原理图、电路图绘制,仿真,PCB设计与提供制造便利性。而且立创EDA拥有超过100多万在线免费元件库,并在实时更新。可在设计过程中检查元器件库存、价格和立即下单购买,缩短设计周期。
立创EDA目前有两个版本,立创EDA专业版和立创EDA标准版。标准版面向学生,教育,功能和使用上更简单;专业版面向企业,团队,功能更加强大,约束性也更高。

咱们玩单片机的,能用AD或者立创EDA画个简单的最小系统板,实现驱动相关模块,满足日常搞搞东西的就行。在工作中大部分情况下,能看懂原理图配置引脚就行,咱们又不是干PCBlayout的,也不涉及高速PCB,因此没必要把那些电路绘图工具玩得那么深。


四、机械结构设计

出身于机械电子工程专业,怎能不懂机械原理和机械设计呢。
AutoCAD:是Autodesk公司首次于1982年开发的自动计算机辅助设计软件,用于二维绘图、详细绘制、设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具。AutoCAD具有良好的用户界面,通过交互菜单或命令行方式便可以进行各种操作。它的多文档设计环境,让非计算机专业人员也能很快地学会使用。

这款强大的二维绘图开发工具无论是机械的,还是电气、土木、美术的都会用到。

Solidworks
SolidWorks软件是由达索公司开发的世界上第一个基于Windows开发的三维CAD系统,使用方便,适合做机械非标产品。

CREO\PROE:CREO和PROE其实是同一个软件的在历代版本的不同叫法,PROE是先前版本名称,CREO是目前主流版本名称。它是美国PTC公司于2010年10月推出CAD设计软件包。Creo是整合了PTC公司的三个软件Pro/Engineer的参数化技术、CoCreate的直接建模技术和ProductView的三维可视化技术的新型CAD设计软件包,是PTC公司闪电计划所推出的第一个产品。Creo和Solidworks都是三维建模软件,最大的不同就是Solidworks更适合做机械结构设计,比如要实现一个运动机构的运作,设计时候更加注重考虑机械原理。而Creo更偏向于外观方面的工业设计,适合曲面建模,设计时候更加注重考虑材料的热处理,特别是模具成形与制造工艺。

Fusion360: Fusion 360 是一款基于远程服务的三维建模、CAD、CAM、CAE 和 PCB 软件平台,主要用于产品设计和制造。主要的特点可以理解为电路设计中的立创EDA那样,需要登录个人账户在线编辑,数据都储存在远程服务器那里。B站的稚晖君的平衡自行车就是用Fusion 360 画的。下图是我用Fusion 360 打开的一个开源机械臂的图纸。


五、业余瞎搞的

上面说的都是和工作相关的,下面说几个业余可以玩玩的,甚至学好可以用来做副业的。

APPinventor: App Inventor是一个完全在线开发的Android编程环境,抛弃复杂的程式代码而使用积木式的堆叠法来完成您的Android程式。对于Android初学者或是机器人开发者来说是一大福音。因为对于想要用手机控制机器人的使用者而言,他们不大需要太华丽的界面,只要使用基本元件例如按钮、文字输入输出即可。


APPinventor在线开发(广州入口):http://app.gzjkw.net/login/
增强版链接:https://app.wxbit.com

Ps和Pr: Adobe 的Photoshop和 Premiere ,一个是做图片处理的,另一个是做视频剪辑的。Ps是我在校期间因为需要到电子版证件照,懒得去照相馆,就在宿舍自学Ps抠图,换头像背景,然后又用来帮同学修图。
Pr是因为在校期间参加机器人比赛要提供PPT和作品展示的视频,被迫学的,在B站或者其他平台上发的视频都是用Pr进行剪辑的。

这两个学起来入门都不难,花点时间学些基本的,能满足自己瞎搞项目的设计需求就行,没必要学的太深,咱又不是专门干音乐艺术的。

Ai: Adobe Illustrator,Ai和前面的Ps、Pr算是Adobe三件套了,PS是最优秀的专业图像编辑软件,做出的图是位图。位图是点或像素方式来记录图像的,因此图像由许多小点组成。优点是色彩显示自然、柔和、逼真。缺点是图像在放大或缩小的转换过程中会产生失真,且随着图像精度提高或尺寸增大,所占用的磁盘空间也急剧增大。位图放大后图像会变得模糊。 而像Ai是用于绘制矢量图形的软件,矢量图,是以数学方式来记录图形的,由软件制作而成。优点是信息存储量小,与分辨率完全独立,在图形的尺寸放大或缩小过程中图形的质量不会受到丝毫影响。缺点是用数学方程式来描述图形,运算比较复杂,且所制作出的图形色彩显得比较单调,图形看上去比较生硬,不够柔和逼真。

我个人用Ai通常是用来做说明书、排版的。以下是我之前实习工作中用Ai做的CNC微型雕刻机用户说明书封面。


总结

以上就是关于个人嵌入式开发学习的杂谈,分别从单片机、编程语言、电路设计、结构设计还有业余爱好等方面介绍了所使用的开发工具和学习经历。希望能给爱折腾的人提供一个学习思路。学习永无止境,我只是个正在学习中的小菜鸟。

物联沃分享整理
物联沃-IOTWORD物联网 » #杂谈 个人嵌入式开发的学习

发表评论