stm32单片机编程用库函数好还是寄存器好?

高小公子


这个问题从两方面来说:如果希望快速开发出来项目的话,用库函数开发;如果希望学精、学透单片机原理的话,用寄存器开发。

一、从开发时间快慢来说,用库函数

现在公司开发一个项目的话,都会对时间进度有很高的要求,一般都会要求快速高效的把产品做出来,而不管你用那种方式,只要保证产品的质量就行。在这种情况下,就必须找一种能够快速开发的途径,而库函数正是基于这种原因创建的。芯片公司为了帮助产品工程师降低开发难度、加快开发进度,推出了各种库函数,这些库函数都是由专业程序设计人员编写的,无论从代码的稳定性、规范性、正确性方面来说,都是经过芯片厂家反复验证的,完全可以直接拿来就用。

当然,用库函数有一定的缺陷,例如会导致代码量增大,影响程序运行速度等,但是现在stm32单片机的程序空间一般都足够大,并且每一系列里面都有pin-to-pin的型号可以互换,如果程序空间不够,直接替换另一个管脚兼容的,程序空间更大的即可,程序直接移植过来,几乎不用修改。

二、从原理性学习来说,用寄存器

对于想要学习单片机的工作原理,想真正弄清楚stm32的内部结构,工作过程,底层配置这些功能的人员来说,当然是选用寄存器来开发了。

用寄存器开发,可以直接接触到最底层的,并且用寄存器可以减少代码量,提高程序运行速度。


老马识途单片机


我玩stm32有三四年了,但是我并没有用寄存器写过代码。

不是说寄存器不好,上面几位我不太清楚他们玩过没有,我是的的确确玩了很久了。所以就来回答一下。

如果你觉得你的能力足够胜任stm32的寄存器,那用寄存器最好,如果你看了手册以后并不能用的起来,那就用库函数吧。

寄存器比库函数效率高很多。

如今stm32有三种库,最早是标准库,然后是hal库,后来hal可能效率太低,官方整出来个LL库。

速度最快的要数LL库,标准库次之。最后是HAL。

但是,我建议是学习HAL库。

有人问了,这货最慢为啥学这个。很简单,官方主推。

官方弄出来个工具叫做STM32cubeMx,这个几乎都是hal库,而且一键生成代码,开发周期大大缩短。而且,最重要的,在一些运行效率需求比较高的地方可以选择使用LL库。这都是工具上自带的。

细心的同学会发现,hal库基本上过段时间就更新一次,更新频率非常快,这是官方主推的,所以官方也维护的比较积极。当然,这个东西bug还是比较多。现阶段已经比较稳定了。

还有个缺点,选择功能比较多的,比如FATFS FreeRTOS STEMWIN等都加上,编译速度非常慢。弄个程序一大半时间都在编译中。。。

建议要配一个台式机再玩这么多功能咯。


中国顶级科技评论人


感谢邀请答题!这个问题很有争议性,但是目前来说的话还是库函数编程的人群量比较多,寄存器有许多的问题注意。下面就让我来说下个人的看法吧。


库函数,一般都是学习的入门首选,因为官方制作好的东西,只要拿来用,基本上问题是不大的,而且学习的效率和进度也会大大提高,对于学习和理解32是个很不错的方式。


它的优势体现在,对于公司来说,可以在一定的时间下缩短产品的研发周期,这点也是很多公司所青睐的,从提出想法到完成测试再到部署市场,短的研发周期可以使公司迅速立足市场,达到效益的最大化。

对于个人来说,在比赛和完成项目中是比较有优势的,毕竟能不能做的出来很关键,不用太过于注意底层实现的细节。

寄存器,是那些喜欢了解细节和想要弄清楚整个系统是如何运行起来的,以及底层的实现原理的人所青睐的。具有挑战性,能够更加深入地学习32,并且采用这种学习的人的能力是很强的,但是需要花费比较久的时间。

信息化的时代,技术的变化之快,寄存器的学习方式和使用是比较吃力的。但是如果有兴趣为何不尝试一下吗?最后个人认为,库函数开发才是比较好的选择!


我队友贼厉害


库函数。

STM32功能强大,光定时器数据手册的说明就有100多页,像51一样寄存器配置来编程的话,你根本无法下手。

库函数是ST官方出的,相当于是用字面就看得出的变量名称,将寄存器的位封装成相关的结构体,要配置的时候就给相关结构体的成员变量赋予相关的值,再调用写好的函数,就达到对相应寄存器配置的效果,程序可读性好。

当然在编程的时候要深入进去库函数的结构体和函数,根据头文件和数据手册找到相关的寄存器是如何配置才能达到你想要的效果。

总而言之多看多写多试。


低压电器


当然是库函数好。现在很多人学单片机都是从51单片机学起,而51单片机编写程序就是对其寄存器进行读写操作。为什么51单片机可以用寄存器的方法进行编程呢?是因为其简单,对寄存器操作方便,而且效率高。于是,很多小伙伴从51单片机进阶到stm32单片机时,都会有一种想法,那就是看它的寄存器编程,可一看却傻眼了,stm32单片机的寄存器很多,而且操作起来还很麻烦,于是他们挣扎了一段时间后就会发现库函数这个好东西,并且越深入了解库函数,就会发现其实对库函数操作也是对寄存器操作,只不过库函数把对寄存器的读写都写成了一个个函数的形式,大大增加了代码编写的效率。我们再反过来看51单片机,你也会发现,对其寄存器的操作自己也可以定义成一个个函数,方便自己移植代码,只不过这种函数是自定义的,不像stm32的那样,有统一的官方库函数手册。


一起闲说闲聊


不涉及内核的代码建议用库函数,库函数代码的可读性写得不错,每个寄存器的设置也比较完整,但要想把效率和性能发挥出来,需要自己写,库函数只有一些外设驱动,比如内存的访问模式这些接口是没有的


吹过初夏的风


学习使用单片机3年了,接触STM32也有1年多了,最近做了一个项目,就是用寄存器写的,用keil开发,寄存器操作也是非常方便,只要写代码时候别直接写数值,而是用头文件里的定义变量代替,比如APB2ENR=APB2ENR_GPIOA+APB2ENR_GPIOB;我觉得这样去写代码,不论是代码数量和可读性都还是很好的。


天边钟声


肯定是库函数啊,先不说开发效率,单单是从代码的可读性就必须库函数!!!我们公司早期的代码清一色的寄存器还带位操作,上万行的代码,维护起来那叫一个蛋疼,经常看代码看着看着就要去翻寄存器手册……影响效率不说还影响心情……


喑哑3


使用stm32 7 年,现在所有产品都用其开发。以前开发的产品也换成了这个平台,我重来不用直接操作寄存器,说操作寄存器会更精与理解stm32 我觉得这是一个很大的误区。现在产品更新换代那么快,单片机就是个工具而已。有那个时间还不如多开发一个产品


分享到:


相關文章: