本专业不好找工作,也许可以试试嵌入式 嵌入式学习路线 从C语言到MCU开发

news2024/9/23 5:20:47

引言
到了毕业季,很多朋友仔细如何学习嵌入式,这个问题其实很难以回答,每个人的具体情况都不一样,也没有什么万能的方法,保证大家都能学好嵌入式。本篇文章,博主将结合我自己的经历和理解,谈论下博主自己的学习路线,希望能够对大家有所帮助。 大家需要根据自己的水平看自己当前处于什么阶段的。
一般嵌入式学习(以stm32为例)中,主要集中在四个方面:C语言、STM32(外设及内核)、RTOS、工具链。接下来将详细的阐述下,上述四个方面该如何学习,如果是本身没什么基础的同学,可以直接按照博主说的学习,博主本人就是这么学习的。

 注:嵌入式是工科,工科讲究实践。说的再多、懂得再多,不能做出实际的东西,是没有意义的。学习嵌入式的核心原则之一就是多动手写代码。另外还有一个原则就是:从浅到深学习。接下来的内容将贯彻这两个原则。最后强调一点,各个方面的技术是齐头并进的学习,而不是某一个方面学的非常好才去学习下一个方面,这种方法在博主看来并不可取。实际开发中,用到的技术会很多,我们只需要做好其中一部分就行了。

C语言

C语言是嵌入式开发必备的基本技能之一,对它的学习没有尽头,需要大家认真学习C语言。熟练使用C语言开发,只是嵌入式工程师的基本要求。

开发环境

学习C语言本身,可以使用各种工具链,这里博主比较推荐微软的VS开发工具,在win下学习C语言。作为小白而言,简单、好用的工具更重要,VS提供了开发C语言需要用到的各种工具。对于个人学习而言,社区版本完全够用,可以在微软官网下载到VS软件。博主使用的是VS 2019版本,也可以用其他的版本。

C语言入门

C语言的视频视频B站很多,大体上没有太大差距吧(指内容),博主自己也只是看过一些郝斌的C语言视频,这个可以看看,博主学习的时候更喜欢看书,主要是看书信息接受效率高。这里推荐一本C语言入门级别书籍:《C程序设计语言》,作者是布莱恩·克尼汉,丹尼斯·里奇。C语言创始人写的一本书,非常经典,在世界上都享有盛名。大名鼎鼎的Hello world程序就是这本书提出来的。

这本书的经典程度网上一搜就有,博主就不多赘述了,用它作为C语言入门书籍完全没问题。书里面的代码风格也是值得借鉴学习的,非常建议读一读该书。 

在这里插入图片描述

C语言提高
对C语言基本的语法使用有一定理解之后,就需要对C语言进行提高了。提高阶段,博主推荐如下三本书:《C与指针》、《C专家编程》、《C陷阱与缺陷》。 

在这里插入图片描述
这三本书应该读哪个?

这三本书,博主都研究过。三本书的内容有不少重复的地方,看完一本之后,另外两本看的也挺快的。如果有时间的话,建议三本都看看,时间不够的话,就只看《C与指针》这一本也行,这本书内容详实,有入门有提高,从浅到深,也可以拿来入门C语言。至于其他的书籍,博主因为没有过多研究,就不推荐了。

以上C语言的资料学习完成之后,基本上对于C语言有了较深入的理解了,应付平常开发应该没有太大的问题。 

stm32

stm32是目前市面上资料较多的ARM芯片(指Cortex-M系列芯片,下不赘述)了,用的人非常多,资料很全,遇到的各种问题在网上都可以找到解决办法。有些问题真找不到的话,那就触及到深入的领域了,也不是初学者该遇到的和能解决的。因此,博主建议,以stm32为切入点,学习ARM 32位处理器的使用。stm32芯片有非常多的系列,每个系列又有很多芯片,这里博主推荐stm32f407的芯片(博主也是用这个芯片学习的),兼顾成本、性能、学到的知识,性价比高。下面谈谈该如何学习这款芯片(其他的芯片类似)。

