我的单片机方法论1之概论

来源:互联网 发布:前端算是程序员吗 编辑:程序博客网 时间:2024/06/05 06:58

我的单片机方法论1——这篇文章更加偏重于单片机怎么学,是一个比较概括笼统的说明,下一篇文章本人有空的时候准备写一下:我的单片机方法论2之STM32单片机的特别篇。
第二篇:
http://blog.csdn.net/zzw5945/article/details/54784039
[TOC]

个人情况简介:

本人现在大三,电气工程系学生一枚。从大一时,加入燕山大学无线电爱好者协会起,接触到了单片机。最早接触的是51单片机,现在玩的是stm32单片机。目前的主要学习方向是:嵌入式工程师方向。写这篇文章呢,是想给大家介绍一下单片机如何学,怎么才能把单片机学好用好。很多人花了很长时间,最后却放弃了,个人认为呢很多情况是因为大家路子不对,学习方法不科学造成的。已经有很多同学朋友问我,单片机怎么学,,遂写下此文章,以给想入坑的小白指路一二。因为本人能力有限,如有误请留言!下面先简单介绍一下本人的技能(说不定哪个公司HR过来瞅两眼呢,哈哈)
本人主要技能如下:
1、c语言,这个不用多说。
2、51单片机,学的还算可以吧
3、STM32单片机,自认为也算可以。个人认为呢在,在学校算是能力较强的
4、AD画画电路图,画电路板。本人开过不少两层板子,设计过一些简单电路
5、Java和Android,这个是大一下学期学的。能做一些小的APP,曾写过一个10000行左右的APP,学校大创项目需要。(UI很丑。。。。。)暂时不准备深入了,忘了不少了,不过应该容易捡起来。
6、开过几个月淘宝网店,熟悉淘宝网店运营管理。。。。。。。。。。。哈哈
7、office办公方面的过硬技能(PPT,WORD等)
以上7点,算是个人较强的能力。下面的是一些能力一般的技能(大多是课设学的)
1、 网站建设,本人用开源的程序搭建过几个小网站,稍微懂一点网站东西
2、 MATLAB会基本的使用,并没有深入用过,这个寒假回去准备弄弄四轴算法,可能需要使用。
3、 Multisim等软件仿真,软件很好用,使用没有任何问题。难点是如何设计电路。设计才是王道,其他都是工具
4、 Quartus设计电路图,编写烧录到FPGA
5、其他
参加过若干比赛,奖呢得过若干,项目呢做过若干
好了,牛B先吹到这,下面咱们来聊聊我眼中的单片机该怎么学……
你如果问我什么是单片机?那么,你猜我会告诉你吗……
你如果问我学了单片机能做什么?那么,你再猜我会告诉吗……
不扯没用的啦。下面切入正题:
如果你对电子设计,对自动化控制十分感兴趣,并且想学习如何玩单片机,那么首先你一定要树立一个信念:单片机这玩意很简单的,我一定能把它学好。其实它很“傻”的,它只会做你安排它做的事情。所以在你自己的单片机世界,你就是王道,你就是god哈哈,玩这玩意能做很多有趣的东西好玩的东西。
关于单片机呢,我个人的看法是,入门门槛非常非常低。很容易学好用好的——前提是你做的是正功……如果是负功。。。。。当我没说。
所以学习单片机的王道是:
正确的学习路线、正确的科学的学习方法、质量上乘的学习资料、然后是自己的勤奋努力,多练多实战,多调bug。。。。说多了都是泪,最后呢就是肯花时间。哥和几个伙伴,把自己大部分的大学时光都贡献给了实验室,such as:电气c楼432实验室,电气A楼212实验室,电气A楼102工作室……都没多少时间陪女票。
上大学后,如果真的对科技对电子对自动控制感兴趣,那么我给的一条建议是:尽早学习单片机。如反对,不解释。

C语言如何学?

