对比stm32,arm9研究方向的猜想

2019-11-07来源: 51hei关键字:stm32  arm9  哈佛架构

大二上的寒假,受老师的邀请,去到东莞实习了10天。虽然不是第一次去,但是这次的体会和上次有了很大的不同。这篇文章本来想从东莞回来就写了,但是一直拖到现在才写。在东莞,我工作位置的旁边是一个约27岁的大学生,他的职位大概是嵌入式工程师,他每天都在使用上了ucos2的STM32芯片进行编程。刚好我在学ARM9+LINUX,于是有时候我们也私下讨论了一下STM32和ARM9的那些事儿。


STM32是这几年很火的,有哈佛架构,性价比高,开发使用的函数库齐全等优点,这个芯片我本来也想在大一下的时候买块开发板来学,不过后来项目需要,所以学了ARM9。


在讲之前,问一个问题。假设有这样的一个项目,让你做一个数字示波器的控制和显示部分的模块,而采集模块和保护由其他芯片完成。问你应该采用ARM9还是STM32?(本文的ARM9代表冯诺依曼架构的芯片,而STM32代表的是哈佛架构的芯片)


个人觉得可能用STM32会实际很多。主要原因如下:


1. 芯片成本高。STM32的芯片大概十几元一片,而且像单片机一样,几乎一块芯片就可以做出一个最小系统。对比ARM9,不但要买相对比较贵的ARM9芯片,还要买上Nand flash和nor flash才能做出最小系统。TQ2440的核心板淘宝就买到200多了。


2. 做PCB的复杂。据说采用ARM9芯片的TQ2440的开发板中,它的最小系统用到6层板。据说做6层板,一次开模费就要1K多了。而且假如不按照TQ2440,选用自己的硬件方案来做最小系统,不知道又要画多少次板才行。


3. 对于项目,假如采用普通的界面(如仪器类界面)加普通的外设(如按键,串口等),真的要上Linux吗?上Linux系统的确会增加不少难度。从驱动编写,到Qt程序编写,再到系统移植等,从内核到应用层,这对于不少人来说,的确有不少难度。假如功夫不到家,还可能开发周期延长,甚至做出来的产品还不如用STM32做得好。而这方面STM32虽然是有点瑕疵,但是也做得不错。


4. 采用ARM9比STM32需要更多的人手。对于ARM9,假设上了Linux系统,又要做驱动,又要做界面,还要搞系统移植,每一项都是挺有挑战性的。大型项目用STM32可能就做不来了,但是小型项目,STM32的确不需要太多人手就能完成。而且,聘请一个嵌入式Linux的工程师也是价格不菲的。


以上就是我觉得ARM9的不足之处了。从上面看出来,假如用ARM9去开发一个用51单片机,或者用STM32就能完成的项目,真的有点大材小用了。所以,我觉得学ARM9,就应该研究一些STM32等哈佛架构的芯片无法比拟的方向。哈哈,假如别人用STM32或者AVR甚至51就能完成大部分功能,要你的ARM9干什么啊。

学ARM9,其实好多时间就是在学Linux。因为Linux这个操作系统真的很强大了,比ucos要丰富得多。


因此,下面我觉得学ARM9可以研究的一些方向:


1. 网络通信类。众所周知,世界上绝大部分的超级计算机和服务器都是采用Linux的。这归功于Linux优秀的网络栈。Linux的网络栈的出错几率小,支持的网络协议丰富。通信协议从互联网的到如今流行的wifi,蓝牙等都能够支持。网络这方面是STM32等哈佛架构的单片机无法比拟的。


2. 文件管理类。Linux有虚拟文件系统,支持绝大部分的文件系统,可以对磁盘里面的文件进行很好的管理。因此假如一些如MP4,PDA等需要对多文件操作的项目,更多会采用ARM9。


3. 绚丽的多界面类(或游戏机类)。普通的界面(如示波器等),用STM32是可以完成的。但是对于复杂的界面,用Linux就好多了。在Linux上,可以用Qt等软件制作特殊的绚丽的界面。此外,太多的界面也会让STM32吃不消。多界面会使程序的空间增大得很快,对于Linux那样,采用虚拟内存管理,1G的程序可以在只有128M的物理内存的机器上跑。但是STM32就不行了,没有MMU就没有虚拟内存的功能(暂时看来是没有MMU),假如128M的物理内存的机器就只能跑不超过128M的程序。况且,STM32有128M的内存吗?


4. 多种芯片的支持。Linux的可移植性好,假如一个项目需要换另外一种CPU,只要移植好Linux和相应的驱动,应用层基本不用改。但是移植Linux也是不容易的。

ARM9最大的优势就是可以跑Linux系统。假如能够真正发挥出Linux系统的优势,真的能让STM32等哈佛架构的单片机感到望尘莫及。但是STM32等哈佛架构的芯片,对于大部分中小型普通类控制项目,也是很有优势的。