stm32基础

stm32芯片里面的内容其实非常多,但作为初学者,并不需要关心特别高深的内容。我们只需要掌握stm32常用的开发以及基本的知识点。博主根据自身的开发经验和经历,总结了如下常用的外设:GPIO、UART(串口)、中断、TIMER(定时器)、AD、DA、SPI、I2C、PWM、DMA。这些外设都是非常常见的,基本上所有的ARM芯片都会有。上述外设的学习可以不分先后,但还是推荐按照上面的顺序进行。

除此之外,还要学会使用一款开发工具链(推荐Keil,毕竟是ARM公司的)。能够掌握基本的Keil使用方法就行了。比如多文件编译、调试仿真、常见配置等。

学习完基本的外设之后,就可以动手写一些简单的项目,巩固所学知识。这些项目博主以后都会放到公众号里面,供大家免费下载学习,也会出一些文章,讲解项目的思路,供大家学习。

stm32进阶

以目前的招聘需求而言,学完基本的stm32内容已经无法满足了(太卷了)。因此,需要开始往较深入的内容学习。这里博主将进阶路线分为如下两条主线:软件主线、硬件主线。
软件主线

**C语言:**继续往精通方向学习C语言,比如,C语言的高级用法,C语言是如何实现面向对象思想的,C语言代码是如何控制硬件的,C语言代码是如何使用内存的、代码是如何在内存中布局的,C语言代码是如何在芯片中执行的,这些问题都是需要深入研究的。除此之外,也应该学习下常见的数据结构,如链表、树等。至于图这种数据结构,太复杂的,别为难自己。

**RTOS:**除此之外,还要学习RTOS(推荐FreeRTOS,背靠亚马逊,用的人多,资料也多,市场广阔),并且应该往深入的地方学习RTOS,而不应该仅仅浮于表面。知道使用FreeRTOS怎么创建任务、信号量、互斥量、队列等,这些只是表面,内部实现的原理和机制才是面试要考察的(毕竟所有的RTOS都类似,掌握了原理才能很快上手其他的RTOS)。而且这些原理性的知识是通用的,也是一个嵌入式工程师的内功,面试考察的就是内功。我们还可以借鉴一下FreeRTOS源码中优秀的设计思想,用到我们的代码中,一举多得。

**中间件:**有精力的话,可以学习一些常见中间件的使用,如emwin(写GUI界面用到,或者LVGL也可)、Fatfs(文件系统,管理数据用的到)、Lwip(网络协议栈,以太网通信用的到),这些中间件以会用为学习目的和标准,不需要深入研究,除非以后做这方面的工作。

硬件主线

stm32芯片的基本外设学完之后,我们还需要学习复杂的外设和芯片内部的一些内容。下面的图,建议大家背下来,这是博主在学习的过程中画的stm32芯片内部功能逻辑图,具有普遍意义(针对Cortex-M系列芯片)

在这里插入图片描述

我们学习的常见外设,只是挂载到总线(AHB、APB总线)上的一个个独立的功能单元,CPU(图中Cortex-M3就是芯片内部的CPU)如何与外设进行交互、芯片的调试系统、中断系统、总线系统等等,还有非常多的内容需要我们学习。

在学习stm32的时候,我们会遇到一些比较复杂的外设,这里面时钟系统(RCC)还是要学习的,RCC就相当于芯片的动力系统,连接着芯片内部的各个功能部件。除此之外,RTC(实时时钟)、CRC(循环冗余校验)、CRYP(加密处理器)、RNG(随机数发生器)、HASH(散列处理器)等外设看心情学习。但比较复杂的,如USB、以太网、FSMC(灵活的静态存储控制器)、SDIO(安全数字输入/输出接口)、DCMI(数字摄像头接口)这些复杂的外设,就不太建议学习了,可以了解下,不需要进行深入研究(学习成本高,真正用到了,学的那点也不够,导致性价比太低)。如果以后想专精某一个方面,可以去学习。CAN总线用于汽车领域,如果不打算从事汽车领域工作的话,可以不用学习。stm32f407芯片的外设就这么多,都在上面讲述了,各位同学根据自己的需求进行学习。

