听我一句劝,单片机不要去学STM32真的

2023-05-16

听我一句劝,单片机不要去学STM32真的

ed804ee0cc1618948f8c0ac604725f97.png///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///ed8be2e9b7bcf757081cf742a89489eb.png

单片机用处这么广,尤其是STM32,这么火!如何快速上手学习呢?

“不要去学STM32”。我不是说STM32不好,而是这种为了学习单片机而去学习单片机的思路不对。

你问,如何系统地入门学习stm32?

这本身就是一个错误的问题。假如你会使用8051,会写C语言,那么STM32本身并不需要刻意的学习。

你要考虑的是,我可以用STM32实现什么?

为什么使用STM32而不是8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO?是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA?是51的内存太小而你要存储的东西太多?当你需要使用STM32某些功能,而51实现不了的时候,那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。比如要用spi协议的网卡、要使用串口通信、要使用rtos等等...

关于寄存器vs库

我的观点是:当你debug的时候寄存器很重要,当你需要理解芯片工作细节的时候寄存器很重要,当你开发的时候寄存器不重要。如果你没有遇到非直接配置寄存器不可的情况,那么就不要直接面向寄存器层面开发,因为面向寄存器开发获得的好处往往抵消不掉这样做的坏处。面向寄存器开发程序效率高,但是你需要为了提高0.01%的效率浪费10倍、乃至100倍的时间。既然ST公司已经给你提供了好用的库,没有道理要重新造轮子。

那什么时候必须直接控制寄存器?

第一、某一个代码块调用非常频繁。比如你有一个巨大的for循环,那么这个for循环中的每一步操作都应该被谨慎的优化,优化良好就可以获得更好的性能。这种情况一般常见于图像处理相关的代码中。第二、库函数有bug。这个遇到的概率非常低,但确实存在。不过一般来说如果mcu表现出预料之外的行为,你首先要想的应该是你的代码写的有bug,而不是库函数有bug。如果库函数真的有bug,你去google搜一下,相信你绝对不是第一个踩坑的人。对于传统的电子工程师来讲,使用库编程可能会感到有一点虚,感觉没有脚踏实地的感觉。但如果你写过web、写过服务器端代码、写过桌面端代码的话,你就一定会理解API、封装、抽象的意义。

49f5801d7ab3571022a279cdc1f5163f.png

对于这个话题,看看其他老司机筒子们自己的看法:

icecut:

1.使用 stm32是因为功能比 avr好,各种资源比较多.所以选 stm32f103,那时候芯片还没这么多.还是用寄存器开发的时代。
2.后来,103的开发板越来越多,开始切换成使用官方库的时代.的确大大提高了生产力.但是很多人比较保守,不愿意用库.各种理由去让自己使用寄存器.例如:性能差,有 bug,代码量太大,把控不好....纵然这些困难存在还是让一些初学者尝到了甜头.底层不用学的太好也可以开发了.
3. arm官方也开始推这种通用库了。而此时st发现一剑走天涯的方法的确有很多弊端,开始了stmcubemx的推广。软件会根据你的配置和芯片,生成轻量级的代码.代码量小很多,并且有推荐freertos,以及闭源的 ui库支持,做为一个多年的软件开发者,发现新的设计的确很好.但是,给人的要求会更多,比如自动生成代码,就要求你写的代码在固定位置,这样才不会被覆盖.如果你想发挥芯片的最大性能,软件的枷锁还是有一些的.当然,对于这种资深应用,自己也能管理好代码框架.
4. st芯片的遍地开花,软件上配合 stm32cubeMx的开发利器,轻松生成一个好用的工程并且开发好合适的代码.大大缩短调试的工作量.当然,带 os和 no os的开发还有很多差距,如果你想用 no os的代码,搬过来,直接死路一条....我曾经拿着很高的工资给公司用这种方法,轻松的工作.
5.最近在做互联网,所以,有时候还是手痒痒,还想弄 st的芯片玩玩....

菜鸟同学:

