学习STM32的寄存器版本好还是库函数版本好

2023-05-16

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习STM32的寄存器版本好还是库函数版本好 的相关文章

随机推荐

  • 【ros】读取串口数据

    文章目录 一 自定义 gnrmc msg二 代码三 结果四 注意点 有时候 有的设备是通过串口发送数据 xff0c 想要在 ros 中 xff0c 读取串口数据 xff0c 记录一下操作 xff1a 一 自定义 gnrmc msg 首先需要
  • Android守护进程

    守护进程 守护进程 一直在后台运行的进程 本文主要讲解一些android比较常用的守护进程的方法 实现思想 1 保活 xff0c 通过提高进程优先级 xff0c 降低进程被杀死的概率 2 拉起 xff0c 进程被杀死后 xff0c 进行拉起
  • ros package 由于依赖 msg 导致编译问题解决

    文章目录 1 问题2 解决 1 问题 经常我们会自定义一些 msg 给其他的 package 使用 如果正常写 CmakeLists txt 在编译的时候 就会提示没有找到依赖的 msg 需要先编译 msg 的 package 再编译其他的
  • 使用Docker部署软件运行环境

    什么是docker xff1f Docker是基于Go语言进行开发实现 xff0c 一个开源的应用容器引擎 采用Linux内核的cgroup xff0c namespace xff0c 以及AUFS类的Union FS等技术 xff0c 对
  • 【控制control】四足机器人运动学、动力学模型

    系列文章目录 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 TODO 写完再整理 文章目录 系列文章目录前言一 四足机器人实际模型的物理难点二 四足机器人运动学模型1 方法一 xff1a DH法建
  • 【项目解读】fast_planner工程解读

    系列文章目录 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 TODO 写完再整理 文章目录 系列文章目录前言一 规划系统运行逻辑 业务部分 1 Fast planner node cpp 程序入口
  • IMU方向位姿估计

    系列文章目录 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 TODO 写完再整理 文章目录 系列文章目录前言一 方法一 xff1a IMU方向位姿可以直接从IMU本身提供的专有算法中获得 xff0
  • 【autoware的仿真平台】

    系列文章目录 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 TODO 写完再整理 文章目录 系列文章目录前言一 仿真的必要性及常见的仿真工具介绍二 gazebo仿真插件介绍及源码解析1 gazeb
  • 【机械臂、无人机规控篇】(8)机械臂轨迹规划、跟踪控制方向

    系列文章目录 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 TODO 写完再整理 文章目录 系列文章目录前言一 机械臂的规划控制和无人的规划控制的异同点分析1 规划的异同分析2 控制的异同分析 二
  • 微信支付——支付签名验证失败的坑

    只讲几个微信支付开发中的签名问题 xff08 JAVA版的公众号支付 xff09 第一个是获取订单数据时生成 xff0c 然后通过这些数据生成预支付订单 xff08 通过 统一下单 方法取得 xff09 xff0c 微信官方返回一串xml数
  • c++的多重继承

    一 前言 每个类只继承一个父辈 xff0c 在现实世界中事情通常是这样的 xff0c 但是有一些类却代表两个类的合成 例如两用沙发 xff0c 它是一张床 xff0c 也是一个沙发 二 示例代码 xff0c 用作下面提出问题使用 span
  • 学习 STM32之九轴姿态传感器(BWT901CL)串口通信读取数据

    由于个人应用到3轴传感器 xff0c 所以买了直接买了一个9轴的 xff0c 用于学习STM32Core平台串口2连接维特智能串口Normal协议 xff0c 然后通过串口1直接打印数据 xff0c 接收传感器数据和与传感器进行通信 xff
  • 用遗传算法求解旅行商问题

    以下是用遗传算法解决旅行商问题的实验报告 1 问题描述 旅行商问题 xff08 Travelling Salesman Problem 简记TSP xff0c 亦称货郎担问题 xff1a 设有n个城市和距离矩阵D 61 dij xff0c
  • 学习LLC谐振变换电路的工作原理

    五 学习LLC谐振变换电路的工作原理 在具有电阻R 电感L和电容C元件的交流电路中 xff0c 电路两端的电压与其中电流相位一般是不同的 如果调节电路元件 xff08 L或C xff09 的参数或电源频率 xff0c 可以使它们相位相同 x
  • 关于电赛应该了解的事

    2021年1月31日 xff0c 全国大学生电子设计竞赛组委会向各赛区组委会 各有关高校下发 关于组织2021年全国大学生电子设计竞赛的通知 xff0c 正式启动2021年全国竞赛组织工作 电赛越来越近 xff0c 很多大一大二的同学还没有
  • stm32的基本学习路径---新手指南

    心得 xff1a 本人学习STM32的时候有一些跟风的因素 xff0c 自以为学的芯片越多就越厉害 61 61 其实 xff0c 学习嵌入式重要的是整体的工程思想和项目经验积累 xff0c 说到底这些芯片 xff0c 我感觉学习起来都差不多
  • 初学stm32建议的---实用开发板推荐

    STM32编程作为一项实操性很强的技能 xff0c 所以要多实操 初学的话 xff0c 我觉得书籍就暂时先不买吧 xff0c 先考虑入手一块STM32开发板 xff0c 然后跟着开发板的教程走 几年前 xff0c 做STM32的教程有很多家
  • 嵌入式操作系统-ucos是什么?

    一句话概括ucos系统 xff1a 一款源代码开放的 xff0c 抢占式多任务实时操作系统 其在整个嵌入式产品的架构中的角色和主要功能代码如下图所示 xff1a ucos 系统建立了用户程序和底层硬件之间沟通的渠道 通过ucos系统的管理和
  • 自学stm32,需要会到什么程度能找到一份工作?

    我是从大一就开始接触单片机 xff0c 学过很多类型的单片机 从最简单的51单片机 xff08 stc xff0c atmel intel等类型都用过 xff09 到国内现在最火的stm32 xff08 推荐正点原子 xff0c 后期很多项
  • 学习STM32的寄存器版本好还是库函数版本好

    我个人认为 xff0c 在回答这个问题之前 xff0c 你得先问清楚自己 xff0c 我学习stm32 或者再往更深的地方走 xff0c 我学习单片机 xff0c 究竟是为了什么 xff1f 你现在是处于什么状态 xff1f 你是学生还是已