学习单片机之前,你需要补一点c语言的语法知识,懂if else for循环等基本语法那么你就可以开始写程序,学单片机了。不需要你一开始c语言多溜多溜,这个时候都不需要你知道什么是指针,怎么用。你能会c语言的基本语法就行,在你学习单片机的过程中,你可以慢慢的深入学习c语言的知识,你会越用越熟的,同时会理解的深入。单纯的学c语言没有太大意思的,反正我是这么感觉的,你同意也好,不同意也罢~当你学的深入之后,再总结一二,当你猛然感叹:我靠,c语言原来这么简单,有啥的不就是一些变量、关键字、数组、宏定义、函数、if-else for while循环再加结构体、指针等东西嘛。当你发出这样的感叹的时候,你估计得写出不少代码了~~
当你有这些觉悟之后,你会发现上课学的很多的c语言细枝末节的东西,考试喜欢考的东西,你根本就不需要会,因为你写程序基本不用。这也是我为啥很讨厌考试,讨厌应试教育的原因之一。
好了基本的c语言知识,很多又要推荐书了,这里请大家千万别再买某高校知名教师写的那本几十年的c语言程序设计书了(tan hao q)。我要说他不好,肯定一堆人喷我,,,我这么说吧,他那本书是几十年前写的,几十年前中国处于计算机尚未普及的年代,那时候他通过自己的能力编写了那么一本权威的c语言书籍,说实话还是很牛B 的。他的那本书确实再当时很厉害,因为当时大家基本上都不懂程序不懂计算机。但是就目前我个人的一些观点来看,这本书质量真的不咋地,代码风格差,编程风格差,编程思想差,有不少错误同时有些细枝末节的地方废话太多。但是可悲的是目前高校(wo xiao)有老师还在给学生推荐这本古董级书籍学c语言。。。
其他关于哪些权威书籍,自己去知乎搜索去吧。不推荐了——不过当你有一定C语言代码量,有一定编程能力之后,要看一下 陈正冲写的一本c语言的书《c语言深度剖析》总共也就100来页,但是感觉质量不错,其实真正的提升是自己逐渐写大一点的程序,自己调试bug,然后多思考,多感悟,怎么才能让程序更好

单片机怎么学?

好的下面咱们开谈单片机怎么学。(先说大一大二的时间充足的小白)
单片机怎么学,学哪款单片机呢?(大一大二)入门级推荐学习51单片机。因为——51单片机简单易上手资料多,当然最最重要的是,本人发现了51单片机的一套秒杀本人接触过的所有教程的资料——金沙滩宋老师的手把手教你学51单片机,绝对经典。(我不是他的托,他没给我钱,我也没买过他的东西,免费用的他的资料)这里得好好感谢宋老师。很多人推荐guo的单片机,说实话guo的代码真的相当不咋地,同时肯定也有很多人推荐普中单片机的,说实话普中的板子外设挺多的,价格相对还便宜,但是它配套的教程也真的不咋地。代码风格一塌糟,而金沙滩宋老师,人家是公司工作好多年的工程师,编程规范较好。并且我认为这个教程,教你的不仅仅是51单片机,他教你的是 – 单片机这个类的东西,不过载体是51罢了。这本书呢他穿插了很多c语言的知识和很多电子硬件设计的知识,总体来说非常非常适合(大一大二的)小白用户学习。绝对秒杀很多高校老师教的课,秒杀51单片机同行列教程。(不过宋老师板子比较贵)
他的课是一节串一节的,上节学过的东西,这节基本上要用,下节还要用。上面有很多知识点可以参考学习,而且很多优秀的编程思想和编程习惯分享给大家。
关于大三同学,说实话时间比较紧了,可能上课老师直接教的是stm32单片机,那就直接学32单片机吧。关于stm32单片机方法论,见下面stm32部分

关于单片机怎么学下面附上宋老师书的开篇语:

“下面,就是我总结的跟着我学习单片机的四个步骤。

第一步:鹦鹉学舌。

刚出生的孩子叫“爸爸”“妈妈”的时候,他甚至不知道“爸爸”“妈妈”是什么意思,
更不会理解这些声音是什么意思,但是我们带着孩子见到他爸爸就让他喊“爸爸”,见到妈
妈就让他喊“妈妈”,见到爷爷就喊“爷爷”„„慢慢的你会发现,次数多了,孩子就知道
谁是爸爸,谁是妈妈,谁是爷爷,谁是奶奶了。
大家刚开始接触单片机的时候,也属于单片机行业的新生儿。单片机的样子,单片机外
围的各种器件,单片机内部的各种结构,单片机使用 C 语言的编程方法,初学者可能都没有
见过,脑子里全无概念。没关系,有些概念和方法你不理解也没有关系,甚至不需要你去理
解,你只需要跟着我去鹦鹉学舌式的学习,第一遍学习某一节课的内容时,对于程序,大家
就可以完全跟着抄下来,甚至抄两三遍,过一段你会发现,好多东西你也认识了,好多概念
你也慢慢的理解清楚了, 你也能大概看懂别人的小程序了,切忌觉得自己看会了,而简单复
制粘贴。

第二步:照葫芦画瓢。

很多同学学习的时候喜欢看,看我做的视频,看我写的程序,甚至看别人的程序,都能
看懂,觉得自己就会了,等到自己写程序的时候,感觉就是老鼠啃天,不知道从哪里下手了,
这是初学者很容易犯的“眼高手低”的毛病,所以第二步的内容就非常重要了。
我的要求是,每一位同学,在学完了当前课的内容,把第一步顺利完成以后,然后关掉
视频教程,关掉源代码,自己通过看电路图和查找非源代码的其他任何资料,把当节课我写
的程序代码重新默写出来,边写边多少理解那么一点点,不是纯粹的背诵,应该说是背诵加
理解的结合体。甚至学过几节课以后,可以回头把前边曾经这样实现过的课程,再按照这种
方法做一遍。千万不要认为这一步没必要,这一步是你能否真正学会单片机的一个关键,在
学完本教程之前,每一课内容都要这样做,如果每一个程序你都能够完美的完成,那么可以
说,当节课的内容,百分之七八十你已经掌握了。

第三步:他山之石,可以攻玉。

单片机技术的最大特点就是可以通过修改程序来实现不同的功能,因此举一反三的能力
就必不可少了。每一节课的例程后边,我一般都会布置几个作业,大家尽量去独立完成这个
作业。在完成这个作业的过程中,都可以参考我的程序思路,在这个基础上通过动脑思考去
构建你自己的程序框架,最终将程序完成。
在我们工程师实际产品研发的时候,很多种情况下也是如此。比如一个产品,我们如果
从零起步的话,可能会走很多弯路,遭遇很多前人已曾遭遇过的挫折,所以我们通常的做法
是寻找购买几款同类产品,然后先研究他们的各自优缺点,学习他们的长处,然后在同类产早就遇到过了,所以遇到问题后,不要慌张,首先利用谷歌或者百度这些搜索引擎在网上搜
一下,要做什么新东西,先去网上找相关资料了解一下,不管是编程还是硬件设计,多多参
考别人的东西,只要把别人的东西分析明白了,自己用起来了,也就成为自己的知识了。

第四步:理论实践结合,温故知新。

当大家把所有的课程都按照前边三步完成后,这个时候不妨再把书打开,再看看书,经
过了自己的实战经历,再看书的时候,对很多知识点会有一种恍然大悟的感觉。甚至视频教
程、书籍都可以反复看几遍,可能有的知识点当时学习的时候不明白,过了一段时间,回过
头来再学习的时候,一下就明白了。”

好了话引用到此,我也想说几句:想学好单片机一定要能有耐心、信心、恒心。这里我送大家一个字:静。很多人太浮躁了,浮躁是干不了什么事的,一定要静下心来~come on

我的单片机方法论:

当你玩了一定时间单片机,玩明白之后,你如果又发出这样的感慨:我靠,51单片机原来这么简单。那么恭喜你,你应该是拿下单片机了。下面说说我的单片机方法论:
51单片机呢说实话很简单的,首先你要有一个概念:学单片机和学单片机外设【这里的外设和下面都指的是单片机的片外外设,不是片上的外设哦】是两个不同的概念。。学单片机呢,其实单片机最小系统就拥有单片机的所有资源(板子上那么多的东西 其实都是外设)一定要有这两个概念:单片机 和 单片机外设的概念。【单片机就是主控芯片,,,外设是接在其引脚上的东西】
下面是我总结的学单片机(后面)的几重心法:

第一重心法:

先能大概看懂电路原理图,知道哪个东西,连在了哪个引脚上,大致了解你的板子上有哪些外设东西。同时了解一点硬件基础知识,搞定自己电脑上的开发环境,熟悉keil等软件的使用,熟悉jlink使用【这个仿真器是在32等高级单片机上使用的】。

第二重心法:

能用c语言写基本的小程序,来操作硬件IO口。啥意思呢,也就是你可以通过自己的程序可以随心所欲的控制单片机的IO口(引脚)的高低电平,落实到现象就是,你可以通过程序,实现点亮任意一盏接在你单片机上的小LED(LED小灯就属于外设),升级版本就是:你可以自己写程序点流水灯玩。这一层能力是操作硬件IO口

第三重心法:

【对于stm32等高级单片机】学会使用jlink等仿真器的硬件仿真,硬件仿真很重要,51单片机仿真器貌似很贵的,反正我基本没有用过51单片机硬件仿真。。用32单片机时,会用jlink仿真会调出窗口,看各个变量的值等功能

第四重心法:

学习什么是定时器,什么是中断,什么是定时器中断。先学习这些东西是什么,能做啥。然后再开始学习单片机上的这些东西怎么用c语言实现。这一层的能力在51上其实就是配置寄存器,这个能力很重要,虽说stm32我基本不用寄存器,但是我能知道那些寄存器大概怎么配,都是靠51单片机启蒙的。这个能力很重要,但是不难的,都是套路多套路几遍就熟了。

第五重心法:

学习几种通信协议,最常用的的串口(uart)通信协议,I2C通信协议。其他如SPI,CAN总线等我用的不多,等用的时候再去学就是了。其实还是套路,再多套路几遍。
如果你大概坚持到这,然后学的差不多了,那么我恭喜你,单片机你已经学完了。是的你没听错,单片机已经学完了。注意这里是单片机:不仅仅局限于51单片机,其他单片机也是适用的。

第六重心法:

学学单片机开发板上的一些外设,用用一些常用的模块,实现模块所具有的功能。这一层的能力,是自己去看相关数据手册,使用手册。这些需要自己去读,能力强者自己就能写这些模块的驱动程序了。当然一般情况下,买的模块都是有例程的,可以参考例程自行优化,编写属于自己的驱动代码。我个人积累了一点自己的驱动代码库。

第七重心法:

可以自己用开发板做几个稍大点的小项目了,做项目,一开始要分析项目。小项目流程见最下面简述:(大二写的,不改了)

第八重心法:

深入学学c语言,回过头刷刷升级书,然后一定要注意编程规范性问题,注意编程规范等吧。然后你就能升级玩32了。

关于32单片机:给大家介绍一下基本武功秘籍,好好修炼吧。
武功秘籍一:STM32中文参考手册(最新版)
武功秘籍二:STM32英文参考手册(最新版)【中英互补】
武功秘籍三:STM32系列芯片的数据手册
武功秘籍四:3.5固件库使用手册
武功秘籍五:3.5固件库中的project中的例程
武功秘籍六:context-m3权威指南

其中 秘籍一和秘籍四是非常重要非常好用的工具书。我直接用pdf,搜索起来很方便,这些书不是让你看,让你背的,是当你需要的时候,你知道到哪去看,到哪去找用的。我个人认为自己32单片机学的算是不错的比较溜的,但是我感觉考试我肯定考不太高。。。因为我从来不背这些。。。。

下一篇文章呢,我将带大家看一下DMA 和ADC以及串口相关的东西,在那篇文章中我将带大家看看 《STM32中文参考手册》和《3.5固件库手册》怎么用,分享给大家一些好玩知识。这篇写的废话挺多,写烦了。暂且这样。

附录:
下面是大二时写给我大无协的小师弟的
现在来分享一下我和队友做小项目走的流程。(这些经验仅供参考,愿你们弃其糟粕,取其精华)
以下是我从若干个项目中总结下来的理论,记住实践是检验真理的唯一标准!大家加油吧,在你们的项目中,你们可以尝试使用下面的方法。
1,确定项目功能
和队友讨论你们要做的项目具有哪些功能,各功能可行性是怎么样的,需要使用哪些元器件来完成这些功能,有没有相关的产品或者作品参考,分析,讨论写下详细的作品说明书。
事先一定要确定好作品说明书,后期制作基本都是参考说明书(后期可以继续完善说明书)

一般这步结束后,会有如下几个文档
a.作品详情思维导图
b.作品功能说明书(实现那些功能,项目要求是啥)
c.作品方案设计文档(用哪些东西,有哪些替代方案)

2,收集相关资料
包括芯片数据手册
模块使用手册
参考例程
相关作品资料

3,搭出硬件测试环境
用最小系统板+模块+自己焊的小电路搭建出硬件测试环境

4,用viso画出程序流程图
微软的viso画图软件很好用,需要学会画程序流程图。(团队间可以一起讨论)程序流程图搞定,整个程序的逻辑写起来就简单了。程序流程图怎么画?这里无法表达清楚,仅做提示:
完成系统初始化,设置标志位,根据标志位执行动作

5,将各模块各功能分而治之
(分文件写驱动代码)
这个很重要,方便以后程序的移植!所以最好不要在同一个文件中写不同模块的功能代码!不要!不要!不要!

6,分功能测试驱动代码(分功能写出测试程序)
之前大二上学期的时候做过若干的小项目,都没考虑过这步,而是直接上手集成所有代码于一个项目下,,,然而集成完成后发现功能无法正常实现。。。。然后就查bug,,查bug,,查bug,,查bug。。。由于代码太多,bug很难查的。所以很蛋疼,而且费了很多时间,还不一定能查出来。。
也就是说我认为比较正确的方法是:把一个大工程分解成各个小工程,每个小工程呢,只实现其中的一项小功能,实现完成后,再将测试通过的驱动代码,放到大工程下。
总结起来就是:分模块,分功能写驱动测试工程。说起来全是泪,都是自己摸索出来的

7,整合测试通过的驱动文件
驱动文件全部测试通过后,就可以集成到一个项目下了,同时主文件中的函数也可以根据程序流程图进行编写逻辑了

如果需要画pcb电路板的话还需要做如下流程
8,根据确定好的io口,画电路原理图
(期间可能会用到模电相关知识)
9,pcb布局布线,开板,焊板
布局布线也要分模块画。

10,分模块调试pcb硬件。
硬件调试期间会教你熟练使用万用表和示波器等(PS说多了也是泪)。期间芯片有可能焊接出问题,引脚电平输出有问题。这些的测试我们常采用 写出让芯片引脚高低电平变换的代码,然后用万用表进行测量。

以上仅供参考,这些是我们跌跌撞撞积累下来的一点经验概括。希望对大家有所帮助!!【大二书】

2 0