大家好,我是张巧龙,最近看知乎有一个问题,是关于嵌入式入门的,看到几个回答,还不错,分享给大家。


回答一:

作者:听心跳的声音

链接:https://www.zhihu.com/question/443062080/answer/1757550413

是的,你的感觉没错,其实你自己已经有朦胧的答案,在之前没接触过任何单片机,其实你的问题可以归结于以下2个原因:

MCU的基础知识理解的缺失

单片机(也就是STM32)的具体工作认识不清晰。

按照整个学习阶段先后顺序的说明,下面更详细的解读来说明问题。

1.专用术语

对于MCU来说,在没有接触具体的功能,仅专用名词就一堆,交叉编译,内核,加法器/除法器、协处理器、算法加速器、指令集、浮点运算、流水线、哈佛结构、寄存器(通用和外设)、中断和异常、FLASH、RAM、Cache(缓存)、SDRAM(刷新时间)、USART(波特率,停止位,奇偶检验)、CAN,SPI(片选)和I2C等。

这里面有的属于基础知识,有的属于进阶需要了解的知识点,这些名词的理解是作为入门者的第一个门槛,如果对一些专用名词不了解,那么组合起来的语句就更加晦涩难懂。

这里说我的学习方法:遇到听不懂的专业术语,去网络上查找理解,并找个本子或电脑通过文档的形式记录下,一段时间回顾一下,好记性不如烂笔头。

这里推荐<Cortex-M3权威指南>,对于单片机学习中需要了解的内核知识都有说明。

2.芯片工作流程

专业术语并不会多难,记住基本不会忘,就算忘了回顾下也简单,在迈过这个坎后,下一步就是理解芯片执行流程和我们要做什么才能让芯片工作起来。

1)在上电后,芯片复位启动。

2)MCU从FLASH通过指令/数据总线分别读取指令和数据,配合解析执行,其中在通过RAM和通用寄存器(以就是R0~R12的内部寄存器)处理可变数据。

3)根据执行的指令,配置和操作外设的的寄存器,从而驱动对应外设实现具体的功能。

4)配合上层组合逻辑,结合外设功能,执行具体应用的全部需求。

上述就是芯片工作的流程,而作为单片机开发者,实现的代码就是放在FLASH中的程序,由官方提供的SDK包和用户裁剪实现定义的外设驱动组成,按照上述流程就包含:

芯片的启动过程中对堆栈的初始化,系统相关外设的处理(如时钟) => 这部分由厂商提供,我们把文件放入项目即可,以STM32为例就是启动文件startup_xxx.s和系统初始化的SystemInit函数

配置应用需要的外设模块,如果你看网上的教学视频,都是从这一步直接开始的,特别是STM32基于STM32CubeMx的实现,会告诉你这么写是满足要求的。

如果你不是愿意深究的人到无所谓,当你深究这东西的时候,就会发现没有人告诉为什么要这么写,迷惑自然就来了,其实这部分就是嵌入式所谓的经验成分。

如大部分外设模块都要进行时钟使能,GPIO就要配置引脚的上拉/下拉,推挽/开漏,USART配置模式,波特率,奇偶校验,停止位,数据位,还要考虑对应GPIO的端口复用,I2C就要考虑主从模式,根据需要的传输速率确定模块时钟,SDRAM除了考虑引脚复用,时序,还要计算刷新时间来保证数据的稳定,这些知识理论上都是长期在工作中积累出来的。

在项目需求确定后,根据芯片和器件选型,就能够确定硬件PCB的绘图和布置,功能需求也能确定,如访问外部EPPROM,那么I2C就确定位主模式,并根据EPPROM的读写时序和芯片的性能,考虑到效率和稳定的平衡,就可以确定I2C的速率,考虑布局和其它需求,I2C对应的复用引脚也能确定。

事实上,对于真实项目,都是从需求=>项目计划书=>软硬件框架=>软件驱动

3.上层应用逻辑实现

配合外设的应用逻辑实现其实才是项目中最复杂的部分,包含中断前后台系统的交互,可能存在RTOS应用和协议移植,GUI的管理操作,和其它模块如wifi模块,蓝牙模块的交互,不过这部分属于进阶内容,当你对外设模块由一定认知后,这部分应该也会有自己的学习方法,这里我就不在赘述。

本回答到此就结束了,这只是我对单片机问题关于自己理解的总结,单片机虽然并不需要创新研发未知的技术,但却涉及从芯片底层到软件接口的全部实现,包含对现代计算机技术中向微处理器方向的全部精华技术,也是需要不断学习才能不被时代抛弃。


回答二:

作者:snowdream

链接:https://www.zhihu.com/question/443062080/answer/1719187639

通过题主的问题描述,题主其实在前期的准备阶段基本已经完成(包括C语言,实验板和编译环境),也开始跟着原子哥的教学视频开始了STM32的学习之路。

但是,根据我以前给其他朋友的分享,其实题主还差了关键的一个步骤:对STM32 MCU理论知识的学习和理解。

对于初学者而言,如果对MCU的理论知识(比如时钟树,GPIO/UART/IIC/SPI等配置过程)没有一个扎实和正确的认知,那么个人觉得跟着视频学习,即使学会也大半是知其然而不知其所以然

当然不排除有的朋友根据视频也能把基础打的牢固(但我觉得他们也在视频学习中穿插了基础的学习和理解)。

所以基于以上的分析,我建议题主

1. 先不要着急上手视频教学。

2. 选择一本STM32单片机的理论书籍,围绕最小系统,先从STM32理论知识入手。

