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

学习stm是先学库函数好还是寄存器好?  

[复制链接]
非→你←不娶 提问时间:2015-1-6 13:00 /
阅读主题, 点击返回1楼
1 收藏 评论132 发布时间:2015-1-6 13:00
132个回答
拼命三郎 回答时间:2015-2-4 08:07:07
stm32.jpg
苍云185 回答时间:2015-2-4 09:49:36
用库函数写不必考虑移植问题,用寄存器可能比较麻烦些,但能更好的理解工作机制,我也是先从库函数开始入门的,确实要比较好理解.
衡阳落雁 回答时间:2015-2-4 09:51:03
看个人兴趣吧
官方库有库函数版本的例子,可以很容易上手
datasheet是针对寄存器操作的,可以更全面的了解单片机
个人建议用库函数,可读性比较好,毕竟寄存器太多了
如果你记性很好的话就另当别论了
电解PIG 回答时间:2015-2-4 10:06:42
在这个物欲横流的世界里,大部分事情都是以多、快、省为前提的 ,如果刚接触STM的话,建议用库函数,比较容易入门,等能做出来东西了,培养出兴趣,再回头沉下心试试寄存器吧。
yinyue01 回答时间:2015-2-4 12:57:13
库函数上手快
575542641 回答时间:2015-2-4 13:19:01
呵呵  社区是我家  
梦旺龙 回答时间:2015-2-4 15:05:47
学习库函数较好
guomenhaolaogon 回答时间:2015-2-4 15:30:01
ssss.jpg
天好蓝 回答时间:2015-2-4 15:41:24
ssss.jpg
追梦赤子心 回答时间:2015-2-4 23:21:14
库函数易入门
快乐古月 回答时间:2015-3-24 15:28:37
个人觉得先学习寄存器
jiuwangbujiu 回答时间:2017-10-17 08:23:26
知乎上做过同样的回答,现在搬过来:
我个人认为,在回答这个问题之前,你得先问清楚自己,我学习stm32、或者再往更深的地方走,我学习单片机,究竟是为了什么?你现在是处于什么状态?你是学生还是已经参加工作了?你的专业或者你的工作是与单片机相关的还是不相关的?你未来是否想从事这个行业或者想跳槽到这个行业?

这些所有的问题的答案都可以把学习单片机的人分为两大类:第一类:学习单片机是为了把这个技术当做一技之长安身立命;第二类:仅仅只是玩玩。

那么我想说的是,第二类人想怎么玩都行,其实并不需要有上面的各种疑惑,不管怎么玩,只要你开心就好。我重点解答第一类人,也是大多数人的疑惑:首先我们知道自己学这个东西是想有一技之长、好在未来能够安身立命或者是有选择工作的自由,那么我们就往深了想想,我们的这个一技之长到底可以用在什么领域?我想一方面就是消费品的开发,比如使用单片机做一些小玩意、这些小玩意虽然成本不会很高,但是销售量很大、这样的话,只要开发完,就可以持续从中获得收益。另一方面就是一些高精尖的东西,比如涉及军工以及工业控制的产品,这样的产品往往量不会特别大,但是利润却不小。

如果做低端消费品,要求你在有了一个不错的创意之后,第一是能够快速完成开发,因为如果你慢了,市场就是别人的了。第二是能够尽可能降低成本,举一个简单的例子,2016年市场上小风扇特别火,20还包邮,看似没啥利润,但是整个市场每个月有上千万的销量,那么假如你为整个市场供货百分之一,也就是一个月有十万的出货量,这时候你想想,别人用一个一毛钱的单片机做这个小风扇的控制,而你还在用几块钱的单片机做,你一个月要比别人少赚多少?那可是几十万啊,不过话说回来,你仅仅单片机的成本就这么高了,你的产品压根一个都出不去,所以不用担心比别人少赚几十万,因为你一毛都赚不到。。。

说这个是什么目的?学习和未来做产品做项目不一样,而学习的目的又是为了以后做产品做项目,那么是不是不应该盲目的学!先去看看市场需要什么样的人,需要技术人员具备什么样的技能,然后再去补充自己,让自己成为这样的人。