单片机本身没啥好折腾的,重点还是软件架构,针对项目设计软件,深度研究一种单片机,其他单片机都大同小异,大多数菜鸟都把时间荒废在单片机本身应用上,然后会几个外设就说的很简单怎么样,这个就是为什么现在单片机开发人员混杂的原因,都认为很简单,但是大部分都是蜻蜓点水,让其开发个项目试试,简直惨不忍睹,如果让其换一个芯片,这货估计就要折腾一个星期来熟悉芯片,所以大部分看到如此提问的我都不好意思回答。

lxyppc:

刚开始发现一款比较有意思的产品,主控用的是avr,把里面的代码反编译之后就想抄了,仔细想想要是还用avr很快也会被别人给抄去,这个时候发现了stm32这个片子,还带USB,于是乎就把反编译出来的代码移植到了stm32上,把通信接口由uart改成USB。

江枫渔火:

说句公道话:花一个星期或者更多时间熟悉芯片很正常。每个芯片公司的芯片还是有风格和使用上的差异。实际用一个不曾惯用的芯片的时候,都是对着数据手册上寄存器写的。楼主后面的话说起库和寄存器开发方式了,恐怕又引起一阵论战。不过我只是说说自己的感受,先声明,我没怎么用STM32开发过东西。我用ATMEL的芯片,用寄存器操作方式。我不可能用官方库。但我可以将用寄存器写的功能进行封装成函数或模块。

冰零分子:

1.首先了解下芯片架构,看看这个芯片都能干什么事
2.然后跟视频或教程通看一遍,了解下实现一个功能大致需要的步骤
3.其次选一个项目直接实践,只要知道大致步骤,库函数配置网上一搜一大把做项目的同时会解决各种各样的问题,这就是提高的过程,这个项目做完基本外设配置过程就熟悉了
4.最后再做个项目尽量不去参考教程或网上的配置过程自己独立完成,加深印象。这个过程可以结合寄存器配置了解底层运作原理总的来说,我的学习过程是先观其广再究其深。

弈涯:

刚开始接触STM32是正点原子的MiniSTM32,那时候在学校有的就是时间,当时就用寄存器将提供的所有例程,自己重新对照着DataSheet敲一次,根据自己的想法做一些改变。
从C到编程思想再到STM32的了解,都有了较大的进步。
现在在单位也在做STM32的编程,不过都不用寄存器了,但是感觉之前敲的例程还是对现在的工作有了很大的帮助。
觉得吧,还是得多动手,基础的东西还是得自己去完整的过一遍。

Larm1:

1.刚开始使用寄存器配置时,感觉要看的文档,花的时间确实比较多;
2.后来官方退出了固件库,刚开始使用的时候感觉又不踏实,后来习惯了,省了很多的时间;
3.现在都是直接找官网的相关功能外设代码直接测试、调试,不懂得才去看文档,时间长了觉得对硬件资源都生疏了许多;
4. StmCube由于没有带系统,没怎么使用过;
5.以后的路还长着呢...

shizaigaole:

和学其他单片机一样:
1.买块开发版,熟悉编译,下载环境
2.写个跑马灯,自己感受一下
3.把STM32的中断,尤其是定时中断搞清楚
4.作为硬件应用来说,一定还要仔细看看IO管叫相关电气方面的参数。到这一步就基本入门了。但是要熟练使用STM32,还要踏踏实实的把stm32的文档手册读一遍。
然后学习编译器自带的例程,把这些例程精简以后移植到自己得开发版上去跑一跑。
其实做几个模块后,就基本熟悉了。
以后要用的就再去啃手册和例程

shizaigaole:

说白了三句话:
1.熟悉编译下载环境
2.啃手册
3.研习官方例程

feilusia:

这是我自己的学习路线:
1、51学习寄存器操作(网上资料大把,不局限谁的资料)
2、stm8学习寄存器和库操作(看风驰电子的资料)
3、stm32学习寄存器和库操作(看正点原子的资料)
4、CC2541学习协议栈(看amo的资料、看我写的资料)
5、安卓入门学习(看《第一行代码》)………………(目前我所处阶段)
6、安卓蓝牙学习(未知)

