几十年前的电子爱好者,最喜欢的就是电烙铁、面包板和收音机;十几年前,出现了单片机,于是玩具就成了电烙铁、面包板和单片机;到了2015年,贴片技术的不断普及,让面包板不再那么有用武之地,经济的发展也让现成的板卡价格降到了一个合理的范围,购买现成的电路板,甚至自己打样电路板来使用,已经成为了一个趋势。现在,我们面前的选择就空前的丰富,一方面,是以Arduino和树莓派为首的开源硬件阵营,另一方面,则是以STM32、51和S3C2440为首的传统单片机开发板阵营。笔者根据自己的使用体验,与读者简单谈一谈它们在开发应用上的区别。

分类无论属于哪个阵营,它们用的CPU都得分成MCU(微控制器,或者称为单片机)和MPU(微处理器)两类,它们的本质区别在于MMU(内存管理单元),也就是对于虚拟内存空间的支持。树莓派和S3C2440就属于MPU类的,而Arduino和STM32就属于MCU类的。它们在运算能力上有巨大的差距。

△  树莓派

 

△ 传统单片机

△ Arduino

基于上面的分类,如果把它放到一个天梯图内,我们就能得到这样一**源硬件的比较图。
性能天梯图
需要注意的是,这张图只比较了它们的纯运算性能,越靠上的,运算性能越强,但是这张图并不是按照比例画的,实际上,树莓派的运算性能可以达到Arduino的100倍。接下来,我就根据上面的两种分类方法来讲讲它们的区别。
性能的差距广大的电子爱好者可能一直有一个疑问,那就是树莓派和单片机或者树莓派和Arduino的选择问题,其实也就是MPU和MCU的选择问题。 这里又得分两种情况讨论,一类是没有学过任何东西,想直接拿树莓派入门的,另一类是在玩过Arduino或者51单片机之后想要玩玩更高端平台发。

