历史上的今天
今天是: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简单的一些功能可以跳过寄存器,跟着卖家例程配置;若是想使用高级功能,因为参考手册的原因,寄存器是不可能跨越过去的。而这个过程耗费的精力,将是前者的数倍。笔者认为,这一过程的量变最终应当是会引起质变的。
笔者最近开始学习通用定时器,深感吃力,写此文已自勉。希望当我出关后,能有一览众山小的境界!
上一篇:stm32---输入捕获
下一篇:STM32-寻址最大为4G
史海拾趣
|
使用了一段时间altera 提供的cyclone开发板,觉得板子上的存储器资源特别充足。 存储器 256-Mbit DDR SDRAM 1-Mbyte同步 SRAM 16-Mbytes闪存 但是外设比较少,比较难进行前期的学习,为了能在示波器开发之前熟悉开发板,我们决定先进行显 ...… 查看全部问答> |
|
如题纯粹跑来感慨一下,我一直就好奇板子上一段小铁管是什么,原来是光纤模块接口 ,一顿晕眩!这咱可玩不了,希望下个试用者可以考虑做点这方面通讯实验,呵呵… 查看全部问答> |
|
大家好,我下了个国家二级字库,可是我不知字符或者汉字的地址从哪开始啊?说“啊”是汉字库存的第一个字,可是我实在找不到它的点阵是从哪个地址开始,?? 就差个地址了,还有就是这个字库 汉字是24*24点阵 字符是24*16点阵的吗? 字 ...… 查看全部问答> |
|
我的驱动电路是L6390D+STGP10NC60KD,现在用显示波器量LIN,HIN输入正常,现在问题是LVG输出15伏的波型正常,HVG只输出不正常的波形,7-8伏.有没有解答?ST的技术支持,都不知那里找. 下载 (49.45 KB) 2010-6-7 10:30 … 查看全部问答> |
|
IAR嵌入式工作平台Embedded Workbench为开发不同的目标处理器的项目提供强有力的开发环境,并为每一种目标处理器提供工具的选择。本章给出嵌入式工作平台的Embedded Workbench使用的项目模式简要讨论,并说明用户怎样用它来开发典型的应用程序。 [ ...… 查看全部问答> |




