当前位置:网站首页>零基础如何学习单片机,一位入门者的进阶路径,可参考
零基础如何学习单片机,一位入门者的进阶路径,可参考
2022-08-01 23:57:00 【an520_】
问:单片机现在水平只能说会,想在外设上多多学习下,手里面只有开发板,请问大家有没有什么好的方法?目前基础知识只有C 会单片机 数电懂点,模电没看过,电路还没有开课。
答:学习单片机及其外设电路的硬件、软件设计,可以初步按照如下步骤来学习:
1、学会看时序图;
2、学会各种通讯协议(典型的有I2C、SPI等) ;
3、学会看datasheet(要求有一定的英语阅读能力);
4、根据datasheet设计外围电路;
5、根据datasheet写程序;
下面来看一下一位从初学到进阶的心路历程。
正文开始:我是直接使用了单片机学习板,在某宝上面购买的,然后送了一大堆资料,现在都准备毕业了,我居然还没有把所有外设都玩一遍,真是揪心!
虽然题主只是问了怎么学习单片机及其外设,但我认为,外设的学习与单片机的片上资源同时学习最好,给自己一个项目题目然后动手去写代码是最好的。单片机的片上资源就是那些IO口,定时器/计数器,ADC等等。
我想给出以下学习建议:
一、基础知识一定要学好;
二、分模块学习;
三、做完一个项目一定要总结;
四、学通了一种单片机,再学习其他的单片机就会上手很快的,学习外设同理;
五、学会移植(抄)程序。
01 基础知识
技术性的东西学习起来都是一层一层的,如果前面的基础知识如果没有学好,到了后面的学习会让你懵懵懂懂,最后会走很多弯路。
对外设的学习,可以从两方面来看,一个是单片机与外设的电路图连接,这是硬件方面;另一个是软件方面,如何用软件控制这个外设。例如:
这是一个LED流水灯模块,你至少要从电路图上知道以下信息:
1、LED灯D1到D8分别连接到了单片机的P1.0到P1.7引脚;
2、当你把其中一个引脚置零,相应的LED灯就会亮。
这是读电路图的能力,是最基础的也是最重要的。
然后是例程,点亮一个LED灯。
#include<reg52.h>
sbit LED=P1^0;
void main (void)
{
LED=0;
while (1);
}
1、为什么要包含reg52.h?里面有什么内容?
2、sbit是什么意思?是标准C里的关键字还是keil C里的关键字?为什么要写这一条语句?
3、为什么最后要加while死循环?
……
初学的时候一般是不会问自己这些问题的,我自己学的时候都没有问过自己这些问题。但是这些知识点恰恰却是基础,或者说学习时的盲点。
关于基础我就不多写了,点到即止。
02 分模块学习
不多说了,我直接上我的学习资料的图片吧,买了学习板后客服送的资料挺好的。
可以说,这些都是外设。把每一个模块的电路图分析一遍,再把代码分析一遍。真是够大学玩四年的了。对了,光看资料是不够的,因为资料是非常凌乱的,你根本不知道从哪开始看,这个时候就很有必要买一本关于单片机的书,因为讲技术的书籍都是整理好的,你做什么模块,就看那一章节,边做实验边看书边看资料,学习是非常快的。这种方法不一定适合每一个人,但是至少我就是这么过来的。
熟悉完几个模块后,可以尝试把这几个模块组合起来,给自己一个小项目做。比如我就试过用DS1302(一种时钟芯片)和LCD1602做过一个LCD日历+时钟。
03 善于总结
一定要总结!
再强调一遍!一定要总结!
把你用到的技术,对电路图的分析,对代码的分析用文字描述出来。总结不需要逐字逐字的打,可以拷贝资料里的文字以及代码等等,但一定要先理解透彻,如果没有理解透,请不要把那些文字拷贝到你的总结里,又不是为别人写什么文章,只是为自己而学。(像点亮LED这种简单的项目就不用总结了...)
如果不知道总结要写什么,可以参考大学里的单片机实验指导书或者实验报告。我一直觉得,写那些实验报告和课程设计报告真是最好的学习方法啊!可能以后出来工作再也不用写实验报告或者课程设计论文了。
我们的实验报告是这样的:
1、实验目的
2、实验内容
3、仪器、设备和材料
4、实验原理(用到了什么芯片,什么外设)
5、实验步骤
6、实验结果(代码)
7、注意事项
如果是自己写的总结,最重要的就是4,其他什么的都可以不写。把用到的芯片、外设、电路图和代码整理总结一下,对这些技术的理解就会非常深刻的。注意事项可以写一些做实验中为什么卡住的技术难题,或者很多资料都没写,自己发现的技术细节。比如红外NEC协议:
这是NEC协议的典型脉冲链,一开头有一个9ms的高电平,和4.5ms的低电平,接下来是用户码和数据码等等。但是,在红外接收头那一端,这些信号是相反的。也就是说,红外接收头输出信号的那个引脚,在没有信号的时候输出高电平,当接收到信号后会输出一个9ms的低电平和4.5ms的高电平,接下来是取反的数据码等等。
一开始学习的时候不一定会注意到这些细节,以为只要例程跑起来了,看懂了例程代码和电路图就算学会了。不是这样的!我曾经为老师调试过这个红外协议,为了优化红外接收的稳定性和精确性,差不多调试了一个半月(其实也就每星期就花8、9小时吧?记不清了)。最后项目结束后一总结起来,发现了很多很多以前没有注意到的知识点。(我怎么感觉我在强调参与项目的重要性呢?)
总之一定要总结,不要偷懒。
我现在就正在尝试总结IIC,SPI,UART这些总线协议。有些技术知识一总结了之后,我就会发现了好多调试程序的时候学不到的知识点。比如SPI,我用它的时候就只是很简单的移植程序(在某宝买回来的模块,客服都会顺便把例程给你了),看懂了例程,然后就可以按自己的想法修改程序了,根本没吃透SPI,但是对SPI有了一个感性的认识,回过头来再总结,联想自己做项目遇到的技术难题,就会发现是某个知识点不知道从而下不了手而已。另外,不一定要做完项目后才总结,查资料的时候就可以开始总结了。再说一遍,我说的总结写起来很简单,就是把你分析过的,理解透的相关技术资料用新的word文档组织起来。
04 一通百通
我认为,只要你精通了一种单片机,再学习其他单片机是非常快的,学习外设同理,学习其他东西也是一样的。
还是帮老师做项目的时候(真心觉得多参与项目收获是非常多的),用到了LCD12864,后来我发现LCD12864和LCD1602的指令是类似的,而1602我之前就用它做过一个时钟,于是使用LCD12864的时候我非常的有信心。而且,我也是在使用1602的时候,加深了「对芯片的操作本质上是对寄存器的操作」这句话的理解。除了二极管、数码管、蜂鸣器这些分立元件,其他诸如液晶显示屏、外部存储器(24C02)、DS1302等等这些有芯片的外设,本质上都是对寄存器的操作。
所以不用担心以后玩其他的模块需要重新学习,那些外设或者说模块,都是有一定的标准的。就比如LCD液晶模块,我只是稍微接触过LCD1602,之后上手LCD12864是非常快的,而且那个LCD12864没有例程,需要自己写程序,只有初始化程序需要修改下,然后其他的驱动程序我都是直接移植1602的了。
05 学会移植
上面刚刚也引出了第五点,学会移植程序。51单片机真的是在行业内玩烂了的单片机,几乎每一个电类专业都会学,所以如果你想用51控制任何外设,在网上基本能找到很多资料和程序,很多程序不需要自己重头写的,这就是一个很好的机会去理解外设的工作原理和程序。当你不用51作为主控芯片的时候,或者使用了类似的外设时,直接移植之前的程序就可以了。
06 题外话
实际上我想强调的就是以下几点:
一、基础;
二、分模块(分成小目标学习);
三、总结;
四、先精通一种;
不止这样学习单片机比较好的,学习任何东西都可以这样做的。
那些看时序图、看datasheet的能力,我觉得可以在写总结的时候提高一下。会看datasheet是工程师一项基本能力,我想问,玩了51那么久了,看过51的datasheet么?没看过?可以马上去看啊!会看了51的datasheet,也就会看其他芯片的datasheet了(一通百通)。
由于本人比较偏软,硬件方面我就只能稍微提及一下了。一开始的时候,最主要的是学会分析电路图。比如:
这是学习板上的DS1302模块电路图。
1、从电路图中可以看出是用单片机的哪两个引脚控制该模块?
2、晶振在电路图中有什么作用?
3、电容C12有什么作用?
……
分析了电路图,就会明白其中的原理,需要设计的时候就会信手拈来,或者看datasheet来设计电路图时,就会知道为什么要这样设计。这里我只强调一个词:原理。至于什么画电路图的,画PCB的我就不提了。
最后,感兴趣的请点个关注,如果有不好的地方请前辈们指正并多多包涵。
【学习交流群607439754】
【下方分享一些网盘免费资料包,大家需要的自行领取】:
嵌入式物联网 22个STM32项目、大赛作品,【华清远见发放资料包】http://makerschool.mikecrm.com/f4wjYBB
【下方分享一些学习教程,感兴趣的可以看一下】:
边栏推荐
- 【Leetcode】478. Generate Random Point in a Circle(配数学证明)
- Excel导入和导出
- Excel表格数据导入MySQL数据库
- 伸展树的特性及实现
- OpenCV DNN blogFromImage() detailed explanation
- Chrome书签插件,让你实现高效整理
- @Transactional 注解使用详解
- 类型“FC<Props>”的参数不能赋给类型“ForwardRefRenderFunction<unknown, Props>”的参数。 属性“defaultProps”的类型不兼容。 不
- Flink Yarn Per Job - CliFrontend
- Convert LocalDateTime to Date type
猜你喜欢
async和await用法介绍
在CentOS下安装MySQL
带你搞懂MySQL隔离级别,两个事务同时操作同一行数据会怎样?
How to reinstall Win11?One-click method to reinstall Win11
The Spark of Sql join on the and and where
Get piggy homestay (short-term rental) data
软件测试之移动APP安全测试简析,北京第三方软件检测机构分享
ICLR 2022 Best Paper: Partial Label Learning Based on Contrastive Disambiguation
mysql8安装make报错如何解决
solidity
随机推荐
oozie startup error on cdh's hue, Cannot allocate containers as requested resource is greater than maximum allowed
Thinkphp 5.0.24变量覆盖漏洞导致RCE分析
正则表达式
好好活就是做有意义的事,有意义的事就是好好活
CDH6的Hue打开出现‘ascii‘ codec can‘t encode characters
color transparency parameter
Spark Sql之union
Work for 5 years, test case design is bad?To look at the big case design summary
Quartus uses tcl files to quickly configure pins
分享一份接口测试项目(非常值得练手)
邻接表与邻接矩阵
C language Qixi is coming!It's time to show the romance of programmers!
security cross-domain configuration
技术分享 | 接口测试中如何使用Json 来进行数据交互 ?
security CSRF Vulnerability Protection
@Transactional 注解使用详解
一个有些意思的项目--文件夹对比工具(一)
如何进行数据库备份
Flink学习第三天——一文带你了解什么是Flink流?
LeetCode_518_零钱兑换Ⅱ