先讲讲第一类。对于第一类玩家,如果已经有了编程基础,可以直接试着玩树莓派,如果只是把树莓派当成一个小型PC或者低功耗服务器,完全没有问题。对于编程水平好的,我更推荐CubieBoard CC80或者Jetson TK1,因它们的性能会强大很多,玩起来会更加舒服。如果没有编程基础或者想要玩软硬结合的,还是建议从PC编程或者Arduino、单片机开始学**。 对于第二类,选择就不那么简单了。首先要知道,在过去(其实抛开开源硬件,现在也是一样),MPU是一种很复杂的东西,一般得熟练掌握单片机之后才能去接触MPU。而且MPU通常涉及到Linux内核的修改、Linux驱动的开发、Linux软件的编写这类事情,需要的知识储备很多。对于一般爱好者来说,玩MPU完全就是天方夜谭。但是MPU又是那么吸引人,数百兆的主频,数十兆的存储空间,是MCU根本无法想象的。MPU就像是一台真正的PC,而MCU只能算个玩具。国外的开源硬件大佬自然也看见了这一点,于是就有了树莓派这样的产品。树莓派就是融合了开源硬件易用性和MPU强大功能的产品。现在,对于想要玩高端平台的爱好者,最主要的选择就是树莓派和STM32(虽然它们根本不是一个量级的东西,但是由于2440类的东西开发难度太大,业余爱好者一般较少涉足)。那么我们就来对比下,树莓派和STM32分别能做什么,都能做的东西开发起来有什么区别。
1. 只有树莓派能做的:机器视觉、视频解码、3D游戏等。
2. STM32和树莓派都能做的:飞控、3D打印控制、音频解码、网络监控、物联网传感器等等。
3. 只有STM32能做的:基本没有。
小结STM32能做的,树莓派都能做树莓派能做的,STM32不一定能做
再来看看对于都可以做的东西,两者开发上有什么区别。以网络视频监控为例吧。STM32的开发流程是这样的:硬件选型→设计PCB→焊接→调试硬件→编写DCMI和RMII驱动→移植TCP/IP协议栈→调整摄像头驱动→编写网页服务器程序→完成。其中涉及的代码量非常大,不过好在都比较基础,爱好者还能应付一下。而树莓派的开发流程则完全不一样:买一台树莓派和一个摄像头→把摄像头连接到树莓派上→在树莓派上安装一个监控软件→完成,简直就像玩一样,半个小时就能完成。 对于爱好者来说,树莓派确实是利器,不用很长的时间就能实现很棒的效果,自己写程序也不是太复杂,就参考PC上的Linux程序编写教程就可以,因为网络协议、图形库这些都是现成的,省去了很多麻烦。不过,有利也有弊,树莓派是个高度封装的东西,如果想要借此学**ARM Linux的基础开发,我还是劝你转投2440的怀抱,因为树莓派说是开源硬件,但是实际上它的底层Bootloader和核心数据手册是闭源的,对于应用开发没有影响,但是学**原理就要命了。另一点,就是成本。如果你做的这个东西要量产,那么成本就变得很重要,基于STM32的网络监控方案可以比基于树莓派的方案成本低一半以上,这可是十分吸引人的。当然我只是举个例子,实际上,目前市场上网络监控用的既不是STM32,也不是树莓派,而是专门定制的ARM9。 那么对于爱好者,STM32有什么意义呢?看起来似乎上面提到的两个弊端都没什么关系啊。让我说的话,STM32的优点就是更为基础,这个理由和上面对于51单片机的观点是类似的,玩STM32可以学到更多基础的知识,脚踏实地慢慢来,路上的风景也很精彩啊,从零开始,看着自己的作品一点点完善,难道不是一件很有趣的事情吗?功利地说,如果要从事电子工程师的工作,这些知识和经验将会十分有用,因为工作也是和基础的东西打交道,无论是MCU还是MPU都一样,将要面对的,是**裸的原理图和源代码,而不是apt-get install。
总结讲了那么多,不知道大家对于这些东西的区别有没有一个大概的了解。我写这篇文章,并不是想告诉你“STM32好”、“树莓派超级棒”这种观点,而是希望大家能根据自己的爱好和需要,选择合适的产品,而不是盲目跟风。最后,祝大家玩得开心!

树莓派、 Arduino 、传统单片机开发板该如何选择?的更多相关文章

  1. x86 版的 Arduino Intel Galileo 开发板的体验、分析和应用

    1.前言 在今年(2013)罗马举办的首届欧洲 Make Faire 上,Intel 向对外发布了采用 x86 构架的 Arduino 开发板:Intel Galileo.这无疑是一个开源硬件领域的重 ...

  2. 1. Arduino对第三方开发板的支持

    Arduino对第三方开发板也有支持接口,需要手动添加,我们以STM32系列为例,说明添加过程. 目前st的官方提供的一系列板子都支持Arduino,可能是Arduino-IDE更新太慢,目前版本没有 ...

  3. Arduino与Air800开发板使用UART通信:传输DHT22传感器数据

    硬件介绍 Arduino Leonardo在数字引脚0(RX)和1(TX)进行串口通信时是使用“Serial1”,USB的串口通信使用的是“Serial”.在数字引脚0(RX)和1(TX)与USB是相 ...

  4. 华大单片机开发板HC32L13X上手入门

    HC32L136开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分).二者中间通过邮票孔相连,如果将板子从中间掰开,板载调试模块就可以当一个CMSIS-DAP的仿真器来使用.此 ...

  5. 【Arduino】开源开发板说明

    来自世界各地的新型微控制器层出不穷,这类开发板多数都是通过Arduino改进的版本,例如由Arduino所改良的Yún一样,主要是针对网状网路进行改进或升级了其它无线功能. 但一些开发板也有着其独到的 ...

  6. Ubuntu16.04 Arduino UNO R3开发板

    使用的是国内改过的版本, usb芯片换成了ch341, 晶振不是原版的16MHz而是12MHz, 杜邦线孔布局和原版一致. 设备连接 在Ubuntu16.04下不需要驱动, 能直接认出ch341设备 ...

  7. 用arduino的uno开发板为nano板子烧写bootloader

    这篇文章,是为了记录下某宝上淘到的一个没有bootloader的nano开发板的历程(比较坑),自己搜索资料而记录的. 如果没有bootloader,板子就不能接收上传的程序,什么也干不了. 烧写bo ...

  8. 华大单片机开发板HC32F030上手入门

    HC32F030开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分).二者中间通过邮票孔相连,如果将板子从中间掰开,板载调试模块就可以当一个CMSIS-DAP的仿真器来使用.此 ...

  9. 51单片机开发板(W25Q16学习)

    教程资料 链接:https://pan.baidu.com/s/142JRSPisQO2Cu6VZ2Y5YrQ 密码:eom0 今天测试开发板的W25Q16(16Mbit--Flash)写一篇文章备忘 ...

