Skip to content

嵌入式

这一篇文档记录我当前学习的经历里面比较值得推荐的课程以及书籍, 大家在实际学习的时候可以按照自己感兴趣的方面进行拓展、选择学习, 在实际学习的时候, 有不会的可以直接百度, 推荐使用必应搜索, 下面记录的知识里面大部分我都记有笔记, 可以参考一下

我的笔记大部分是为了我自己查阅, 所以在其他人看来有可能不是很清晰, 最好自己建立一个自己的笔记库

我看的课程大部分来自B站, 其他可能有更好的课程

我的主要学习方向是嵌入式系统, 以及物联网

上面的笔记链接是我的笔记库, 是最新的, 论坛上的可能不会及时更新

其他: 招新里面的那一个自制项目的开源链接以及教程

负责人

github: Xvsenfeng

郑州大学21级, 首都师范大学23级嵌入式练习生, 主修嵌入式系统+物联网(实际可以实现物联网全栈)

邮箱 : [email protected]

如果文章的内容出错或者你有更好的建议可以联系我, 我看到以后会进行更新的, 某一部分的资料不全或学习困难也欢迎指出来, 时间比较紧, 之后我有时间会不断完善资料的

必备知识

这一个部分是入门嵌入式必备的基础知识, 不管之后发展到哪一个方向到需要用到

C语言基础

嵌入式由于接触的内容是比较底层的内容, 所以大部分的开发使用的是C语言, C语言可以更方便的操控内存以及可以使用比较小的内存实现功能, 保证开发效率的同时兼顾难度

我的C语言是在学习了C++课程以后通过这一个课程学习入门的, 之后通过阅读《C和指针》以及《C陷阱与缺陷》

学习完C语言基础教程之后就可以开始学习嵌入式了, 数据类型以及基础算法在我的理解中是不需要特地学, 代码看了多了常用的基本都会了, 不常用的到时候现找就行, 重点在于基础语法以及编程思路的建立(不适用于比赛)

这时候可以使用C语言做一些简单的项目, 比如使用SDL之类的库进行简单的应用开发

也可以看一下我系统编程部分推荐的课程

电路知识

我这一个部分的内容在学习的时候大部分是根据这一个视频进行的, 同时在学习的时候也需要有扎实的电路基础, 这里推荐两个视频电路模电, 在实际学习的时候不需要全部融会贯通, 只需要掌握基础的电路原理以及元件性质已经可以满足现阶段的大部分的问题

之后根据实际面对的问题针对性学习即可, 学校安排的课程是一个包含了所有方向的培养方案, 实际学习的时候不需要全部精通(有保研等需求除外)

注: 电路里面的电容电感的基本性质, 电路里面的基础分析方法, 以及模电的第一章

嵌入式入门

可以看一下《嵌入式C语音的自我修养》了解一下编译链接之类的编程基础知识

51单片机

经典单片机, 入门级单片机, 可以用于了解单片机的基础知识

我学习的课程是这一个, 购买一个二手的开发板就够学习用了, 可以看一下郭天祥的书(非必要)

看完以后可以试着自己搭建一个最小系统板之类的练练手

了解寄存器的知识, 单片机的简单操作, 基础外设的使用以及通信协议, 中断的使用等

stm32

经典的ARM架构开发板, 可以了解现在比较通用的各种外设以及编程思想

我学习的课程是这一个, 从标准库开始打牢基础, 之后学习封装等级比较高的HAL库的时候可以自己有能力找出来出现的问题, 听说这一个视频的质量也很高但是我没有看过

不要迷信各种示例代码(包括官方代码), 有独立的查手册的能力以及翻阅源码的能力, 以官方手册为准, 出现问题可以去官方社区提问(我之前遇到过官方代码和手册有矛盾的情况, 工作人员说以手册为准)

学习完基础以后可以了解一下HAL库的使用, HAL库是更高一层的封装, 但是不了解底层的话出现问题难以排查, 以及会出现效率低的问题, 但是可以更高效的生成代码, 我学习的是这一个课程, 但是据我所知的课程大多脱离CubeMX, 导致学习起来这一个工具使用会不顺畅, 可以买一本《STM32Cube高效开发教程》当做字典进行查阅, 这时候的水平已经可以备战一下蓝桥杯嵌入式赛道了

