STM32库开发实战指南:基于STM32F4
上QQ阅读APP看书,第一时间看更新

7.2 采用库来开发及学习的原因

在以前8位机时代的程序开发中,一般直接配置芯片的寄存器,控制芯片的工作方式,如中断、定时器等。配置的时候,常常要查阅寄存器表,看用到哪些配置位,为了配置某功能,该置1还是置0。这些都是很琐碎、机械的工作,因为8位机的软件相对来说较简单,而且资源很有限,所以可以通过直接配置寄存器的方式来开发。

对于STM32,因为外设资源丰富,带来的必然是寄存器的数量和复杂度的增加,这时直接配置寄存器方式的缺陷就突显出来了:

□ 开发速度慢

□ 程序可读性差

□ 维护复杂

这些缺陷直接影响了开发效率、程序维护成本、交流成本。库开发方式则正好弥补了这些缺陷。

采用直接配置寄存器的方式开发的优点如下:

□ 具体参数更直观

□ 程序运行占用资源少

相对于库开发的方式,直接配置寄存器方式生成的代码量的确会少一点,但因为STM32有充足的资源,权衡库的优势与不足,绝大部分时候,我们愿意牺牲一点CPU资源,而选择库开发。一般只有在对代码运行时间要求极苛刻的地方,才用直接配置寄存器的方式代替,如频繁调用的中断服务函数。

对于库开发与直接配置寄存器的方式,就好比编程是用汇编好还是用C好一样。在STM32F1系列刚推出函数库时,引起了程序员的激烈争论,但是,随着ST库的完善,以及大家对库的了解,更多的程序员选择了库开发。现在STM32F1系列和STM32F4系列各有一套自己的函数库,但是它们大部分是兼容的,F1和F4之间的程序移植只需要小修改即可。而如果要移植用寄存器编写的程序,将是很麻烦的。

用库来进行开发,市场已有定论,用户群说明了一切,但对于STM32的学习仍然有人认为用寄存器好,而且他们会强调,汇编不是还没退出大学教材吗?他们认为这种方法直观,能够了解配置了哪些寄存器,以及怎样配置寄存器。事实上,库函数的底层实现恰恰是直接配置寄存器方式的最佳例子,它代替我们完成了寄存器配置的工作。而想深入了解芯片是如何工作的话,只要直接查看库函数的最底层实现即可。所以在以后的章节中,使用软件库是我们的重点,而且我们通过讲解库API去高效地学习STM32的寄存器,并不至于因为用库学习,就不用寄存器控制STM32芯片。