寄存器编程 (基础):
这是最底层的编程方式;在需要解决某些问题的场景里,这是必须要掌握的。
寄存器编程编程方法,即使平时很少使用,但却仍需掌握,这是解决问题时的需要:在编程的过程中,不会遇到涉及底层寄存器类的问题,这只能说是碰巧而已。因此,即使在使用了库函数编程方法,但是,当遇到问题时,还是不可避免地、离不开寄存器编程的方法。
就像使用 C语言编程一样,理论上,汇编语言是不需要再考虑了;但是,实际上,在遇到某些问题的时候,还需要回退到编译出来的汇编语言上来分析。没有哪家的编译器厂家,敢宣传自己的编译器绝对不存在 Bug。
标准外设库编程:
ST 官方已经不再支持这种编程方式了。
但是,在有些用户公司的有些项目上,由于历史的原因,暂时还是无可能淘汰掉的。
在旧产品上使用的是标准库编程,在后期的维护中,以及老同事的、顽固的编程习惯等等,都会造成想要淘汰一种过时的东西,会需要一个过程;除非到了非淘汰不可的需要。
对于一个实际的用户公司来说,更新技术,是需要代价的,这要看到底值不值得去做了。
比如:旧产品的维护;现有的程序员并不熟悉新技术;已有的库存、或订购物料并不适合新的标准等等。
谁对新技术最感兴趣:当时的大公司对于一般的、或有些新技术,往往并不是那么太感兴趣,因为它的盈利还达不到大公司的要求,或是存在着技术风险,跌倒了不容易爬起来。
而对当时的小公司来说,新技术是与大公司进行产品竞争的亮度,跌倒了就再爬起来嘛。
新城代谢的技术,新城代谢的公司:当新技术成熟了的时候,就会造就一批新的有名气的、大型的公司。
HAL 库、LL 库编程:
HAL 是 ST当前主推的编程方式。
LL 库是与 HAL库捆绑在一起发布的,以解决某些 HAL库函数的运行速度慢、或效率低的问题。
说明:
1. 库函数只是对外的 API 接口函数而已;对于针对外设部分的库函数,在库函数的内部最终实现上,都是基于寄存器编程。
而其他库函数,比如 RTOS,图形界面库等等,则属于更高级的封装。<< 这也许是 HAL被目前主推的原因之一吧?假如不是为了这种需要,可能只需要使用标准外设库编程,就好了。
2. 库函数也不可能都是正确的,需要保持怀疑的精神。
MCU 具体的应用场景,是千变万化的,是不可预测的。
HAL 库函数的官方设置,不可能做到覆盖不同用户所有的应用场景;因此,在有些场景的应用中,HAL 会存在这样或那样的问题。
而检查、或者改正这些 HAL 不良所导致的问题,就离不开寄存器编程的能力了。
3. 虽然直接二进制编程,是不实用的。
但是,在理解、或处理某些软件问题的时候,可能会不可避免地还会使用到。