既然选择了,就要风雨兼程。选择了STM32,就要挖掘STM32独特的优势,学精它;选择了ARM9,就要发挥出嵌入式Linux的优势。学东西最怕就是见到一样好就学一样,祝大家能够放下浮躁的心,学到自己喜欢的东西。学精一门总比样样都学而学而不精要好。


关键字:stm32  arm9  哈佛架构 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479258.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:4412开发板、PC、ubuntu通过网线连接
下一篇:2440裸机编程之十二 GPS

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm8s 低功耗模式
因为用干电池供电,又需要超长待机了,成本又限制不能使用stm8l,所以开启低功耗之旅1.元器件选型挑选低功耗的元器件,一定要关注工作电流led 一定要高电平导通,不然的话,默认状态拉高很费电元器件尽量选择共阴解法,更省电2.主时钟频率频率和功耗是成正比的,选择试用的最低晶振能不开的功能尽量不开下面是对应的功耗表ADC最费电3.合理使用低功耗模式主要有一下几种等待模式活跃停机模式停机模式下面是对比等待模式使用asm(“WFI”)进入会被各种中断激活活跃停机模式AWU是用来当MCU进入低功耗的活跃停机(Active Halt)模式时提供一个内部的唤醒时间基准。该时间基准的时钟是由内部的低速RC振荡器时钟(LSI)或者通过预分频的HSE
发表于 2019-11-20
stm8s 低功耗模式
简单介绍下关于STM8S的几种低功耗模式
STM8S105的低功耗模式总的来说有四种:分别是等待模式,停机模式,快速活跃停机模式和慢速活跃停机模式1、等待模式:可执行指令wif()进入等待模式,该模式下主CPU停止工作,但其外设不停,严格来说只能算是降低功耗而不能算低功耗,该模式可由AMU或外部中断唤醒2、停机模式:可执行指令half()进入停机模式,该模式下主cpu和外设全部停止,达到最低功耗,只能由外部中断进行唤醒。3、快速活跃停机模式:在执行指令half()之前,如果你使能了AMU功能,则进入快速活跃停机模式,该模式下由于主电压调节器打开,在受到AMU或外部中断触发时,可快速唤醒。4、慢速活跃停机模式:在快速活跃停机模式下,如果设置内部时钟寄存器CLK_ICKR
发表于 2019-11-20
简单介绍下关于STM8S的几种低功耗模式
Atomthreads关于STM8S低功耗的思考
Atomthreads像众多操作系统一样,在没有任务调度是会调用idle。static void atomIdleThread (uint32_t param){    /* Compiler warning  */    param = param;     /* Loop forever */    while (1)    {        /** todo Provide user idle hooks*/    }}atomthreads中
发表于 2019-11-20
Atomthreads关于STM8S低功耗的思考
STM8L051之低功耗停机配置问题
在做stm8L的小一个项目,由电池供电,当按键长按关机,系统进入停机模式,虽然系统运行的时候有十几毫安的电流消耗(还没使用RTC定时唤醒),但是在停机模式下电流消耗竟然还有1.33ma的电流,花了半天的时间找资料,看文档,在网上看到不少大牛能做到0.4ua,自己无论如何设置IO,外设都无补于事,停机模式下电流最低还有1ma。 最后只能将开机初始化的外设函数一个一个注释掉,包括ADC,DMA,beep,以及TIM4,最后发现只注释掉ADC的初始化函数,再进入停机模式,果然电流接近0,5ua,也就是说可能ADC模块在进入停机模式前的关闭设置不正确,之前的是这样的:void PerCLK_OFF(){  
发表于 2019-11-20
STM8S 自动唤醒AWU配置
也可以被用来校准蜂鸣器的频率。参考例程如下:uint32_t LSIMeasurment(void){ nt32_t lsi_freq_hz = 0x0;//测到的lsi的频率 uint32_t fmaster = 0x0;//主时钟频率 uint16_t ICValue1 = 0x0;//捕捉到的第一个值 uint16_t ICValue2 = 0x0;//捕捉到的第二个值 fmaster = CLK_GetClockFreq();//获取主时钟 AWU->CSR |= AWU_CSR_MSR;将AWU->CSR的MSR置一来把LSI的内部时钟连接到TIM1定时器的ICAP1 TIM1_ICInit
发表于 2019-11-20
STM32初学笔记---延时函数及u16、u32、u8
在编写流水灯程序时发现,和对之前用的51单片机所用的普通软件延时函数有所不同,51的普通软件延时函数我们一般是这样编写的:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charvoid delayms(uint xms){uint i,j;for(i=xms;i>0;i--) for(j=110;j>0;j--);}然而我们在对STM32利用库函数进行编程时采用此延时函数则完全行不通,而是采用下面的延时函数#include "
发表于 2019-11-19
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved