既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
全文有4787个字,本人一字不漏看完了,真的感同身受!
**
**
今天我也分享给大家,希望对大家有帮助。
以下是他的原文:
最近拜读了无际老师的单片机框架,深受启发。
同时也让我不禁感慨自己的学习之路,回想从开始学习单片机到现在具体运用也有近20年的时间了,借这个平台谈谈我的学习经历,也是为了让广大的单片机爱好者能够更好的学习这门技术,避免弯路。
1.关于基础知识
由于我的本科专业是雷达,所以基础课就免不了模拟电路、数字电路、高频电路以及微波原理等电子学的基础知识,同时还会有自动控制原理、信号与分析这些科目。
当时的学习是云里雾里,只能够解决书上的一些习题,但对于具体的问题尤其是运用是无法解决的,脱离了实践的知识是抽象的。
现在回头想来,也许是因为当时不禁具体的理论学习,让大脑对知识进行了进一步的抽象反而更加深刻。
庆幸的是当时没有对这些科目产生抵触心理,当我接触到真正的电子设备时才发现,真是由于理论知识的基础才能促成工作更好的落地。
尤其是大学二年级通过单片机选修课无意中撞开了嵌入式的大门,让想象中的自动控制从抽象变成具体,在此我要感谢任课老师教授。
那么这些基础课又对单片机会有怎样的影响,我谈谈自己的看法。
1.1 硬件
当前我们接触的大多数计算机都是数字计算机(这里是针对模拟计算机而言的),在数字电路这门课程中,我们学习了组合逻辑电路和时序逻辑电路,所谓的组合逻辑电路实现了基于电路的运算.
这是构成计算机运算的基础,而时序逻辑电路使计算机具有了“记忆”,也就是所谓状态的历史相关性,这构成了计算机存储与程序运行的基础。
我们站在数字电路的角度来看待单片机或者某个单片机外设,它正是运用各种同步信号(包括时钟、触发等),更改或者获取某一特定存储空间的数据。
如:单片机内部是通过时钟信号驱动PC指针从制定的RAM空间或者程序ROM空间中依次读取指令,单片机内部的CPU核心再通过对指令的解码实现相关动作。
而所有的外部设备包括传感器、存储器、输入输出设备也都是通过制定时序实现与单片机实现通讯,并通过对外设内部存储空间的读写完成相关功能。
如通过规定的时序完成对DS18B20的读写即可完成温度的读取,通过SPI口与ILI341液晶显示屏通讯,将每个像素的颜色信息写入规定的显示空间地址即可完成显示,通过设置AD寄存器启动AD转换并通过寄存器读回等等。
1.2. 软件
我当初学习单片机使用的是汇编语言,现在除了BootLoader很少会使用到汇编,但正是汇编语言的学习让我真正理解到了计算机底层的逻辑工作原理。
特殊寄存器、累加器、B寄存器、程序状态字、程序计数器PC,它们是如何相互配合完成运算的,立即寻址、直接寻址、间接寻址、寄存器寻址、寄存器间接寻址等寻址方式更是C语言指针的基础,(BTW:当初尝试考计算机三级第一次就卡在机试的PC汇编上了,学完单片机后满分通过)。
同时也正是汇编的学习,让我对中断的处理有了及深刻的认识,在中断时需要“保护现场“,此时需要压栈处理,恢复现场时,则需要出栈操作。这对于后面的操作系统中所说的的任务切换的实质动作了。
综上所述,打好学科基础是非常必要的。
我们在大学时学到的知识在学校期间也许是脱离实际的,只局限于做题解题,但是当你积蓄了大量的理论知识后,在实际工作中就会有一个明确的理论支撑,能够让你更快的熟悉工作。
2.关于开发板
初学者面临的第一个问题是如何选择开发板,我认为应当遵循经济适用的原则。
现在有很多争议:要不要先学51、到底要不要学习51、是不是直接从stm8或者stm32开始学习,是不是要用arduino、用arduino会不会被人看不起、arduino是不是小学生用的、要不要上树莓派、现在ESP32很火要不要学ESP32,stm32是选正点原子好还是选野火。
当然也有人说不要买开发板,直接买个核心板从面包板上开始搭建吧。
我觉得对于想学习单片机的人目的各有不同,不能给出一个笼统的答案,只要在个人经济范围能够承受的范围内,买个外设齐全的开发板也是不错的选择。
如果喜欢动手就从核心板、洞洞板做起,只要我们学到东西就行,现在某宝上有很多的开发板,并且都带有很多的教程。
但是这里面的教程都是针对某一个功能、外设的,比如按键、串口等等单个外设的例程,目的就是让学习者掌握某一类外设的应用,根据自己的需要进行综合。
还有一类就是像无际老师这样,将自己的工程案例制作成开发板,有针对性的进行教学,这样可以从外设到架构一起学习,关于架构这一点我们后面谈。
一般电子爱好者都会有很多的开发板,以我为例就用51、AVR、LGT、arduino、STM8、STM32、ESP8266、ESP32等等开发板。
还有各种外设,只要能够适合需求的就是最好的,尤其对于个人来说只是用来学习,不是用来做产品,基本不会考虑芯片的成本的,不会计较几分几角的利润在产品级数下的放大效应。
怎么好用还要看这个芯片的支持是否完善,例如STM32之所以能火这么多年就是基于它良好的开发生态,从STD到HAL到cubuMX,从jlink到stlink都很方便跟踪调试,它完成了从面向寄存器编程到面向功能的编程。
以前使用51、AVR单片机都是逐个寄存器编写,大多用到位运算等等,但是到了STM32 STM8单片机的时候厂家提供了标准库。
只需要知道配置哪个功能即可,非必要不会去配置具体的底层寄存器,尤其是32位的单片机再逐位配置会相当繁琐(暂且抛开效率问题)。
对于开发者只需要把更多的精力放在功能实现上,ST公司更是推出了STM32cubeMX方便的配置初始化。
当然有类似功能的软件也很多,如果不是专门写驱动的工程师现在也越来越少的和底层打交道了。ST的标准标准外设库可以看我写的这篇文章
https://www.docin.com/p-762096420.html
还有就是看开发环境,比如现在用的比较多的就是针对51和stm32等的Keil环境、当然还有针对AVR开发用的WinGCC、AVRStudio等等,还有针对arduino等芯片的图形化编程引擎如mixly等,现在还有针对51单片机的图形化编程引擎。
图形化编程引擎的使用降低了编写代码的成本,人们只需拖动几个积木样的图形即可完成程序编写,arduino的广泛应用也归功于此,这为许多有想法的开发者提供了快捷的原型制作渠道。
还有就是选择编程语言,大部分的开发语言还是使用c语言。因为c语言有着良好的底层操作能力和较高的效率,学习c语言还是主要的课程。
现在较新的芯片如ESP8266、ESP32也支持基于python的编程,python编程更多的也是调用现成的库来实现功能。
用ESP8266时,也接触到可以使用LUA语言编程的固件,将LUA脚本发送到ESP8266即可运行,这对于需要实现简单功能又不想编写大量代码的人来说不失为一种好的渠道。
3.关于编程
当你第一次点亮开发板上的LED后,就开始了编程之旅。
几行代码可以顺利通过编译并上传,我们就可以认为这是成功的。
但是通过我的实践我觉得单片机编程有这么几个阶段:
3.1 功能实现
这里所谓的功能实现就是指跑通各类接口、调通各类外设,能够对外设有一个客观的认识。
这里主要涉及GPIO、中断、定时器、看门口、I2C、串口、SPI、CAN、AD、DA等常用功能或总线。
能够通过这些接口实现对常用外设的操作,如按键、LCD、LED、时钟芯片、看门狗芯片、AD芯片、存储芯片等等常用外设芯片。
这是学习单片机的基本操作,如果这些功能学会了,可以说是基本入门了。
在这一阶段务必学会:
①自主阅读芯片手册
这里的芯片手册包含单片机的芯片还有外设芯片,能够通过阅读手册查询功能实现的寄存器、实现芯片功能的寄存器,接口协议,这样即使以后遇到一个没有见过的芯片也能编写驱动程序将芯片使能。
②学会debug
能够使用示波器、万用表、stlink、jlink、协议分析仪等外设仪器查看芯片工作状态,能够使用IDE提供的debug功能设置断点调试程序。
③积累常用电路
单片机是软硬结合的一个技能,作为工程师不仅要能通过软件实现功能,更要积累硬件电路的实现,如5v、3.3v电源,各类芯片的外围电路等等。
在这一阶段一定要对寄存器这个客观对象建立认识,正如本文第一大点所述,所有的功能实现都是针对寄存器的读写。所有的外设都是操作寄存器。
3.2.功能整合
通过上一阶段的学习已经掌握了程序编写和单个功能实现,比如可以实现串口和PC的简单收发通信、能够读取到外设传感器送来的物理量信息、能够在各类显示屏上显示想要的字符图形。
在第二阶段就要实现上述功能的整合,例如通过按键点亮LED、通过串口点亮LED并在液晶屏显示、读取DS18B20或者SHT11传感器并把想要的数据显示到液晶屏上,通过定时器等制作一个简单的闹钟。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!