ywlzh:

哈哈哈我路过,也说说吧,初学stm32,我也是从8位,16位单片机走过来的,学习的第一步,就是点亮个灯。
有人是只管点亮就行了,有人是会继续深究为什么会点亮。
目的是一样的,但有人是走个过场,有人能举一反三。

-END-

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

听我一句劝,单片机不要去学STM32真的 的相关文章

  • linux复习2 -- 文件权限、修改文件权限(用chmod)、常用命令

    1 文件权限 对于一个文件而言 xff0c 操作它 的用户可分为三类 xff1a 所有者 同组用户 其他用户 xff1b u user 表示文件属主的访问权限 xff1b g group xff1a 表示文件同组用户的访问权限 xff1b
  • C++1-C语言和C++的区别

    一 C语言与C 43 43 的区别 1 头文件 xff1a C 43 43 xff1a span class token macro property span class token directive hash span span cl
  • BW:LO数据源初始化步骤(精简版)

    首先在r3上删除 setup table xff0c 然后再填充 setup table xff08 锁定凭证 xff09 xff0c 同时 xff0c 在bw做无数据的初始化 xff0c 最后在bw做full load
  • C++3--构造函数、冒号语法

    一 构造函数 1 为什么要有这个概念 xff1a 例如下面的代码 xff0c 对于Table类 xff0c 可以通过t Set公有的方法给对象设置内容 xff0c 但是如果每次创建对象都调用该方法设置信息 xff0c 就会有点麻烦 xff0
  • c/c++语言面试题目整理

    1 static有什么用途 xff1f 在C语言中 xff0c static主要定义全局静态变量 xff0c 定义局部静态变量 xff0c 定义静态函数 限制变量的作用域 xff0c 设置变量的存储域 static 关键字主要有两种作用 x
  • c语言宏定义一个MAX函数

    1 span class token macro property span class token directive hash span span class token directive keyword define span sp
  • C++ -- 异常:try、throw、catch

    异常 申请内存的时候 xff0c 内存不够用 空间配置器申请失败 xff0c 不做处理 拷贝时内存错误 除数分母不能为0 等情况 会抛出异常 try throw catch 1 使用示例 1 xff09 除数为零 xff0c 情况 未处理情
  • C++ -- 笔试题

    1 下列对派生类的描述中错误的说法是 D A 派生类至少有一个基类 B 派生类可作为另一个派生类的基类 C 派生类除了包含它直接定义的成员外 xff0c 还包含其基类的成员 D 派生类所继承的基类成员的访问权限保持不变 2 当派生类中有和基
  • Linux 用户切换、修改用户名、修改密码

    一 用户切换 34 34 xff1a 普通用户提示符 34 34 xff1a root用户提示符 1 普通用户到root 方式一 xff1a 命令 xff1a su 然后输入root密码 此种方式只是切换了root身份 xff0c 但She
  • C++中的.和::和:和->的区别

    在学习C 43 43 的过程中我们经常会用到 和 和 xff1a 和 gt xff0c 在此整理一下这些常用符号的区别 1 A B则A为对象或者结构体 xff1b 2 A gt B则A为指针 xff0c gt 是成员提取 xff0c A g
  • AirSim学习日志 5-LQR实现无人机轨迹跟踪

    1 LQR控制器算法原理推导 1 1 状态反馈控制 连续线性系统的状态空间表示为 x
  • 英语常用短语

    1 xff0e 经济的快速发展 the rapid development of economy 2 xff0e 人民生活水平的显著提高 稳步增长 the remarkable improvement steady growth of pe
  • PX4进入系统控制台以及运行程序

    这里提供进入控制台两种办法 1 运行 Tools mavlink shell py dev ttyACM0 是我进入Px4系统控制台的命令 xff0c 进入之后应该是这样 Pixhawk src Firmware Tools mavlink
  • 哈哈,终于知道CSDN怎么改头像了

    话说之前一直郁闷 xff0c 说改头像的功能还没修好 xff0c 一直说服务器错误 今天偶尔发现 xff0c 右上角有个设置 xff0c 原来在这里可以改 我还发了几封邮件给CSDN的admin xff0c 居然只知道道歉 xff0c 不告
  • Hello Sky! pixhawk第一个例程学习解读

    学习px4的第一个程序 xff0c 这个例子作为官方给出解释的例程 xff0c 对于新手上手来说 xff0c 是很好的范例 接下来我对照程序源码 xff08 已经经过自己的修改和添加注释 xff09 进行讲解 1 PX4 INFO是标准的L
  • ShadowSSDT Hook

    ShadowSSDT表的获取 这里的ShadowSSDT表的获取是通过函数KeAddSystemServiceTable来获取的 使用这个函数的原因 xff1a 1 这个函数是已经导出的 xff0c 可以在代码中直接使用 2 这个函数里面使
  • 2013&2014

    2013总结 2013 毕业了 xff0c 算是正式工作半年 xff0c 2013年7月开始 xff0c 算是我的生活 xff0c 工作之外的时间都是自己的 一 收获 1 压力测试 差不多算是一个月的时间 xff0c 疯狂的一个月 xff0
  • BCTF总结

    缘由 上周 xff0c 我们小组Sigma参加了 百度杯 BCTF比赛 xff0c 经历了难忘的双休 xff0c 这次的BCTF跟以前参加的国内类似的安全比赛有些不同 xff0c 时间只有48小时 xff0c 题目不多 xff0c 但难度大
  • BCTF_海报探秘(300)

    这个题目来自上周的BCTF比赛 xff0c 题目是海报探秘 xff08 300 xff09 xff0c 一张png图片中隐藏了KEY xff0c 解出KEY xff0c 具体报告 xff0c 请下载 xff1a http download
  • 博客转移

    最近好久不来CSDN了 xff0c 自己搭建了一个博客 欢迎各位去新博客留言 http www l0g1n cn 以前学习汇编的博客 http www asmedu net blog user usermain jsp neighborId

