我是07年的下班年开始听说Cortex-M3这东西的,那时才刚开始工作没多久,还在初学AVR,觉得AVR好强大。
同事已经有几个在用ARM的,我也一直想学,他们用的是LPC的ARM7,我从他们那搞了点资料看,但实在是很难入门,那时AVR对我来说已经很复杂了,之前只有一些很少的51基础。
慢慢的AVR已经能比较熟练的使用了,这时从同事那得知周立功开始向他们推荐Cortex-M3核的ARM,说是ARM7的换代产品,我觉得得跟上潮流,所以就开始关注网上关于Cortex-M3的信息,于是发现了STM32。
通过一些初步的比较发现,网上关于STM32的资料很多,STM32比LM3S的速度更快,外设也丰富,于是在淘宝上买了一块STM32的开发板,开始了Cortex-M3的学习。
因为例程提供的是MDK的程序,所以也就锁定了这个开发工具,但在学习的过程中渐渐发现,STM32总线和时钟初始化真的好复杂,为了使用某个外设,往往需要初始化一大堆寄存器。因为一开始用的是MDK的GUI界面初始化的,觉得很简单,后来也渐渐发现这种初始化方法的弊端了,对STM32内部结构不了解清楚的话,往往会出现一些很无法理解的问题,虽然后来经过调试最终把问题找出来的,但我还是不喜欢STM32的固件库的代码风格,最头疼的就是初始化,实在是没有可读性,少一句多一句,哪个要先哪个要后根本看不出来,代码不好懂也不好用。
后来同事买了一块周立功的LM3S8962的开发板,看他调试以太网的程序也很眼馋,于是借用他的开发板尝试一些LM3S的编程,虽然周立功提供的都是IAR的例程,但我觉得还是用MDK习惯些。学习过程中发现,Luminary的固件库比STM32的固件库好读好用的多,我几分钟就能上手,而且很快能把其他芯片的程序移植过来,这一点让我非常喜欢。
所以基本上STM32和LM3S这两款Cortex-M3核的ARM我是同步在学的,一直都没有取舍,因为各有各的长处,各有各的优势。最近要做一个新的项目,现在的公司以前所有的项目用的都是51,所以之前一个多月都在用Keil,发现代码量比较大的时候,Keil非常好用,以前用AVRStudio没有写过那么大的工程,还没觉得。
接下来要做一个项目,两个串口,驱动一个液晶屏,读写SD卡,本来想用最熟悉的AVR,但想想要写那么多代码还是想用Keil,然后就想到了Cortex-M3。接下来就是要选择用STM32还是LM3S,之前自己那块STM32的开发板就是有串口,液晶屏,SD卡,按键,几乎和我要做的项目需求一样,而且STM32速度快,有带SDIO的,读写SD也快,但思前想后我最终还是决定选用LM3S,就因为喜欢Luminary的固件库,就这么简单。
因为喜欢keil而放弃了AVR,因为喜欢Luminary的固件库而放弃了STM32,看来对研发人员来说,芯片的性能并不是最吸引人的,更吸引人的还是一整套的开发工具,使用方便高效才是我喜欢的。
问题很实际 STM32和LM3S我都接触过 我也觉得ST的固件库确实没有LM做的那么人性化,与LM固件库相比缺少亲和力 不过话又说回来,STM32确实有很大的市场占有率、有很广泛的群众基础, 这两款M3我也是同时在用、呵呵