回忆刚出社会的时候,我踏入了STC 51单片机产品的开发领域,不久后,我有幸接触到了NXP的单片机。
从51到ARM的转变,确实让我有些头疼了一段时间。但好在,两者的开发模式有共通之处,都是通过配置寄存器来进行开发。虽然看着数据手册配置会耗费一些时间,但至少开发模式是相似的。
后来,领导计划推出一款新产品,我得以与硬件工程师合作,共同挑选合适的单片机。当时的我,还只是改改别人代码的水平,对于选型这种事情一窍不通,又不敢让领导知道,只好私下里向有经验的大佬同事请教。
这位同事在这家公司已经工作了三四年,对产品非常熟悉。他建议我们可以使用STM32的单片机。从那时起,我正式接触到了单片机,转眼间已经是年前的事了。
当时,教程等方面还没有如今这么完善。我网上买了一块开发板,然而它并没有配套的视频教程。由于我已有单片机的基础,我认为只要有每个外设的使用例程就足够了。
当我打开那些外设例程时,我感到十分迷茫。这究竟是什么鬼东西?怎么用GPIO点个灯都如此复杂?需要加载库文件、定义结构体、开启时钟等等。
后来我逐渐了解到,STM32可以通过提供的固件库进行开发。也就是说,我们可以直接调用他们的函数,轻松使用STM32的每个外设,而无需关心寄存器是如何配置的。
深入探究固件库的代码后,你会发现其中混编了汇编和C语言。最近我们无际单片机编程的一位学员就遇到了这样的问题。他喜欢钻牛角尖,什么都想搞透。其实这样做有利有弊。
好处是深入理解能让我们对技术有更深刻的认识;坏处是,如果我们的编程水平和产品经验不足时盲目钻研,往往会迷失方向。大多数人都是普通人,需要遵循正确的学习方法来快速掌握技术。
学习STM32的重点应该是熟悉固件库的使用方法。即使做了十年的这个行业,如果让我不依赖例程去调整固件库或者通过寄存器配置外设也是不可能的。但是这并不妨碍我用STM32做产品。
因此作为一个工程师我们必须要明确重点不在于单片机本身而在于如何运用它作为工具去解决问题而不是纠结于它的内部机制和原理。如果你过于纠结于细节那么仅仅一个STM32单片机就足够你学习五到十年了。
在实际的产品开发中我们会花费几天的时间将单片机的外设打开然后接下来大部分的时间都在编写产品的功能逻辑代码上这是关键部分尤其是现在STM32的价格有些公司会选择其他芯片来替代因此高效的学习方法和编程技巧尤为重要否则很容易被市场淘汰掉