单片机与嵌入式的学习历程


前言


这篇博客仅用作记录个人的学习历程与经验总结,方便个人回顾,希望也能够对读者有所帮助。


一、学习顺序


学习顺序大体上可分为两部分:单片机与嵌入式

单片机

单片机,我的学习之路始于stm32,我并没有接触51单片机,可能是不太喜欢接触底层吧,想要直接有效率的看到结果,所以我选择stm32的hal库的学习,最初是依靠keil+cubemx的使用。

对于单片机,我的学习顺序:

1.stm32基本使用:GPIO UART I2C SPI TIM NVIC DMA PWM 当然还有没有列举出来的一些外设和功能。

2.freertos的使用:freertos属实是让我发现了单片机的新大陆,程序不再是单独执行,给单片机增加了灵动性,提高了效率。

3.进阶外设使用:单片机可以使用许多外设,如lcd屏幕,舵机,电机驱动等等,我这里举两个我推荐的外设:k210,openmv。有了摄像头的加持,你的可操作性又会提升一个档次。

4.实际操作应用:学完这些基本上可以自己做小项目了,比如平衡小车,寻迹小车,人脸识别开关等等。

嵌入式

嵌入式可以说是比单片机的难度与应用层面都提升了不止一个档次,并且在学习成本,与搭载外设的成本上都是单片机遥不可及的。

对于嵌入式,我的学习顺序:

1.Linux指令基本用法:这部分不要求全部背下来,因为到你用的时候一般也会去查找,但是要求会用,明白指令的含义与用法。

2.Ros的学习:ros绝对是linux系统的一大优势所在。

3.进阶外设的使用:有了ros就可以实现很多功能了,可以搭载摄像头,或者搭配机械臂。(成本不低

二、具体学习过程

1.需要具备的基础知识

C,C++,python

作为一个单片机或linux的学习者,具备编程语言基础是最基本的,对于单片机需要掌握C或者C++,一些摄像头使用可能用到python(k210是micropython)
linux也有linux的语法,重点了解ubuntu的指令。
一些图像算法的语法,opencv(一般用python)

所以重点在:C,C++,python。这三个编程语言是必须掌握的,越熟悉越好。

推荐学习的up主:黑马程序员(教的还可以,本人是学习他的课程,当然这部分见仁见智)

2.单片机的学习

stm32

刚入门时,我建议选择使用stm32f103c8t6,因为这个单片机麻雀虽小五脏俱全,而且很多教程也是基于这一型号的使用。

网上知名的up主有很多,如江协,野火等等,但是我推荐学习hal库,在这我推荐一个宝藏up主:韦东山stm32教程。他的授课非常细节易懂,并且带有项目学习,个人觉得很不错。

对于单片机的学习,一定要多做,并且要能够自己做出小项目,这一点是很重要的,一个小项目可能融合使用多个外设和功能,在这一点上是与单独学习某一部分是完全不同的,你需要考虑的引脚的分配定时器的使用中断的优先级等等。

后期还用了一段时间的cubeide,但是个人觉得不如keil+cubemx,可能之后我会了解clion+cubemx,据说这个搭配也是比较热门和实用的。

freertos

freertos绝对是每一个单片机学习者不可以错过的一部分,它将单片机提升到了一个新高度。对于freertos的介绍我在这不过多阐述,多线程的操作流程的精妙之处只有学习之后才能领悟。

这里我强烈推荐的up主还是上面提到的:韦东山freertos教程。他的freertos授课是我认为最好的,详细并且与项目相结合。这一点始终与我的学习建议相符。

3.嵌入式的学习

linux指令

我个人建议学习ubuntu操作系统,因为许多应用都是基于ubuntu进行使用。

Ubuntu20.04是我所推荐的一个版本,在初期我个人建议使用虚拟机如Vmware。当你熟练了ubuntu指令后,我建议运用双系统,只有使用过的才知道双系统有多香。他的性能跟虚拟机没法比,并且很多外设使用不支持虚拟机的。

其次对于linux的学习,还可能需要购买linux开发板,常见的有树莓派,香橙派,好一点的有jetson系列的主板,更加进阶的就是intel的nuc了。

对于ubuntu指令的学习,我个人没什么推荐的,指令的学习其实蛮简单,只需要了解熟悉即可,本人当时学习的是黑马程序员的课程。

这边还需提到一点是关于环境的配置

环境配置

环境配置绝对是我认为在嵌入式学习中最困难,最痛苦的一个过程,在这一部分你会出现各种玄学问题,各种报错,找不到路径,无法成功编译等等。这一部分也是折磨本人许久,但是想要实现之后的所有功能,环境的配置是至关重要的。

在安装好ubuntu系统之后,需要进行换源

##打开终端
sudo vim /etc/apt/sources.list
##打开清华源镜像,点击右侧“使用帮助”,下滑找到ubuntu,选择对应版本的源复制下来
#输入“i”,进入编辑模式,输入“dG”,删除所有内容,ctrl+shift+V粘贴,按esc退出输入模式,输入“:wq”保存并退出。
sudo apt update
sudo apt upgrade 
##换源成功

Ros学习

ros的学习是至关重要的,这里我推荐学习《古月居21讲》
我推荐的一个相应的的csdn博客:链接

在学习前要安装ros,我推荐使用鱼香ros。

wget http://fishros.com/install -O fishros && . fishros
##接下来按照它提示进行操作,注意ros与ubuntu版本的对应

学完这部分之后,就可以感受到ros的强大之处了。

外设使用

我推荐是学习使用一些摄像头操作,毕竟大部分的项目都离不开视觉识别的辅助。

OpenCV

opencv库包含了众多图像处理和计算机视觉领域的通用算法.

配置opencv的环境:参考教程

我推荐可以买一个d435进行学习,买闲鱼二手的就好,关于d435的使用,网上也与许多教程,需要有python基础,然后学习opencv的库函数。

学习的话,我个人是在黑马程序员学习的基础部分,更多的需要在项目中学习。

三、从单片机到嵌入式


单片机与嵌入式是可以相辅相成的,并且各有各的优势。

当进行小型项目,并且操作简单的部分,无疑使用单片机就可以完成相应的功能了
例如寻迹小车,避障功能…

而linux开发板的使用将会为你提供更强大的功能,同时也伴随着成本的提高。想象一下使用linux开发板搭建一个智能小车吧,它需要的哪些功能呢,初级方案可能是摄像头循迹与避障,但是这样的要求,我仅仅使用单片机就可以实现了,为什么要提高成本去使用深度摄像头与linux开发版呢?

这就不得不提到我最近看到的一则广告——最新的一款智能扫地机器人,它与别的扫地机器人完全不同的是,他可以通过双目深度相机进行测距,识别,建图等功能。而我想说的就是其中建图这一功能。

关于视觉

视觉可以提高一个项目的上限。

建图:是对相机所扫描到的画面的进行操作,实现将周围环境的绘制。

为什么要建图呢?因为有了地图,你的小车就拥有了自己导航的能力了。这一点就是linux比单片机的优势所在。小车不再是被动地依靠巡线前进,而是可以构造出全局地图,以上帝视角进行运动。可以说建图就是给了小车赋予了灵魂。

SLAM

视觉SLAM:全称为视觉同步定位与建图。这是可以实现上述功能的一个工具。本人目前也正在学习以t265与d435i的视觉slam方案。相信之后能够有所成果。

基于ubuntu20.04的t265环境配置:链接

基于ubuntu20.04的d435i环境配置:链接

更多的学习方案可能在之后会完善

结语

以上是本文全部内容,后续还会不断完善,有不正确的地方欢迎读者的纠正。

  • 31
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值