你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【投票】学习STM32是从寄存器还是从库函数开始  

[复制链接]
zhdzhd 提问时间:2018-12-14 00:15 /
在stm32教学光盘的A里,有两个开发指南,一个是库函数版本,一个是寄存器版本。那么问题来了,作为一个初学者,我应该用库函数好还是直接对寄存器操作比较好?

首先,两个都是C语言

从51过渡过来的话,就先说寄存器操作。每个MCU都有自己的寄存器,51是功能比较简单的一种,相应的寄存器也比较少,我们常用的就那么几个,像P0 P1 SMOD TMOD之类的,这些存在于标准头文件reg.h里面,因为少,所以大家就直接这么去操作了,每一位对应的意义随便翻一下手册就看得到,甚至做几个小项目就记的很清楚了。所以做51开发的时候大多数都是直接操作寄存器。
到了STM32,原理一样,也是有自己的寄存器,但是作为一款ARM内核的芯片,功能多了非常多,寄存器自然也就多了很多,STM32的手册有一千多页,这时候想去像51那样记住每个寄存器已经不现实了,所以ST的工程师就给大家提供了库函数这么一个东西。
这是个神器。
库函数里面把STM32的所有寄存器用结构体一一对应并且封装起来,而且提供了基本的配置函数。我们要去操作配置某个外设的时候不需要再去翻眼花缭乱的数据手册,直接找到库函数描述拿来就可以用,这样就能把精力放在逻辑代码的开发上,而不是去费力的研究一个芯片的外设要怎么配置寄存器才能驱动起来。
简单讲就是这些了,库函数是为了让开发者从大量繁琐的寄存器操作中脱离出来的一个文件包,在使用一个外设的时候让开发者直接去调用相应的驱动函数而不是自己去翻手册一个一个配置寄存器。
有人说用库函数掌握不到芯片的精髓,见仁见智了。熟悉一款芯片是在不断的开发使用中逐渐了解并掌握的,调试的过程中会遇到很多问题,会要求我们去跟踪相关寄存器的状态,在整个框架都已经建立起来的基础上再去对照手册做具体到寄存器每一位的分析,代码对照现象,很快就能积累起来经验。  

  学习stm32的路还很长,我必须静下心来,踏实钻研,相信努力一定会有回报!




单选投票, 共有 125 人参与投票 查看投票参与人

投票已经结束

19.20% (24)
38.40% (48)
15.20% (19)
25.60% (32)
1.60% (2)
0.00% (0)
您所在的用户组没有投票权限
收藏 2 评论38 发布时间:2018-12-14 00:15

举报

38个回答
zjsxfyl 回答时间:2018-12-14 08:37:39
一直库函数
从未寄存器
mzy2364 回答时间:2018-12-14 08:59:23
从库函数开始学,对于标准库,调用API的时候看看函数定义,大概知道他配置的是哪些寄存器,等学得差不多了,就多看看寄存器的配置
wudianjun2001 回答时间:2018-12-14 09:10:01
用库吧,寄存器太复杂了,脑袋用不过来
奏奏奏 回答时间:2018-12-14 09:18:53
基础实际上是从51单片机学起的,
当时用的是汇编语言编程,
你不懂寄存器根本用不了,
但是现在的STM32寄存器这么多,根本就记不住。而且F1系列的与F4系列的寄存器也有差异。
所以STM32是用标准库开始用的,
发展到现在用HAL库。
七哥 回答时间:2018-12-14 09:29:21
本帖最后由 toofree 于 2018-12-14 09:55 编辑

选项少了。
标准库函数还好,一级跳转后基本就对应寄存器了,HAL需要又加深了级数,找寄存器越来越这容易了。
ST的BlueNRG库,满满的函数指针结构体,跟踪跳转是做不到了。
这个是ST嵌入式软件相关页面,在页面的图片上点相应内容的局部超链接,可跳转到相应分类页面
http://www.st.com/en/embedded-so ... ria=productId=SC961
en.stm32_embedded_software_sc961.jpg

点评

您看看还需要增加哪些选项?我再修改一下。谢谢!  发表于 2018-12-14 09:35
七哥 回答时间:2018-12-14 09:46:12
本帖最后由 toofree 于 2018-12-14 09:49 编辑
toofree 发表于 2018-12-14 09:29
选项少了。
标准库函数还好,一级跳转后基本就对应寄存器了,HAL需要又加深了级数,找寄存器越来越这容易了 ...

添加HAL库吧,毕竟新出的器件只有这个库,而没有了标准函数库。

HAL (Hardware Abstraction Layer)
标准外设库( Standard Peripherals Library),习惯称为标准函数库

BlueNRG库这个没必要加,这个是主要是类似USB协议栈的,自成体系,不具有代表性

点评

增加过了,没办法修改了。就这样吧。谢谢!  发表于 2018-12-14 09:50
cruelfox 回答时间:2018-12-14 10:29:12
这恐怕取决于“为什么要学习STM32”
"STM32的手册有一千多页,这时候想去像51那样记住每个寄存器已经不现实了"  ——为什么要想记住每个寄存器。且不同片子的寄存器不完全一样,不是用熟了F103就直接能搬到F746上。自己都不会用到的片上设备,也就不用去管。像GPIO这样的简单设备(F0x, F4x, F7x通用,F1x例外),几个寄存器记住也不难。
难道用库函数就不用记?也得背得住库函数有什么,每个参数有啥吧。 当然用模板生成代码的有另外的套路,或者编辑器自动提示补全。
我自己不喜欢用库函数的原因是老要填一个结构,作为参数去配置硬件,虽然背后就是翻译成寄存器。我的意见是寄存器都是有默认值的,经常用默认值不动就可以了,但用库函数就得都写上每一项设成什么,不敢都写0啊。
用现成的代码?用模板生成的代码?寄存器的也一样可以呀 写过几个,后面拿来稍微改改就能用了。当然,用库函数的可能移植性好一点。
naizi 回答时间:2018-12-14 11:17:46
寄存器会让你更加理解程序运行,调bug思路更清晰点,学完寄存器再去用库函数,更加得心应手
青草饭 回答时间:2018-12-15 18:57:49
还是寄存器吧,直观。。。
TLLED 回答时间:2018-12-20 08:15:20
标准库更容易上手
STM1024 回答时间:2018-12-20 08:39:14
从标准库入手,然后剖析标准库的实现,理解如何操作寄存器。

玩顺溜了以后,自然是用各种库了
仙景 回答时间:2018-12-20 09:07:36
假如你使用stm32做项目,如果项目包含很多驱动,协议,一年后你就会知道从哪里开始学了
12_01.jpg
jeffhe1 回答时间:2018-12-20 09:54:12
標準庫先 , 有時間再慢慢看 寄存器吧
weiwei4 回答时间:2018-12-20 10:55:24
先上库版本,容易上手,然后再学习寄存器,用寄存器操作优化程序
123下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版