提升

嵌入式软件

学习嵌入式常用的框架, 可以减少大量的开发时间, 在实际学习的时候首先需要了解这一个框架的基础使用方法, 之后有能力的话可以深入了解一下源码(我的笔记里面有相关的内容可以参考一下)

FreeRTOS

嵌入式使用最多的一个操作系统, 网上的课程暂时没有看到水准比较高的, 可以参考一下野火的书, 他的视频剪辑比较乱, 照着书看会比较容易理解, 之后可以直接看源码, 网上有很多的源码解读

lwip

以及简单的嵌入式网络框架, 可以用于实现sockt相关的接口, 用于实现网络编程

【正点原子】手把手教你学lwIP网络编程协议-虚神疯-稍后再看-哔哩哔哩视频 (bilibili.com)

lvgl

一个图形化界面框架, 可以在使用很少的资源的情况下运行, 我学习的时候参考的课程是这一个课程

RT-Thread

一个国内的嵌入式系统, 可以很方便的移植其他的框架(图形化界面), 虽然使用的人数不如FreeRTOS但是发展的速度很快, 主要参照官方给的教程以及手册, 很详细, 我的笔记里面把代码加了一下注释, 之前发在CSDN上了一部分

这一个视频课程是不全的

基于stm32(野火指南者)的RT-Thread学习笔记_唐·柯里昂798的博客-CSDN博客

芯片内核

推荐书本《cotexm3权威指南》

cotex m3是一个经典的芯片内核, 这一个内核里面的很多知识在RISC-V架构里面也有借鉴, 配合嵌入式系统食用效果更佳

MQTT框架

韦东山的课程, 在他的公众号可以在活动的时候一分钱购买, 了解一下这一个通信协议, 以及使用简单的wifi芯片进行实现, 他的课程也可以作为一个项目的实践

各种的模块使用

可以看一下屏幕模块, 温湿度模块之类常见的模块的使用, 以及驱动的编写格式, 之后就可以开始自己实现一些项目了

硬件方向

因为我主要的方向不是硬件所以这一个方面我不太清楚, 我学习的大致层次就是够我自己做一些小东西出来以及复刻大佬开源的物品(稚晖君的小电视等)

PCB绘制

可以使用立创eda, 这一个软件的使用比较简单, 但是之后最好还是学习一下AD之类的专业软件

3D建模

我主要使用这个来进行外壳的绘制, 所以学习的比较少, 用的软件是SOLIDWORKS

3D切片

主要的功能是把3D打印的模型转换为实际3D打印机可以处理的方案, 我使用的是拓竹的机器, 所以使用的也是拓竹的切片软件, 可以参考一下橙豆造物这一位up的视频

代码规范

可以多参考一下比较优秀的作者的代码写作习惯以及代码构建的思路, 从而使得自己的代码框架更加清晰, 具体的学习方式有

  1. 阅读大量优秀代码
  2. 看一些实战项目的教程
  3. 《代码大全》这本书

其他

git的使用

可以使用git+github/gitee之类的进行版本管理, 以防出现大型bug的时候难以解决

笔记记录

我经常使用的软件是Typora, 使用Markdown语法, 加上图床可以实现远程访问之类的, github/CSDN等网页也都支持这一个语法, 是一个程序员比较喜欢的语法, 使用这个语法进行拓展可以实现PPT, 简历制作之类的, 还是比较实用的

虚拟机

我用的是VMware, 使用这一个主要是有的开发环境只在Linux才有, 还有一些比较早期的课程只能在Win 7或之前的操作系统运行, 还可以用这一个软件进行一些比较危险的操作, 记得做好快照就好了

Linux基础操作

了解Linux操作系统的基础指令以及使用, 建议使用ubuntu进行入门, 可以使用这一个了解一下电脑基本的运行原理

推荐书籍: 鸟哥的Linux私房菜

如果想要进行嵌入式Linux开发, 可以看一下正点原子的课程, 从这里可以学习到Linux系统比较底层的知识, , 但是这一个课程在某些地方讲的不是很详细, 内容又比较难, 所以需要有比较强的自学能力

系统、网络编程

