历史上的今天
今天是:2026年03月14日(星期六)
2023年03月14日 | 为什么ST要推hal库?hal库和标准库的区别?
2023-03-14 来源:zhihu
一句话:企业只需要拿捏企业,不需要拿捏工程师!
最终给ST产生利润的是客户(企业),不是工程师,他才不会在乎工程师需要牺牲多少发量。
那怎么拿捏企业?
这个要从一个产品的研发成本说起。
ST推出HAL库最终目的就是缩短产品开发周期,降低企业的研发成本。
产品研发周期就是产品从无到有的时间,时间越短,研发成本就越低。
因为工程师一个月至少也要1-2W工资吧,不过这个还不是最关键的,最关键的是研发周期决定你是否能占领市场的先机,是否能先跑马圈地。
作为一个从事了单片机开发10几年老工程师,我觉得STM32早期的固件库已经吊打同行了。
现在出了一个比固件库使用起来更简单的HAL库,这就很过分,心疼同行5秒。
如果你觉得HAL难用,大概率是第一次接触STM32这种开发模式,适应了以后你会发现比51单片机用起来更简单。
这种开发模式基本上是大势所趋,如果一个单片机芯片厂或代理商不提供外设例程,那请问你到底有什么核心竞争力,能说服企业去用你的单片机?
很多就是压低价格,降低品质,最后批量出货各种问题,双方遍地鸡毛。
下面聊下HAL库有哪些优势,为什么能缩短研发周期?

推出HAL库的主要原因是为了简化STM32的开发过程。
在没有HAL库的情况下,开发人员需要直接与硬件交互,这需要深入了解芯片的寄存器、时钟和中断等底层细节。
这种开发方式需要较高的技术水平和花费更长的时间。
而有了HAL库,开发人员可以使用抽象层接口,将底层硬件控制从上层应用中隔离出来,使得开发人员更专注于应用程序本身的开发,简单来说就是做一个调库侠。
同时,HAL库还提供了一些常用的驱动程序和功能库,比如I2C、SPI、USART等,这些都可以大大减少开发时间和代码量。
一、HAL库的优点
1.简化开发流程
开发人员不需要深入了解底层硬件细节,只需要调用HAL库提供的API函数即可实现底层硬件控制。
2.提高代码复用性
由于HAL库提供了标准化的接口,可以方便地在不同的STM32系列芯片之间共享代码。
3.增强可移植性
由于HAL库是与设备无关的,开发人员可以将代码移植到不同的芯片平台上,而不需要重新编写底层硬件控制代码。
提供常用驱动程序和功能库:HAL库提供了一些常用的驱动程序和功能库,比如I2C、SPI、USART等,这些都可以大大减少开发时间和代码量。
二、HAL库的缺点
1.增加代码复杂度
由于HAL库是一个大型的库,需要包含大量的代码,因此在使用时需要将库文件加入到工程中,这会增加代码的复杂度。
2.系统资源占用
由于HAL库是一个底层库,会占用一定的系统资源,因此在对系统资源要求较高的应用场景中,可能需要使用更为轻量级的库。
三、总结
虽然HAL库非常方便,但我还是喜欢用标准库,主要是用习惯了。
从资源占用、代码复杂度、代码执行效率、开发周期等维度综合评估的话,还是标准库最合适。
史海拾趣
|
很多朋友是做工程师,特别像画板这类,基本上软件显示的都是英文,而事实上没有多少工程师是英文通,但是他们一样能运用自如,像Protell他是可以汉化的,汉文是直观的,但是没有几个人会这样去做,原因只是汉译后的不全面?… 查看全部问答> |
|
基于FPGA的uClinux系统移植及实现web-server[1] 基于FPGA的uClinux系统移植及实现web-server[1] 最近一直在做niosII上的操作系统,最终实现web-server. 将整个过程与大家分享一下. 主要有以下几个部分, 1>.NIOS2 IDE下实现 uClinux 的嵌入,以及相关软,硬件设计 (红色飓风RC2-1C6, Microtroni ...… 查看全部问答> |
|
[HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\SNMP] \"Dll\"=\"snmp.dll\" \"Order\"=dword:3 \"Keep\"=dword:1 \"Entry\"=\"SnmpInitialize\" 比如这个驱动,如何动态加载?… 查看全部问答> |
|
遇到ucos2的一个关于任务莫名其妙被挂起的问题 忘大侠提醒点拨一下 51的CPU Ucos2的操作系统 问题描述如下: 在TASK10(优先级为15)中我用于大量的数据解析和处理 涉及到大量的数据读出和存储 & ...… 查看全部问答> |
|
那位大侠知道DA芯片datasheet中经常提到的setting up time和多少sample/update rate MSPS是什么意思还有fclk(美信的给的好像是这个参数)美信的fclk和其他公司的sample/update rate是一个意思么?他们之间有关系么?比如如果我想做一个系统数据产 ...… 查看全部问答> |
|
内部I2C总线模块介绍: 内部集成电路 (I2C) 总线通过采用两线设计(串行数据线SDA和串行时钟线SCL)来提供双向的数据传输,并连接到串行存储器(RAM和ROM)、网络设备、LCD、音频发生器等外部 I2C设备上。 I2C总线也可在产品的开发和生产过程中用于 ...… 查看全部问答> |
|
使用STM32,IAR环境下 其中一个片段代码如下:if((analog(5) - analog(6))>10 && (analog(7) - analog(6))>10)// -----1{printf("m2");}else if((analog(5) - analog(7))>&n ...… 查看全部问答> |
|
测量六相电压,timer2中定时10ms, 作为需要延时处的基准.另外输出比较500us,在输出比较中断中,软件触发ADC, 扫描转换六通道电压,DMA自动读取.最后算有效值. stm32定时器文档不好理解,输出比较时,可以设置成不影响相关的输出 ...… 查看全部问答> |