除了外设之外,M4内核还支持DSP指令集,这个用于对数学运算、控制运算、信号处理、数据处理等方面,也可以学习下如何使用。对DSP指令集的学习,只需要学习该如何使用DSP库即可,库里面的算法都是使用DSP指令集进行加速过的,我们只需要会用就行。

学习完上面的内容之后,也可以研究下CPU部分,如常见的堆、栈、流水线、寄存器、CPU现场等相关内容,这些在学习FreeRTOS时用得到,也是面试中常问的内容。

在软件主线、硬件主线之间,还有一个就是工具链,主要是编译器在链接期间的部分知识。这部分内容,也是我们经常用到的一些技能,如进行IAP开发、OTA开发等,还有一些特殊用途,也需要对链接阶段进行改动,以满足应用需求。

这里推荐几本书:《Cortex-M3权威指南》、《STM32F4xx参考手册》配合起来一起学习。 

学习顺序(重要,小白跟着做即可)

  1. 入门:首先要有C语言的基础(能用基本的语法编写程序即可),接着开始学习stm32的基本外设(常见的外设,上文中有提到)。这个时候可以做一些简单的项目,巩固下学习效果,学习stm32的核心原则之一就是多动手写代码。这里博主推荐江科大的视频(B站有),市面上少有的精品、免费视频了。收费的基础课,博主觉得都很难与其进行比较,看得出来,江科大的视频是用心做的,强烈安利~。

  2. 提高:这个时候需要提高C语言(推荐的书都去看看,研读一遍),先把C语言水平提上来,否则后续学习会因为缺少C语言基础而非常痛苦。之后,再去学习FreeRTOS,或者也可以先去学习stm内核部分,这两个先后顺序其实无所谓的(反正对新手来说都是新知识,都不简单^^),二者有些东西也是相辅相成的。

  3. 这个时候应该做一些有难度的项目,将自己学习的内容、技术体现在项目中,用于找工作。

学习到这里的话,基本上找工作已经没啥太大问题了。

stm32深入

这部分内容属于较深入的技术了,适合对技术(工资)有追求的同学,需要静下心来,慢慢研究的技术。这些技术都是较深入的,如果连上面的内容(指入门、提高部分)都学不会的话,这些内容还是算了,别为难自己,即学不懂,学了也没啥用(水平不够,用不到)。这里只放一下学习大纲,有兴趣的自己学习。

C语言
在这里插入图片描述
芯片内核
在这里插入图片描述
Keil提高
在这里插入图片描述
FreeRTOS
在这里插入图片描述

学习方法

这里嵌入式技术,是工程类技术要通过实践为主,这里推荐这个实战项目:

  1. STM32智能小车 手把手和整个开发过程都记录十分方便学习掌握
    基于HAL库的,里面有驱动开发,也有PID算法、适合入门加进阶学习。

STM32智能小车V3-STM32入门教程-openmv STM32循迹小车stm32f103c8t6-电赛 嵌入式 PID控制算法 编码器电机 跟随 电磁循迹

然后这也有标准库的

[stm32入门教程][STM32实战项目]STM32智能小车V1.5-stm32f103c8t6-stm32最小系统-手把手入门教程-嵌入式开发-嵌入式学习

参考文章与书籍:
嵌入式C语言自我修养:添加链接描述
添加链接描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例研究:如何在复杂环境中增强自组织