了解一下Linux系统上面的基础编程, 可以看一下黑马的课, 这一个up还有一个网络编程的课, 实际学习的时候把这一个课当做框架, 实际的知识点不清晰的使用网络找资料补全

理解一下多任务编程以及网络编程的基本思想, 学习一下socket编程的编程思想, 同时了解一下网络编程的基本协议, 在之后其他平台的开发里面有调试的能力

python

可以用于写简单的上位机, 实现单片机和电脑的交互, 基础课程网上很多, 播放量比较高的都可以, 之后可以看这一个up的系列教程补充一下底层的知识以及线程, socket相关的知识, 这个老师的pyQT也可以看一下, 可以用于实现电脑端的

前端

在实现物联网项目的时候, 有可能需要实现一个用户交互的界面, 用网页进行实现的时候需要知道最基础的前端知识, 会用即可, 基本会使用html和简单的CSS已经可以满足大部分的需求了

黑马的课程

编译原理

了解一下编译的过程, 程序的预处理, 编译, 链接等过程, 以及了解一下不同机器架构的机器码的基础知识

之后可以使用Makefile以及cmake实现自己的编译脚本, 不必再依托于现有的环境

汇编

由于不同的机器内核里面的汇编代码是不同的, 所以这一个不需要去记住具体的指令集, 只需要知道汇编代码的基本逻辑, 可以在查手册的基础上实现简单的功能即可

这个课程可以参考一下, 但是由于依托的是课本, 所以有些比较落后, 我当时好像是用的Win7虚拟机学习的, 其他的一般系统开发的课程里面会有, 在使用的时候大部分起到的作用是为C语言建立环境以及操控C语言不能控制的寄存器

自制操作系统

**注 **: 这一个部分号称编程里面最难的一个方面, 量力而行

可以看一下《30天自制操作系统》这本书, 但是由于年代比较远, 有的操作需要在Win7的虚拟机里面实现, 我是使用VMware搭建的环境

之后进阶可以看李述铜老师的手写操作系统的课程, 价格比较高但是内容质量很高

通过这一个部分的学习可以充分理解操作系统的运行原理

其他的芯片

目前国内比较火的芯片是esp32, 推荐学习他的ESP-IDF开发方法, 这一个开发方式是目前主推的开发方式, 里面集成了比较常见的大部分框架, 比如说lvgl, lwip。在实际开发的时候可以使用系统里面自带的一部分驱动, 大大减少工作量, 但是多个框架的协调需要自己学习, 现在网上我没有看到比较全面的视频教程, 主要的参考资料是官方的文档和代码

可以看一下嘉立创的esp32板子附带的资料, 之后我的项目教程里面会有比较详细的介绍

还有比较火的芯片架构RISC-V, 这一个李述铜老师的课里面也有

学习了Cotex-m3内核以后就会发现大部分现在的内核以及芯片实现的功能都比较相似

使用的工具

学习软件的时候主要使用就是各种开发板, 这种没啥可说的, 其他如果要学硬件的话, 基础的最起码有电烙铁, 热焊台, 万用表, 这几个有了以后基础的处理基本大部分都可以了

实际开发板调试的时候一般会使用Jlink, Usb转串口, 也可以准备一下, 其他大概就是用面包板+元器件搭建测试电路, 之后升级PCB

示波器比较贵, 可以用逻辑分析仪下位替代一下

焊接

在实际焊接的时候, 我比较喜欢的方式是热焊台加焊锡膏, 在连接一些比较小的引脚的时候比较好处理, 之后可以使用吸锡带把多余的锡处理掉, 使用热焊台加热的时候比热风枪更加充分, 不容易出现只有外部的焊锡膏化了, 芯片下面的没有, 导致导电的现象

在焊接两个面都有元器件的板子的时候可以使用热风枪, 但是这个玩意不好掌控, 使用的时候注意一点

焊好以后使用万用表, 看原理图测一下不是一个电路的地方有没有断绝, 是一个回路的有没有连接起来

具体方向的课程

嵌入式开发有很多不同的方向, 比如电机开发, 驱动开发, 因为我主要学习的是物联网开发, 所以不是很清楚, 如果有其他同学比较清楚可以进行补充...