随机推荐

  1. 3.3常用类(java学习笔记)Runtime与Process

    一.Runtime 我们来看下文档中对Runtime的说明: 每一个java程序都有一个属于Runtime类的实例,它允许程序连接到程序运行环境. 当前runtime可以用getRuntime()方法 ...

  2. iOS中用json接收图片的二进制流

    标题可能说的有点混乱,再好好描述一下我遇到的问题: 我负责做一款App的iOS版本,服务器和Android版本都开发完了.服务器的图片存的不是路径,而是在数据库中的blob流对象,由于要求所有数据都用 ...

  3. [HTML/CSS]uploadify自定义按钮样式

    概述 在项目中经常用到uploadify上传插件,但是FLASH按钮的外观往往跟我们网页的设计的主题色不太搭配.这时就需要对其样式进行修改. 样式文件是uploadify.css. 打开这个文件后,你 ...

  4. [转] Matlab与C++混合编程,添加OpenCV库

    原文地址 峰回璐转 最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍 受.软件立刻移植到C++上又不太实际,故采用 ...

  5. codeforces round #264(div2)

    A题   我仅仅想说题意非常坑,一不小心就会wa,哎,不机智的我居然在最后判题的过程中错了,少加一个推断语句. 错的值了,你说呢? #include<map> #include<cm ...

  6. 利用CMD查看系统硬件信息

    利用CMD查看系统硬件信息对于在windows下查看系统信息大家一定不陌生了,我现在说几个最常用的方法,对命令感兴趣的朋友看看,(给菜鸟看的,老手就不要笑话我了,大家都是从那个时候过来的,^_^).一 ...

  7. Qt 之 模仿 QQ登陆界面——样式篇

    一.简述 今天晚上花了半天时间从QQ登录界面抠了些图,顺便加了点样式基本上实现了QQ的登陆界面全部效果.虽不说100%相似,那也有99.99%相似了哈O(∩_∩)O. QQ好像从去年开始,登录界面有了 ...

  8. 第十五章 MySQL 数据库

    学习要点:1.Web 数据库概述2.MySQL 的操作3.MySQL 常用函数4.SQL 语句详解5.phpMyadmin 一.Web数据库概述 现在,我们已经熟悉了PHP 的基础知识,这是我们想暂时 ...

  9. Kafka server.properties配置,集群部署

    server.properties中所有配置参数说明(解释) broker.id =0每一个broker在集群中的唯一表示,要求是正数.当该服务器的IP地址发生改变时,broker.id没有变化,则不 ...

  10. mapreduce实现搜索引擎简单的倒排索引

    使用hadoop版本为2.2.0 倒排索引简单的可以理解为全文检索某个词 例如:在a.txt 和b.txt两篇文章分别中查找统计hello这个单词出现的次数,出现次数越多,和关键词的吻合度就越高 现有 ...