历史上的今天
返回首页

历史上的今天

今天是:2025年03月29日(星期六)

2020年03月29日 | Stm32用寄存器还是库函数

2020-03-29 来源:eefocus

首先放几段网友的观点


1、我当年初学的时候也纠结过,后来选择了先学习寄存器操作,后来慢慢的把库函数也学会了,其实都不难。完全可以两个都学,只是你现在选一个先下手而已。


建议你先学寄存器操作,然后学库,以后工作中尽量使用库。


先学寄存器是因为你从51过渡过来,51也是直接控制寄存器,趁你还没有忘记怎么操作寄存器的时候趁热打铁。


用库函数用习惯了你会发现自己会越做越快,但是知其然不知其所以然的感觉很糟糕,这时你再去学寄存器会感觉非常繁琐,完全学不进去。


所以,先学寄存器操作,再学库函数操作。


两个都学是必要的,有时候做工业控制的项目有严格的实时性要求,你用库函数会使速度变慢,这时你得用寄存器。其他时候能用库尽量用库,开发周期短,可读性强,易于跟人配合。


寄存器操作就像手动挡汽车,库函数操作就像自动挡汽车。手动挡会了,自动挡自然也会了。


2、寄存器操作:51就是寄存器操作,你用51需要自己写驱动。STM32如果不用库也是跟51一样直接操作寄存器的。


库函数操作:STM32的库已经帮你把驱动写好了,你要做的只是配置参数,然后使能。


寄存器的优缺点:速度快,但是可读性差,你要改动配置需要去查芯片手册。


库函数的优缺点:速度慢,但是可读性强,用GPIO_PIN_5这类可读性强的英文字母,去替代0x0101这类可读性差的数字。


3、首先,两个都是C语言。

从51过渡过来的话,就先说寄存器操作。每个MCU都有自己的寄存器,51是功能比较简单的一种,相应的寄存器也比较少,我们常用的就那么几个,像P0 P1 SMOD TMOD之类的,这些存在于标准头文件reg.h里面,因为少,所以大家就直接这么去操作了,每一位对应的意义随便翻一下手册就看得到,甚至做几个小项目就记的很清楚了。所以做51开发的时候大多数都是直接操作寄存器。


到了STM32,原理一样,也是有自己的寄存器,但是作为一款ARM内核的芯片,功能多了非常多,寄存器自然也就多了很多,STM32的手册有一千多页,这时候想去像51那样记住每个寄存器已经不现实了,所以ST的工程师就给大家提供了库函数这么一个东西。


这是个神器。


库函数里面把STM32的所有寄存器用结构体一一对应并且封装起来,而且提供了基本的配置函数。我们要去操作配置某个外设的时候不需要再去翻眼花缭乱的数据手册,直接找到库函数描述拿来就可以用,这样就能把精力放在逻辑代码的开发上,而不是去费力的研究一个芯片的外设要怎么配置寄存器才能驱动起来。


简单讲就是这些了,库函数是为了让开发者从大量繁琐的寄存器操作中脱离出来的一个文件包,在使用一个外设的时候让开发者直接去调用相应的驱动函数而不是自己去翻手册一个一个配置寄存器。


有人说用库函数掌握不到芯片的精髓,见仁见智了。熟悉一款芯片是在不断的开发使用中逐渐了解并掌握的,调试的过程中会遇到很多问题,会要求我们去跟踪相关寄存器的状态,在整个框架都已经建立起来的基础上再去对照手册做具体到寄存器每一位的分析,代码对照现象,很快就能积累起来经验,祝成功。


中心思想:想学得精就从寄存器入手,如果单纯是从利用该芯片角度出发,用函数库。


个人观点:

ST公司自己的资料也是相当的纠结,参考手册上讲得都是操作寄存器的方法,相比之下固件库的介绍就非常粗枝大叶。


个人经历:笔者刚接触STM32时是跟着淘宝卖家的例程学习的,虽然每个部分都会一点儿,也能应用,但是就学习效果来说,卖家会的我可能会,卖家不会的我肯定不会。

假期从头开始深入自学32。学习中,以参考手册为主,手册中又以架构图为主,理清整个架构图后再开始看ST官方库函数例程。最后,对照着库函数中寄存器的操作,去回味参考手册中的寄存器和架构图,对每个模块理解更深入。但是这个过程相当耗费时间与精力,任何一个模块都需要两整天或者更多的时间。


举个例子:ADC模块.


当看完并理解参考手册中ADC部分后,这个图看懂也就不成问题了。而用库函数操作,则会阻断学习参考手册的道路,同时虽然会配置简单的ADC,但对ADC却无整体的认识。


以下是ADC部分的目录:


若只是通过库函数学习,大概能够配置到11.8之前。而11.8之后的东西,均需要对寄存器的深入了解。


试问:EOC事件是每转换一个通道就产生,还是所有的都转换完后产生?DMA与EOC有何联系?


在扫描模式下,这些问题必须解决。这些对于一个模块来说,算小问题,然窥一斑而知全貌。整个32的每个部分都有小问题,最后就成了难以跨越的大问题。


总之,如果只是应用32简单的一些功能可以跳过寄存器,跟着卖家例程配置;若是想使用高级功能,因为参考手册的原因,寄存器是不可能跨越过去的。而这个过程耗费的精力,将是前者的数倍。笔者认为,这一过程的量变最终应当是会引起质变的。