所以接下来话题回到学习库还是学习寄存器,以stm32为例子来说,库是ST官方提供的,他们提供这个的目的就是为了降低用户开发产品的周期,这样用户才能在有了创业之后快速开发出自己的产品并占领市场。当然,不是说寄存器开发不快,对于熟手来说寄存器开发也很快,但是毕竟寄存器开发你要对芯片本身的寄存器特别了解,总不能每用一个寄存器就去找手册吧。所以说明确自己的目的,是为了做东西出来,解决市场的痛点,而解决这个问题的方式有两种,那我自然选择怎么快怎么来呗。比如我要做一个汽车,那我总不能自己造轮子,对我而言最快的可能是自己设计好这个汽车的整体指标、性能、然后去找各个汽车零部件供货商制定自己需要的零配件,然后把他们组装起来就可以了。

另一方面,现在各个芯片厂商都提供了自己的库,所以说我今天学会了stm32的库开发,明天给我一个HT32芯片或者一个nrf51822芯片或者个GD32芯片,我都可以去借助他们的库快速一天内就可以上手开发,甚至不同的芯片接触的多了,当接触到一个新的芯片之后,你压根不需要做什么学习,直接上手就能用库开始写自己的产品的功能代码了。市面上芯片很多,不同厂商的芯片价格都不一样。我想如果只做一个无线开关的终端的话,你肯定不会用一个48脚、flash容量比较大的、品牌厂商提供的芯片吧,这太贵了,你很可能会去找成本几毛钱的那种少引脚OTP单片机去实现这个功能的。

所以说到这里,我的观点很明确:想通过学会单片机来让自己有一技之长的人,就不要认为自己一定要学会所谓的寄存器了。但是也不是去学习一个具体的库,而是通过这个库的学习,搞明白芯片原厂提供的支持都有什么、这些支持我们怎么快速使用。进而在学会使用一家厂商提供的支持之后,获得能够快速从其他厂商处获取支持的能力。

而且你学库的过程中,你就会发现,库里面就是对寄存器的操作,只不过是厂家把这一系列的寄存器操作给你封装好了。芯片原厂,芯片设计厂商现在都在极尽所能的让开发变得简单,所以他们都做了很多工作,比如ARM搞的mbed平台,还有st搞的兼容Arduino平台,TI自己搞的energia平台,这些都是为了帮助用户降低开发周期,快速做出自己的产品而投入巨大精力做出来的东西。拿energia平台来说,我之前没用过TI的芯片,但是现在我可以话五分钟使用TI的430F5529来实现串口通讯、AD采集等功能。拿ST的cubemx来说,我可以几分钟完成管脚分配和代码自动生成。在keil5中可以一分钟完成ucosiii、freertos、rtt等操作系统的移植,如果想使用json格式进行通讯、只需要直接调用写好的函数就行。所有所有的工作,都是为了方便大家简单快速开发。因为厂商知道,用户用他们的芯片十位了解决问题,重点是为了解决问题而不是使用芯片。至于厂商之间的竞争力和动力,这不是我们在这个问题里需要回答的内容。另外大家要知道,半导体厂商、芯片厂商、开发环境供应商所完成的底层工作,永远比你自己写的驱动更稳定可靠。

当然,并不是说所有人都没必要学习寄存器,只是说现在这个社会分工越来越明确,行业越来越细化的时代,如果你想从事消费电子的开发,那就要掌握快速开发的法门,尽量不要接触底层,因为只有个别中断或者其他对实时性要求高的地方才会用到寄存器、甚至汇编。而如果说你是做工业控制或者武器控制、对控制的实时性要求极高,那你就去学习寄存器。其实话又说回来,在这种场合,一个成熟的架构师又怎么会选择使用单片机来控制呢?很明显如果实时性要求高,就会选择FPGA,如果对于运算的要求高,那就选择DSP。另外一部分需要精通底层的是做这些库、做驱动、做底层支持包的人,如果你想成为这一部分人,那么,只学寄存器远远不够,你还要学习汇编、学习内核原理等很多很多知识。

我做的是小四轴,小四轴在小玩物里算是对实时性要求比较高了,但我用库开发也没任何问题,而且速度很快,也容易读懂、容易理解、容易移植。并没有因为不是用寄存器操作而性能不好。

所以归根结底,要知道自己学这个东西是为了什么?针对不同的目的有不同的学习方案。搞懂自己的学习目的,也就搞懂了自己应该学啥。

西安-小马哥。
jackeyluo 回答时间:2018-7-25 08:55:20
给力的答案!
123456789

所属标签

相似问题

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