随机推荐

  • 《Windows程序设计》之BLOKOUT1

    LRESULT CALLBACK WndProc HWND hwnd UINT message WPARAM wParam LPARAM lParam static BOOL fBlocking fValidBox static POINT
  • 天猫抢红包小工具源码

    时间很仓促 xff0c 写的很乱 xff0c 也就能用明天一天了 主要还是学习这个过程 include lt Windows h gt include lt stdio h gt include lt iostream gt include
  • vs2010开发qt程序debug正常,release出错

    在debug模式下 xff0c 配置的动态链接库是qtmaind lib QtGuid4 lib QtCored4 lib 这些链接库 xff0c 在release模式下是不适用的 xff0c 进入到qt的目录下 xff0c 发现了有一些不
  • cout与wcout

    一直以来只知道有cout用来输出 xff0c 今天用cout输出wchar时出现问题了 xff0c 输出结果是一段地址 xff0c 才发现了wcout的存在 使用wcout输出中文时 xff0c 又出现问题 xff0c 中文输出不了 xff
  • (极力推荐)BW:How to load and generate a custom hierarchy in SAP Business Warehouse (SAP BW) without using flat files

    这篇文章 xff0c 真是救了哥 xff0c 所以非常感谢这位作者 你看 xff0c 人家也是 2011 年 2 月 3 号才写的 xff0c 量身打造 xff0c 多好的人 xff0c 刚好赶上我了 PS xff1a 前段时间设计的文本抽
  • 主引导记录(MBR)信息分析与获取

    前段时间在安装黑苹果时 xff0c 发现一个问题 xff0c 电脑在启动时 xff0c 会找激活分区 xff0c 如果没有找到 xff0c 那就启动不起来 那能否写个小程序读取一下MBR信息 xff0c 把激活分区换成其它 xff0c 搞点
  • Duilib登录窗口

    先上效果图 xff08 自己感觉还不错 xff09 xff1a 功能不完善 xff0c 一是为了熟悉xml的写法 xff0c 手写 xff0c 不建议使用编辑器 xff0c 二了为了理顺程序的流程 xff0c 加入了部分注释 xml文件 l
  • React框架制作移动端H5可拖拽的悬浮图标

    一 前言 在跟需求方对接研发的需求 xff0c 人家说要做一个悬浮在页面的图标 xff0c 点击完截图然后进入一个新页面 xff0c 填完一些数据 xff0c 提交给接口 那么问题来了 xff0c 怎么制作一个悬浮框 xff0c 还是可拖拽
  • GIT回退到指定版本的两种方法(reset/revert)

    实现多人合作程序开发的过程中 xff0c 我们有时会出现错误提交的情况 xff0c 此时我们希望能撤销提交操作 xff0c 让程序回到提交前的样子 xff0c 本文总结了两种解决方法 xff1a reset revert 命令特点reset
  • W: GPG 错误:http://ppa.launchpad.net lucid Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY FAF69C646FF368B7的问题

    在安装更新时 xff0c 即在运行 xff0c 命令行sudo apt get update 或者运行更新管理器的时候 xff0c 出现W GPG 错误 xff1a http ppa launchpad NET lucid Release
  • Ubuntu操作系统下Pixhawk原生固件PX4的编译方法

    在Ubuntu上搭建环境相对简单许多 xff0c 按照PX4中文维基官网的教程即可 工具链安装 权限设置 把用户添加到用户组 dialout xff08 如果这步没做 xff0c 会导致很多用户权限问题 xff09 span class h
  • Tegra TK1中文输入法出错解决

    输入 xff1a ibus daemon drx
  • ubuntu16.0.4查看内存实时动态

    1 命令行输入 xff1a top 2 安装命令如下 xff1a sudo apt get install htop 安装完后 xff0c 直接输入命令 xff1a htop
  • xsense免注册资料网址

    http www avicom cn
  • loam中imu消除重力加速度的数学推导

    最近在看loam的源码发现里面有一段关于imu消除重力加速度的源码 xff0c 刚开始看不明白后来终于搞清楚了 xff0c 欢迎大家批评指正 要理解这个问题首先得明白欧拉角到旋转矩阵的变换 先上图 此图描述的是先绕X xff0c 再绕Y x
  • rc=20 > Connect to SAP gateway failed

    这种错误 xff0c 我是在一台用户的电脑上碰到的 xff0c 解决方案很简单 xff1a 把Computer Name换成英文 汗了许久
  • 循环结构

    循环结构 while循环 while是最基本的循环 xff0c 它的结构为 xff1a 只要布尔表达式为true xff0c 循环就会一直执行下去 我们大多数情况是会让循环停止下来的 xff0c 我们需要一个让表达式失效的方式来结束循环 少
  • 社会闲散人士或者普通大学生想走嵌入式方向该怎么学比较有效

    社会闲散人士或者普通大学生想走嵌入式方向该怎么学比较有效 先说观点 1这几年嵌入式开发的薪水已经非常高了 我们实验室做嵌入式的学长 xff0c 年薪平均30w以上 2嵌入式开发的竞争力很小 相比算法等 3嵌入式开发薪水的高低与学校的好坏挂钩
  • 单片机最小系统着实让人着迷

    单片机最小系统着实让人着迷 插播一条 xff1a 我自己在今年年初录制了一套还比较系统的入门单片机教程 xff0c 想要的同学找我拿就行了免費的 xff0c 私信我就可以哦 点我头像黑色字体加我地球呺也能领取哦 最近比较闲 xff0c 带做
  • 听我一句劝,单片机不要去学STM32真的

    听我一句劝 xff0c 单片机不要去学STM32真的 插播一条 xff1a 我自己在今年年初录制了一套还比较系统的入门单片机教程 xff0c 想要的同学找我拿就行了免費的 xff0c 私信我就可以哦 点我头像黑色字体加我地球呺也能领取哦 最