笔者最近开始学习通用定时器,深感吃力,写此文已自勉。希望当我出关后,能有一览众山小的境界!

推荐阅读

史海拾趣

ELPIDA公司的发展小趣事

ELPIDA公司成立于1999年,是日本在DRAM(动态随机存取存储器)领域的重要企业。它的成立是对当时日本半导体产业的一次重要整合,由NEC、日立、三菱电机等公司的DRAM业务合并而成。这一举措旨在振兴日本在DRAM领域的竞争力,并保护国内DRAM产业。

GMT(致新科技)公司的发展小趣事
首先确认收音机的电源是否正常。如果电源有问题,可能会影响定时电路的正常工作。
E-San Electronic Co Ltd公司的发展小趣事

E-San Electronic Co Ltd的创始人李明,在电子科技行业摸爬滚打多年后,决定创立自己的公司。创业初期,公司面临着资金短缺、技术瓶颈和市场竞争激烈的挑战。李明凭借对电子技术的深刻理解和敏锐的市场洞察力,带领团队成功研发出了一款具有创新性的电子产品,并成功打入市场。这款产品以其高性价比和稳定的性能赢得了消费者的青睐,为公司带来了第一笔可观的收入,也为后续的发展奠定了坚实的基础。

C-MAX Time Solutions公司的发展小趣事

随着国内市场的饱和,C-MAX Time Solutions公司开始将目光投向国际市场。公司通过设立海外分支机构、参加国际展会等方式,积极推广自己的产品和服务。同时,公司还加大了对国际标准的研究和遵循力度,以确保其产品在全球范围内都能得到广泛认可和应用。这一国际化布局不仅提升了C-MAX的竞争力,也为其未来的发展奠定了坚实基础。

C&D公司的发展小趣事

随着国内市场的逐渐饱和,C&D公司开始积极拓展海外市场。公司制定了国际化战略,通过参加国际展会、建立海外销售网络等方式,不断开拓国际市场。同时,C&D公司还针对不同地区的市场需求,推出定制化的产品和服务,进一步提升了其在国际市场中的竞争力。

EDO Corp公司的发展小趣事

在1930年代,Eclipse Magnetics这个名字首次出现,标志着品牌的诞生。当时,该公司主要从事磁性产品的研究和开发。进入1940年代,Eclipse Magnetics逐渐崭露头角,成为一个独立的公司。在电子行业的早期,该公司凭借其独特的磁性技术,开始在市场中占据一席之地。

问答坊 | AI 解惑

为了上班,买车值得吗?

今天去车市上看了一下,发现车市依然火暴,车还没降价格。因此,在想一个问题,比如我们电工,为了上班,买车值得吗?…

查看全部问答>

DIY示波器V2.0 最新进展-04.21

使用了一段时间altera 提供的cyclone开发板,觉得板子上的存储器资源特别充足。 存储器 256-Mbit DDR SDRAM 1-Mbyte同步 SRAM 16-Mbytes闪存 但是外设比较少,比较难进行前期的学习,为了能在示波器开发之前熟悉开发板,我们决定先进行显 ...…

查看全部问答>

Spartan6上原来还有光纤模块接口

        如题纯粹跑来感慨一下,我一直就好奇板子上一段小铁管是什么,原来是光纤模块接口 ,一顿晕眩!这咱可玩不了,希望下个试用者可以考虑做点这方面通讯实验,呵呵…

查看全部问答>

如何设计avr分析声音频率?

想让avr能够即时得到 通过mic采集到的周围环境的声音频率 各位大侠有什么思路没 请赐教…

查看全部问答>

国家二级字库汉字/字符地址??

大家好,我下了个国家二级字库,可是我不知字符或者汉字的地址从哪开始啊?说“啊”是汉字库存的第一个字,可是我实在找不到它的点阵是从哪个地址开始,?? 就差个地址了,还有就是这个字库 汉字是24*24点阵  字符是24*16点阵的吗? 字 ...…

查看全部问答>

大电阻测定

不知各位,有没有做过大电阻测定的电路,电阻在10兆欧以上。…

查看全部问答>

STTIME3问题

Error[Pe020]: identifier "TIM3" is undefined C:\\Users\\shenghua\\Desktop\\LCDDemo(lcd+led+buttom)\\LCDDemo\\project\\main.c 378 为什么  TIM3  没有定义啊?…

查看全部问答>

STM32无刷电机驱动

我的驱动电路是L6390D+STGP10NC60KD,现在用显示波器量LIN,HIN输入正常,现在问题是LVG输出15伏的波型正常,HVG只输出不正常的波形,7-8伏.有没有解答?ST的技术支持,都不知那里找. 下载 (49.45 KB) 2010-6-7 10:30 …

查看全部问答>

【MSP430共享】iar_msp430教程

IAR嵌入式工作平台Embedded Workbench为开发不同的目标处理器的项目提供强有力的开发环境,并为每一种目标处理器提供工具的选择。本章给出嵌入式工作平台的Embedded Workbench使用的项目模式简要讨论,并说明用户怎样用它来开发典型的应用程序。 [ ...…

查看全部问答>