新手上手STM32是学习库开发还是寄存器开发?

有需要资料的可以加我:腾讯QQ3249838614
经常会有一些刚接触STM32的人问这个问题,也在其他论坛回答过,

我个人认为,在回答这个问题之前,你得先问清楚自己,我学习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。另外一部分需要精通底层的是做这些库、做驱动、做底层支持包的人,如果你想成为这一部分人,那么,只学寄存器远远不够,你还要学习汇编、学习内核原理等很多很多知识。

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


linux基础
http://www.makeru.com.cn/course/details/2058?s=69821
C高级之linux
http://www.makeru.com.cn/course/details/2478?s=69821
linux多线程编程
http://www.makeru.com.cn/course/details/1937?s=69821
linux基础
http://www.makeru.com.cn/course/details/2058?s=69821
C高级之linux
http://www.makeru.com.cn/course/details/2478?s=69821
linux多线程编程
http://www.makeru.com.cn/course/details/1937?s=69821
linux驱动底层
http://www.makeru.com.cn/live/1392_337.html?s=69821
快速上手嵌入式linux
http://www.makeru.com.cn/live/1758_310.html?s=69821
必备Linux命令和C语言基础
http://www.makeru.com.cn/video/1862.html?s=69821
(Linux系统上驱动移植)
http://www.makeru.com.cn/live/3722_1381.html?s=69821
或加入嵌入式就业交流群 551627734一起交流 学习 欢迎全国各地的大学生和各位行业大佬一起交流!

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

原文地址:https://blog.51cto.com/14210773/2360227

时间: 2024-10-15 04:41:59

新手上手STM32是学习库开发还是寄存器开发?的相关文章

MXNet 学习 (1) --- 最易上手的深度学习开源库 --- 安装及环境搭建

安装环境:Win 10 专业版 64位 + Visual Studio 2015 Community. 记录下自己在有GPU的环境下安装配置MXNet的过程.该过程直接使用MXNet release 的 pre-built 包,没有自己使用CMake编译.网上有很多自己编译的教程,过程都比较繁琐,直接使用release包对新手来说更加简单方便. 选择MXNet的原因是因为看了<Caffe.TensorFlow.MXNet三个开源库的对比>这篇博文,其中指出MXNet相对来说是最易上手的深度学习

新手逆袭!记我的第一次系统开发

按捺不住内心的激动,来写这篇文章.这是我毕业后的第一份工作,在某某纺织公司信息中心工作,这也是我独立做的第一个项目,为公司开发的"纺织厂订单管理系统",今天已经顺利通过公司的评测,正式上线了!成就感满满,收获也很多,分享给大家. 来公司之前,对染布.纺织品生产,可以说一窍不通.在生活中,说某人嚣张的时候,我们会说"给你三分颜色,你就敢开染坊".如果说一个月之前我是染坊白痴的话,那现在我就算是出徒了.这都得益于这次的"纺织厂订单管理系统"的开发.

深度学习库比较

  深度学习库比较 库名 主语言 从语言 速度 灵活性 文档 适合模型 平台 上手难易 开发者 模式 Tensorflo C++ cuda/python 中等 好 中等 CNN/RNN Linux,OSX 难 Google 分布式/声明式 Caffe C++ cuda/python/Matlab 快 一般 全面 CNN 所有系统 中等 贾杨清 声明式 PyTorc python C/C++ 中等 好 中等 - -- 中等 FaceBook   MXNet c++ cuda/R/julia 快 好

转:Java学习路线图,专为新手定制的Java学习计划建议

转自:http://blog.csdn.net/jinxfei/article/details/5545874 从网上发现这篇文章,发现和我写的一篇关于<知识体系>的文章互相呼应,就转过来了. 转自:http://tieba.baidu.com/f?kz=692446591 怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西:     首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA).J2SE,Java 2

[转载][献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南

[献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南. 前言,Linux/Unix 社区的版块不热闹,新手太多,高手太忙,偶把自己这几年的Linux学习的过程讲讲,希望能给大家有点帮助, 引导初学者学习的方向,少走弯路,事半功倍,同时也是抛砖引玉,请过来人热烈发言. 1. 首先熟悉 Linux  建议在 Windows 上安装 VMware Workstation 6.5.0(以下简称VM), 下载种子在 http://www.verycd.com上找. 安装好 

为什么要学习React,学习React在大数据开发上有什么好处

为什么要学习React,学习React在大数据开发上有什么好处 分享之前我还是要推荐下我自己创建的大数据学习资料分享群716581014,这是全国最大的大数据学习交流的地方,2000人聚集,不管你是小白还是大牛,小编我都挺欢迎,今天的源码已经上传到群文件,不定期分享干货,包括我自己整理的一份最新的适合2018年学习和零基础入门教程,欢迎初学和进阶中的小伙伴. 如何学习React 如果你是一个 React (或者前端) 新手, 出于以下的原因, 你可能会对这个生态圈感到困惑: React 的目标群

转载:将STM32的标准库编译成lib使用【图文】

from:http://www.cnblogs.com/zyqgold/p/3189719.html 百度上边也有不少关于lib文件的文章,恰巧看到该博文,感觉该博文的条理清晰,步骤明确,故复制到这个博文中收藏,若文章作者看到且觉得不能装载,麻烦请告知,谢谢. 验证状态: 博主没有验证该博文. 将STM32的标准库编译成lib使用[图文] 以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程. 这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间

[原]零基础学习在Android进行SDL开发后记

本着学习交流记录的目的编写了这个系列文章,主要用来记录如何从零开始学习SDL开发的过程,在这个过程中遇到了很多问题,差点就放弃了.首先是SDL的Android移植的时候遇到了比较坑的是SDL移植到Android的JNI文件编写比较坑,刚开始想着如何将SDL编译成动态共享库,在别的地方直接调用该动态共享库,结果发现死活崩溃在SDL_Init()这个函数,最后发现SDL的JNI文件直接使用SDLActivity的函数,并且JNI采用静态注册的方式.直接在别的地方调用该动态库就跪了,博主能力又有限,又

如何学习微信公众平台的开发?

方倍工作室在2017年,为有兴趣学习微信开发的朋友提供时间最短.费用最低,见效最快的微信开发学习计划. 一.基础部 最好有一门开发语言的基础,并了解数据库. 目前微信开发中主流的开发语言及数据库是PHP + MySQL,其次是Java + Oracle和 C# + SQL Server,如果已经有某种语言的扎实基础,可以考虑继续使用自己熟悉的语言.如果没有,建议选择PHP + MySQL做为开始的方向. 但这不是绝对条件,也有很多朋友是先开发实现了功能,再回过头来学习开发PHP的,因为先实现功能