探索单片机与嵌入式系统的学习之旅
目录
前言
这篇博客是本人的第一篇博客。
本人目前大一,这篇博客仅用作记录个人的学习历程与经验总结,方便个人回顾,如对读者有帮助,本人十分高兴。
一、我的学习顺序
本人学习步骤大体上可分为两部分:单片机与嵌入式
单片机
单片机,我的学习之路始于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环境配置:链接
更多的学习方案可能在之后会完善
结语
以上是本文全部内容,后续还会不断完善,有不正确的地方欢迎读者的纠正。
作者:Aokizy^