现有价值流的重组代表了管理者在敏捷转型的背景下所面对的最大可能的战术挑战。它直接影响到组织交付和影响既定社会结构的能力。它也在两个域之间的边界上:繁杂且复杂;目标结构的某些方面以经验为基础,具有一定的确定性,但我们无…

【Hot100】LeetCode—131. 分割回文串

目录 1- 思路回溯 2- 实现⭐131. 分割回文串——题解思路 3- ACM 实现 原题链接:131. 分割回文串 1- 思路 回溯 思路:需要一个判断回文的函数 回溯思路: 回溯过程遍历的是 字符串 s 参数为 startIndex,主要用来处理到 起始点 通…

【Linux篇】环境变量

1. env命令 环境变量是操作系统在运行的时候,记录的一些关键性信息,辅助系统运行。 在Linux系统中执行env命令即可查看当前系统中记录的环境变量。 环境变量是一种key-value型结构,即名称和值。 2. 环境变量:PATH 在前面提出的…

【C语言】深入理解指针3(附转移表源码)

深入理解指针3 1.字符指针变量2.数组指针变量2.1是什么2.2应用 3.二维数组传参的本质4.函数指针变量4.1函数指针变量的创建和使用4.2 typedef关键字 5.函数指针数组6.转移表 1.字符指针变量 上⾯代码的意思是把⼀个常量字符串的⾸字符 h 的地址存放到指针变量 pstr 中。 《剑指…

开关柜无线测温

温度是维护电力系统高压设备正常运行的重要参数,随着智能电网的发展,针对高压设备进行温度在线监测已变得日益重要。文章中的智能无线测温系统,通过对开关柜温度进行智能实时监控,可准确、及时掌握开关柜运行温度变化趋势&#xf…

模型工具LangChain:原理详解与实战案例分析

LangChain 是什么? LangChain是一个用于开发由语言模型驱动的应用程序的框架。它使得可以构建以下类型的应用程序: 数据感知:将语言模型与其他数据源连接起来 智能:允许语言模型与其环境进行交互 LangChain的主要价值在于&…

【java计算机毕设】交流学习平台MySQL ssm vue HTML maven项目设计源代码 带报告 前后端可分离也可不分离

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】交流学习平台MySQL ssm vue HTML maven项目设计源代码 带报告 前后端可分离也可不分离 2项目介绍 系统功能: 交流学习平台包括管理员、学生、教师三种角色。 管理员功能包括个人中心模块用于修…

深度学习实战1--决策树与随机森林(最新版本不报错)

1.乳腺癌数据集简介 乳腺癌数据集包含了美国威斯康星州记录的569个病人的乳腺癌的病情,包含30个维度的生理指标数据(特征),以及乳腺癌是恶性还是良性的标签。因为这是一个二分类问题, 也叫二类判别数据集。 2.实战任务 这数据主要包含569个样本。每个样…

Vue3、Vite、Pinia基础学习

Vue3 1、创建一个Vue3应用 <script src"vue.global.js"></script> <body><div id"app">{{msg}}<h2>{{person.title}}</h2><h2>{{person.name}}</h2></div><script>// 采用解构的方式可以省…

【使用 Python 进行图像裁剪的多种方法】

以下为您介绍使用 Python 进行图像裁剪的多种方法及代码示例&#xff1a; 使用 PIL 库&#xff08;Pillow&#xff09;&#xff1a; Pillow 是 Python 中一个强大的图像处理库&#xff0c;其截图功能不仅可以获取屏幕截图&#xff0c;还能对截图进行丰富的图像处理操作。例如&…

PD取电协议芯片 XSP08Q集成全协议芯片

1&#xff1a;Type-C接口应用很广泛&#xff0c;几乎可以覆盖各行各业&#xff0c;例如快充领域&#xff0c;多种快充协议都可以在Type-C接口上实现&#xff0c;在用电端&#xff0c;只需要使用XSP08取电协议控制芯片&#xff0c;即可获取各种快充电压&#xff0c;例如&#xf…

