如果用过STM32系列单片机的朋友会比较清楚,一般在开发STM32单片机程序的时候首先要考虑选用那种方式来写代码。常见的有三种方式,寄存器版、标准库版、HAL库版。现在选用后两种的比较多,选择寄存器开发的可能比较少了。而后两种方式到底选用那种好呢?现在都是公说公有理,婆说婆有理,每个人的判断标准都不同。今天我不探讨这两种方式的优缺点,单纯的从代码的角度去分析对比这两种方式写代码的相同点和差异。
为了更有对比性,我选择了功能一模一样的LED灯程序,一个是用标准库写的,一个是HAL库写的。

看到这个文件名字,我想大多数人都比较熟悉了恶,我这里就不多做介绍,直接开始从代码的角度出去,去比较。

左边的是HAL库,右边的是标准库,端口的初始化暂时先不看,直接看对IO口的操作。可以看出HAL库对端口置1和置0时,调用的是同一个函数,只是函数的参数不同。右边的标准库调用的是两个不同的函数,但是参数是一样的。下面直接对比一下端口设置的库函数。

这两个版本的函数本质上操作的还是寄存器,不过HAL库操作的只是BSRR寄存器,而标准库端口置1的时候操作的是BSRR寄存器,端口清0的时候操作的是BRR寄存器。下面看看BSRR和BRR寄存器的区别。


本文对比了STM32单片机开发中HAL库和标准库的使用,通过LED灯程序示例展示了两者在端口操作、时钟使能、GPIO初始化及中断处理上的差异。HAL库倾向于函数合并,简化代码编写,而标准库函数更为独立,便于调试。两种方式各有优缺点,开发者可根据项目需求和个人喜好选择。

5037

被折叠的 条评论
为什么被折叠?



