本人目前从事的是嵌入式软件开发的相关工作。这是一个关于个人做项目时用过的开发工具的杂谈,仅是为了记录学习经历,同时也为和我有同样瞎搞东西的爱好者提供一个学习思路。
前言
我的技术栈:
下面介绍一下我用过在或者还在用的开发工具,实际上有的因为平常搞东西很少用到,有的都不太上手了,也请各位看官酌情参考。
单片机: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位单片机。出来工作后在公司做项目使用到的,但是这款芯片网上资料特别少,开发的时候主要都是对着官方的技术手册配置寄存器,而且手册和参考例程还有错的,程序出现问题了,但找不出问题所在,叫天天不应,叫地地不灵,一度搞心态。目前用这个单片机发展还不成熟,用的公司应该不多。
我发现用了那么多单片机,其实各类单片机很多东西都是通用的,像GPIO、外部中断、定时器、串口这些外设在配置的时候,都是大同小异的。学习路线建议先学51单片机,特别是把中断、定时器、串口这个部分都理解透彻,再学stm32或者其他单片机会轻松很多。
除了单片机,也可以玩玩树莓派,或者其他基于Linux平台的东西,学习ROS机器人操作系统。当然了,还得要在资金允许的情况下。
二、编程开发
C语言
俗话说的好“汇编生C,C生万物”,C语言无疑是编程界的老大哥了。其实我在2018年高考结束之后的那个暑假就在家学C语言了,当时买了厚厚的一本《C语言从入门到精通》的书籍在家偶尔啃一啃,主要还是看网上小甲鱼的零基础入门视频学的。指针还没搞懂,就会些if、for、while语句,模棱两可的学了一个多月,就上大学了。这也为我进入大学后玩arduino、C51单片机打下了一定的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还可以做一些小游戏之类的。
三、电路设计
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系统,由于技术创新符合CAD技术的发展潮流和趋势,SolidWorks公司于两年间成为CAD/CAM产业中获利最高的公司。
CREO\PROE:CREO和PROE其实是同一个软件的在历代版本的不同叫法,PROE是先前版本名称,CREO是目前主流版本名称。它是美国PTC公司于2010年10月推出CAD设计软件包。Creo是整合了PTC公司的三个软件Pro/Engineer的参数化技术、CoCreate的直接建模技术和ProductView的三维可视化技术的新型CAD设计软件包,是PTC公司闪电计划所推出的第一个产品。
Fusion360: Fusion 360 是一款基于远程服务的三维建模、CAD、CAM、CAE 和 PCB 软件平台,主要用于产品设计和制造。
五、业余瞎搞的
APPinventor: App Inventor是一个完全在线开发的Android编程环境,抛弃复杂的程式代码而使用积木式的堆叠法来完成您的Android程式。对于Android初学者或是机器人开发者来说是一大福音。因为对于想要用手机控制机器人的使用者而言,他们不大需要太华丽的界面,只要使用基本元件例如按钮、文字输入输出即可。
Ps和Pr: Adobe 的Photoshop和 Premiere ,一个是做图片处理的,另一个是做视频剪辑的。Ps是我在校期间因为需要到电子版证件照,懒得去照相馆,就在宿舍自学Ps抠图,换头像背景,然后又用来帮同学修图。Pr是因为在校期间参加机器人比赛要提供PPT和作品展示的视频,被迫学的,在B站或者其他平台上发的视频都是用Pr进行剪辑的。这两个学起来入门都不难,能满足自己瞎搞项目的设计需求就行,没必要学的太深,咱又不是干音乐艺术的。
Ai: Adobe Illustrator,Ai和前面的Ps、Pr算是Adobe三件套了,Ai通常是用来做说明书、排版的。
总结
以上就是关于个人嵌入式开发学习的杂谈,分别从单片机、编程语言、电路设计、结构设计还有业余爱好等方面介绍了所使用的开发工具和学习经历。希望能给爱折腾的人提供一个学习思路。学习永无止境,我只是个正在学习中的小菜鸟。