以某团为案例,30分钟讲清商业模式画布该如何做!

在进行商业模式分析时&#xff0c;即时白板内置的商业模式画布模板显然是一种极其有效的工具。该模板将复杂的商业逻辑分解为明确的要素&#xff0c;使得分析过程更具条理性和方向性&#xff0c;便于深刻理解和呈现商业模式。 以下以某团为例&#xff0c;详细解析其商业逻辑&a…

Django REST Framework(十九)权限

Django REST framework (DRF) 的权限认证涉及以下几个方面&#xff1a;全局权限配置、局部权限配置、自定义权限类、以及自定义认证类。以下是关于这些方面的详细说明&#xff1a; 1. 全局权限配置 在 Django 项目的配置文件 settings.py 中&#xff0c;可以全局配置 DRF 的权…

警惕!血脂偏高,这些身体信号你不可不知!

在快节奏的现代生活中&#xff0c;高血脂&#xff0c;这个看似“沉默的杀手”&#xff0c;正悄然威胁着越来越多人的健康。它不像感冒发烧那样有明显的症状&#xff0c;却能在不知不觉中侵蚀血管&#xff0c;增加心血管疾病的风险。今天&#xff0c;我们就来揭开高血脂的神秘面…

第四届中国RPA+AI开发者大赛火热报名中!

创新未来 第四届中国RPAAI开发者大赛 报名正式启动 数字化转型的加速推进为RPA技术带来了前所未有的发展机遇。AI技术的飞速进步&#xff0c;特别是在机器学习、自然语言处理和计算机视觉等领域的显著进展&#xff0c;已经大幅度扩展了RPA的应用范围。 据IDC研究报告预测&am…

windows共享文件给单个用户方法操作说明

如下图&#xff0c;我们想给学习视频这个文件夹共享出去&#xff0c;但是不想每个用户&#xff08;Everyone&#xff09;都可以访问&#xff0c;只允许本地账户ZZ可以访问&#xff0c;该如何操作呢&#xff1f;请见下面的内容。 右键这个文件夹&#xff0c;点击属性 点击图下所…

本地运行 AI 有多慢 ? 大模型推理测速 (llama.cpp, Intel GPU A770)

上文说到, 天下苦 N 卡久矣, 直接使用 CPU 推理又太慢. 那么, 在没有 N 卡的情况下, 本地运行 AI (神经网络) 大模型, 能够达到怎样的速度 ? 同志们好, 欢迎来到 胖喵穷人实验室 ! 这里专注于 低成本, 低难度, 低风险 的 “三低” 小实验. 胖喵穷人实验室 (PM-PLab-E)正式名称…

如何在算家云搭建模型Linly-Dubbing(语音识别)

一、模型介绍 Linly-Dubbing 是一个智能视频多语言 AI 配音和翻译工具&#xff0c;它融合了 YouDub-webui 的灵感&#xff0c;并在此基础上进行了拓展和优化。 该模型致力于提供更加多样化和高质量的配音选择&#xff0c;通过集成Linly-Talker的数字人对口型技术&#xff0c;…

零基础入门转录组数据分析——预后模型之多因素cox模型

零基础入门转录组数据分析——预后模型之多因素cox模型 目录 零基础入门转录组数据分析——预后模型之多因素cox模型1. 预后模型和多因素cox模型基础知识2. 多因素cox预后模型&#xff08;Rstudio&#xff09;——代码实操2. 1 数据处理2. 2 构建多因素cox模型&#xff08;用输…

有色冶炼行业中的智能电动机保护器

低压电动机作为有色冶炼企业底层大量使用的设备&#xff0c;其异常运行不仅影响冶炼厂的正常生产&#xff0c;还会 威胁到人的生命安全&#xff0c;因此为电动机设置合适而又全面的保护至关重要。智能电动机保护器集保护、 遥测、通信、遥控、显示等功能于一体&#xff0c;是目…