你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
学习stm是先学库函数好还是寄存器好?
[复制链接]
非→你←不娶
提问时间:2015-1-6 13:00 /
阅读主题, 点击返回1楼
赞
1
收藏
0
评论
132
分享
发布时间:2015-1-6 13:00
请先
登录
后回复
132个回答
拼命三郎
回答时间:2015-2-4 08:07:07
a1024a.1 32b0c
赞
0
评论
回复
苍云185
回答时间:2015-2-4 09:49:36
a1024a.1 32b0c
用库函数写不必考虑移植问题,用寄存器可能比较麻烦些,但能更好的理解工作机制,我也是先从库函数开始入门的,确实要比较好理解.
赞
0
评论
回复
衡阳落雁
回答时间:2015-2-4 09:51:03
a1024a.1 32b0c
看个人兴趣吧
官方库有库函数版本的例子,可以很容易上手
datasheet是针对寄存器操作的,可以更全面的了解单片机
个人建议用库函数,可读性比较好,毕竟寄存器太多了
如果你记性很好的话就另当别论了
赞
0
评论
回复
电解PIG
回答时间:2015-2-4 10:06:42
a1024a.1 32b0c
在这个物欲横流的世界里,大部分事情都是以多、快、省为前提的 ,如果刚接触STM的话,建议用库函数,比较容易入门,等能做出来东西了,培养出兴趣,再回头沉下心试试寄存器吧。
赞
0
评论
回复
yinyue01
回答时间:2015-2-4 12:57:13
a1024a.1 32b0c
库函数上手快
赞
0
评论
回复
575542641
回答时间:2015-2-4 13:19:01
a1024a.1 32b0c
呵呵 社区是我家
赞
0
评论
回复
梦旺龙
回答时间:2015-2-4 15:05:47
a1024a.1 32b0c
学习库函数较好
赞
0
评论
回复
guomenhaolaogon
回答时间:2015-2-4 15:30:01
a1024a.1 32b0c
赞
0
评论
回复
天好蓝
回答时间:2015-2-4 15:41:24
a1024a.1 32b0c
赞
0
评论
回复
追梦赤子心
回答时间:2015-2-4 23:21:14
a1024a.1 32b0c
库函数易入门
赞
0
评论
回复
快乐古月
回答时间:2015-3-24 15:28:37
a1024a.1 32b0c
个人觉得先学习寄存器
赞
0
评论
回复
jiuwangbujiu
回答时间:2017-10-17 08:23:26
a1024a.1 32b0c
知乎上做过同样的回答,现在搬过来:
我个人认为,在回答这个问题之前,你得先问清楚自己,我学习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。另外一部分需要精通底层的是做这些库、做驱动、做底层支持包的人,如果你想成为这一部分人,那么,只学寄存器远远不够,你还要学习汇编、学习内核原理等很多很多知识。
我做的是小四轴,小四轴在小玩物里算是对实时性要求比较高了,但我用库开发也没任何问题,而且速度很快,也容易读懂、容易理解、容易移植。并没有因为不是用寄存器操作而性能不好。
所以归根结底,要知道自己学这个东西是为了什么?针对不同的目的有不同的学习方案。搞懂自己的学习目的,也就搞懂了自己应该学啥。
西安-小马哥。
赞
0
评论
回复
jackeyluo
回答时间:2018-7-25 08:55:20
a1024a.1 32b0c
给力的答案!
赞
0
评论
回复
1
2
3
4
5
6
7
8
9
/ 9 页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
官方库有库函数版本的例子,可以很容易上手
datasheet是针对寄存器操作的,可以更全面的了解单片机
个人建议用库函数,可读性比较好,毕竟寄存器太多了
如果你记性很好的话就另当别论了
我个人认为,在回答这个问题之前,你得先问清楚自己,我学习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。另外一部分需要精通底层的是做这些库、做驱动、做底层支持包的人,如果你想成为这一部分人,那么,只学寄存器远远不够,你还要学习汇编、学习内核原理等很多很多知识。
我做的是小四轴,小四轴在小玩物里算是对实时性要求比较高了,但我用库开发也没任何问题,而且速度很快,也容易读懂、容易理解、容易移植。并没有因为不是用寄存器操作而性能不好。
所以归根结底,要知道自己学这个东西是为了什么?针对不同的目的有不同的学习方案。搞懂自己的学习目的,也就搞懂了自己应该学啥。
西安-小马哥。