3. ( 视频 + 对应理论知识 ) -> 实验板验证。来加深理论知识。

上面的过程可能会很慢,但是题主的基础知识肯定会打的很扎实,对后面的二次开发和扩展会有很大的帮助。

-END-

我是张巧龙,一名教电子的大学老师,欢迎关注!

STM32真的很难学吗?相关推荐

  1. 数据结构真的很难学?

    如果你关注计算机专业招聘试题,会发现越是大型公司,问的问题越基础,有的甚至问你什么是栈和队列,反而一些小公司会关心你做过什么系统.从关注点的不同可以看出,大公司更注重基础扎实和发展潜力,而小公司希望你 ...

  2. FPGA真的很难学吗?那可能是没弄明白这些道理

    问:零基础,想学FPGA,应该从哪入手?应该看什么教程?应该用什么学习板和开发板?看什么书等? 如果想速成,那就上网看视频吧,这样主要是面对应用的,一个小时内让你的板子运行起来.早期起来的快,活学活用 ...

  3. 【转】FPGA真的很难学详细解答

    如果想速成,那就上网看视频吧,这样主要是面对应用的,一个小时内让你的板子运行起来.早期起来的快,活学活用,就是后期没有系统理论支持,会有些吃力,特别是大项目,那完全是个悲剧.国内做的可以的,周立功算一 ...

  4. 计算机网络难学吗,计算机网络课程真的很难学吗-之续

    如果我们的教材是按照TCP/IP协议体系结构的层次来写,那么其中的章节一般应该包括:计算机网络概论.网络体系结构通述.物理层.链路层.共享介质访问控制(实质上讨论以太网).IP协议.传输层协议.应用层 ...

  5. 学淘宝美工设计真的很难吗?学历不高能做淘宝美工设计吗?

    本文由:"学设计上兔课网"原创,图片素材来自网络,仅供学习分享 学淘宝美工设计真的很难吗?学历不高能做淘宝美工设计吗?学历低.没有基础就学不好淘宝美工吗?低学历又想转行到淘宝美工的 ...

  6. 女生学计算机真的难吗,女生想学计算机科学与技术,怕很难学懂,这门学科是不是特别难?女生学到底好不好?...

    女生想学计算机科学与技术,怕很难学懂,这门学科是不是特别难?女生学到底好不好?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下 ...

  7. 二本学校考211计算机,普通二本学校的学生考211/985的研究生真的很难吗?

    原标题:普通二本学校的学生考211/985的研究生真的很难吗? 网友一: 我本科就是二本,念了一个交叉学科,交叉到什么地步呢,就是有些学校是把它放在教育学院,有些是设在物理学院,还有些是设在计算机学院 ...

  8. 零基础学习java编程,真的很难吗?手把手将你带入编程世界。

    零基础学习java真的很难吗?本人脑袋比较笨,从接触java到职业生涯已经小有4年了.怎么说呢,就是现在我依然能够保持着当年的那份不断学习的热情,是不是很不可思议.我告诉你,这是最基本最基础从事编程行 ...

  9. 3D建模靠自学很难学成功吗?

    很多打算学习3D建模的同学刚开始学的时候,总是信誓旦旦的说:我要自学,我一定可以自学成功.然后一般半年以后再见,同学3D建模自学得怎么样了啊?基本上大多数同学都会回答:哎,老师别提了,学废了,老不好意 ...

最新文章

  1. 【错误记录】Android Studio 创建 Flutter 应用被卡住 ( 更新 Flutter 插件 | 命令行创建 | 断网 )
  2. Python基础38(进程基础)
  3. 查看mysql表中的所有索引
  4. 刷breed 极路由3_路由器接入usb打印机制作无线打印机服务器
  5. ci 邮件 html模板,CI Email类发邮件
  6. js中如何判断一个DOM对象是否存在?
  7. docker -v -it -p 详细说明
  8. VMware14.1 Ubuntu16.04安装教程
  9. 给孩子一束安全的光 明基WiT MindDuo亲子共读灯首发评测
  10. 第15课 比尔庄园 《小学生C++趣味编程》
  11. (计算机组成原理)第三章存储系统-第七节2:页式/段式虚拟存储器
  12. Turtlebot2 环境配置
  13. Web Components 系列(八)—— 自定义组件的样式设置
  14. dwcs6 php 教程,初学者如何使用Dreamweaver CS6 (Dreamweaver CS6详细使用教程)
  15. “最新”手机号码归属地库制作
  16. Javascript解决音频audio在IOS系统下无法播放问题
  17. JS基礎:Hoisting 變量提升、TDZ 暫時性死區(Temporal Dead Zone)
  18. @RequestBody、 @RequestParam 、 @PathVariable 和 @Vaild 注解
  19. 重写equals为什么要重写hashcode
  20. 软考下午题第1题——数据流,题目分析与案例解析:

热门文章

  1. SAP Fiori :why my filter for category does not work
  2. price change SAT trace
  3. 使用工具快速找出custom work center使用的ui component
  4. 使用OData API批量删除Marketing Cloud里的contact
  5. CRM 702和CRM 712的区别
  6. 使用nodejs将某个简书用户的文章进行导出
  7. 2016年2月工作日志
  8. 细胞计算机生命游戏,【图片】【20170108 其它內容】【转】生命游戏【三体吧】_百度贴吧...
  9. quartzjob传递传输_Quartz教程三:Job与JobDetail介绍
  10. java 缓存分页_基于redis做缓存分页