精华内容
参与话题
问答
  • 学习STM32单片机,从菜鸟到牛人就是这样简单

    万次阅读 多人点赞 2017-11-29 11:09:34
    我想说,为了学习单片机而去学习单片机的思路不对。  你问,如何系统地入门学习stm32?  本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。  你要考虑的是, 我可以...

      我想说,为了学习单片机而去学习单片机的思路不对。

      你问,如何系统地入门学习stm32?

      本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。

      你要考虑的是, 我可以用STM32实现什么?

      为什么使用STM32而不是8051? 是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO? 是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 是51的内存太小而你要存储的东西太多?


      当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。比如要用spi协议的网卡、要使用串口通信、要使用rtos等等。。。

      从菜鸟到牛人的学习步骤

      我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。

      英文好的同学,请不要以为你很牛,可以只看英文文档。毕竟你是中国人,你最熟悉的,理解最好的还是中文。看英文的速度还是比看中文慢一些,我们要的是最短的时间,而不是追求短时间内记住所有细节。当然,如果是一篇论文,建议看英文原版还是有好处的。stm32学习交流群:197416462  欢迎加群

      STM32处理器进入国内市场时候,ST官方(或者第三方)的推广工作做的非常好。翻译了大量的英文文档,迎合了国内的很多工程师的思维。

      学习的时候,关注两个比较重要的文档:《STM32F103xxx参考手册》,《STM32固件库使用手册》。这是针对有充足的时间、精力的同学,建议去下载需要查阅的文档,以获取更多信息。

      阅读《STM32F103xxx参考手册》,一定要注意,不需要全部阅读——没有时间的。建议选读,但是前几章必读。存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。

      后面章节,讲述的是具体的功能模块设计。如果我们用到哪个模块,就可以去阅读哪个模块。比如在使用AD的时候,就需要去阅读第10章ADC。其他不举例。相信每个初学者都有自己的研究方向和判断。

      阅读《STM32固件库使用手册》,主要是为了简化编程。STM32给我们提供了一个非常好的固件函数库,我们只要去调用即可。当然,我们也可以不去碰这些固件库——传说使用它会使得代码效率变低,是有道理的。网络上也出现了很多网友自己写的代码,没有使用带固件库函数。如何取舍,在于您的选择。

      这里我主要强调的是,阅读《STM32固件库使用手册》的时候,前面几章也是必须阅读的。比如第一章文档和库规范中的命名规则,编码规则,这些都是需要注意的。第二章是最关键的,希望大家熟读。第二章描述了固件库的架构,我们如何去使用固件库的步骤等。有了第二章的基础,我们就可以借助固件库写出自己的代码了。第四章开始之后,就可以根据大家的需要来阅读。实际上,后续的章节,都是描述某个模块有什么什么函数,每个函数如何使用等。

      关于后面的章节,建议对GPIO库函数、中断部分库函数、复位和时钟设置的库函数要比较熟悉,因为平时经常会用到。

      以上提到的这两个文档,已经足够您看的了,呵呵。希望您能从中获取大量的STM32基础知识。

      设定一个不错的两周入门计划

      (1)这里所谓的“入门”,指的是能理解并掌握一些常用的STM32外设,真正想掌握一款处理器,两周根本说明不了什么问题。只能说,你已经有所了解了。但是,这对我们初学者来说已经足够了。

      (2)这里所谓的“两周”,根据每个人的时间安排不同而不同。

      如果您每天有充足的时间学习,那么可以规定自己尽快地能独立地进行简单的STM32开发。

      如果您每天只有业余时间来学习STM32,建议根据您的具体情况安排时间。毕竟计划时间如果安排太紧,反而收不到良好的效果,只能进入恶性循环,这是我们要避免的。

      但是建议,不管您有无充足的时间,都必须给自己做一个计划!!


      我这里列出一个思路,仅供参考。

      步骤一,安装完STM32学习的软件,比如J-Link、Keilfor ARM(MDK)、ISP(如果需要从串口下载的话)。这些软件安装的详细步骤,可以参考我们推出的相应教程进行。

      步骤二,挑选部分例程的HEX,比如LED灯的例程HEX文件,下载到芯达STM32开发板中,观察两个LED灯的闪烁情况。这部分的操作,可以参考我们推出的相应的教程进行。

      实际上,以上两个步骤,是为了熟悉要使用的工具软件而已。属于找感觉的阶段。其实我们还没开始STM32的学习呢!

      步骤三,准备几个常用的文档,比如《STM32的用户手册》,《STM32固件库使用手册》等文档。用于平时查阅。这些文档,在光盘中的芯片手册目录中均可找到。

      步骤四,开始查看例程的编写,看看例程是如何写的,自己可否修改下例程,达到自己想要的效果呢?

      步骤五,Ucos-II的移植,是否需要试一下?

      恭喜你,至此,你已经可以自如进行独立的开发了。最后一步,给自己一个目标(项目),把它实现出来!

      再次强调,以上只是一个学习STM32的思路,供大家参考。下面列出了前面关键的步骤,希望大家能尽快入门。

      第1步:熟悉调试软件

      对初学者来说,我们至少需要安装两个软件:J-Link驱动软件、MDK(就是原来的Keil)软件。

      这两个软件在安装软件的过程可以查看神舟开发板用户手册,这里不再重复,大家可以参考我们推出的教程《如何安装J-Link驱动软件》以及《如何安装MDK(Keil)软件》。如何验证自己已经熟悉调试软件的操作了呢?很简单,神舟STM32开发板光盘里附带了很多HEX格式的文件,可以选择一些HEX文件,来观察运行结果。

      该步骤要达到的目标:熟悉调试软件,如烧写HEX出现问题,可简单判别问题所在,并独立解决。

      第2步:GPIO编程

      这是第一次接触固件库的编程,一定要硬着头皮去了解固件库。建议大家尽量去用固件库。而不是避开固件库自己写代码——这样只能在学习中才会发生。实际的项目中,代码成百上千个,如何一个一个自己写?调用固件库中的函数来完成,才是王者之道。

      GPIO本身的编程实际上很简单:

      1、设置GPIO口的引脚为输入或者输出模式。我们在进行点灯代码的时候,一般设置为推挽输出模式。

      2、操作寄存器,往寄存器里置1或者清零操作——这个步骤,固件库已经提供了专门的GPIO_SetBits函数和GPIO_ResetBits函数,我们只要去调用即可实现对IO口的置1和清零。

      3、实现多种花样的LED闪动,使得自己熟悉GPIO的编程过程。

      该步骤要达到的目标:熟悉调试软件,如烧写HEX出现问题,可简单判别问题所在,并独立解决。

      第3步:开始全新的STM32深入研究

      经过以上调试软件的熟悉和GPIO口的编程调试后,相信您已经对STM32有一定的了解。

      至少知道如何利用STM32的固件库去写一个代码。在这个阶段,将要接触到串口编程、TFT液晶屏驱动编程、定时器编程、串行外设接口SPI编程、存储器编程、SD卡与文件系统移植、USB读写、UCOS移植等,有精力还可以研究其他外设。

    创客学院官网:www.makeru.com.cn   stm32学习群:197416462


    展开全文
  • 单片机学习路线

    千次阅读 多人点赞 2017-06-15 22:18:09
    (大一大二)入门级推荐学习51单片机。因为——51单片机简单易上手资料多,当然最最重要的是,本人发现了51单片机的一套秒杀本人接触过的所有教程的资料——金沙滩宋老师的手把手教你51单片机,绝对经典。(我不是...

    单片机怎么学,学哪款单片机呢?(大一大二)入门级推荐学习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说多了也是泪)。期间芯片有可能焊接出问题,引脚电平输出有问题。这些的测试我们常采用 写出让芯片引脚高低电平变换的代码,然后用万用表进行测量。

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

    展开全文
  • 我们的第一期是教大家如何将ARM开发板当作单片机来用,但在这期视频的第一节,我告诉你们,学习单片机是没有前途的。 话说得非常狠,因为不这样说,没法警醒你们。我说这句话,是冒着生命危险的,因为很多人依靠...

    原文地址: http://wiki.100ask.org

    单片机程序员发展的必选之路: Linux

    我们的第一期是教大家如何将ARM开发板当作单片机来用,但在这期视频的第一节,我告诉你们,学习单片机是没有前途的

    话说得非常狠,因为不这样说,没法警醒你们。我说这句话,是冒着生命危险的,因为很多人依靠单片机来生活,淘宝上有一大堆售卖单片机开发板的,像51、STM32等。

    工资方面

    我们学习这些不就是为了赚钱吗?在51job上,搜索“单片机”,工资平均下来是几千块钱。然后搜搜“Linux系统工程师”,平均工资是上万左右。

    职业发展

    这里我有切实的体会,我2003年毕业,2005年进入一个小公司,当时做的是车载电话,我们先是用51单片机来做的。当时我的李姓同事,用两个3000多行的C文件,实现了车载电话的功能。
    另一个魏姓同事,将功能拆分成各种模块,使用了50多个C文件,以操作系统的思想,重新写了这个程序。这两个牛人,都跳槽了,都不做单片机了。
    李姓同事去了美国,深造了机器人视觉,现在是百度的搜索专家,魏姓同事和我一起去了中兴,现在在厦门联想公司负责手机的开发,而我给你们录视频,但我们都不玩单片机了。
    我在2005发表了一个2440开发板上仿照ucos写了一个操作系统,10年前,我们已经把单片机玩得登峰造极了。但是我们还需要升级,为什么?
    因为单片机非常简单,稍微认真学习2-3个月就可以达到中等的水平,你工作十年和工作两年技能差别不大,对一个公司,现实一点,他肯定喜欢使用工资更低还更愿意加班的新人,所以说,我们必须升级。

    应用方面

    在嵌入式领域,单片机位于哪个位置。我们看看一个自动化的机床,在这条生产线上面,比如说在这传输带上,会有一些单片机来检测物品传输的位置,触发某些信号。
    但其总控肯定运行操作系统,以处理更加复杂的事情。
    这里写图片描述

    再看看Google的机器人,他的手臂、脚趾,也许有些单片机来控制其动作,但他的核心大脑,肯定运行操作系统,才能处理各种复杂的事情。
    也就是说,在一个复杂的系统,操作系统是大脑,单片机是可以实现手指的功能。那么你想去做大脑还是想去做手指?
    这里写图片描述

    并且单片机的产品升级换代比较慢,一个产品使用单片机的话,他追求的是稳定与成本,那显然,日常的工作的活少,并且也不需要你有太新的技能,既然如此,公司干嘛要花2~3万来请人做单片机,直接花几千元请个新人不就完了吗?

    并且单片机的价格优势正在逐渐消失,我们在淘宝搜索一下,STM32开发板的基本都是1-200元,而一个能够运行Linux系统的板子,nanopi的价格却在100元左右。
    一个能够运行Linux操作系统,有512M DDR内存,有四核处理的的ARM开发板,他只需要99元。所以说,现在单片机的价格优势正逐渐消失,他只能保持微弱的优势就是稳定性这一特点。

    下面来看看使用的单片机和使用操作系统开发的产品,比如闹钟、自动售货机就是单片机做的。
    但自动售卖机,他一旦需要连接网络,需要WiFi,他很可能就需要操作系统。现在的新型自动售卖机,上面有微信支付,就必须要操作系统。
    像无人机,既用单片机也用Linux操作系统。单片机可以更加及时的处理一些信息。看这些产品,你更想做哪些产品?
    这里写图片描述

    技术方面

    我们的操作系统Linux,他需要一个Bootloader,这个Bootloader就是一个单片机裸板程序的大全,只要掌握了Linux的Bootloader,对单片机是轻而易举。
    在后面视频,我会讲解这点。所以说,我告诉你们,学单片机没前途了。

    当然我说的是一般情况,你说特例我就完蛋了,周立功做单片机的,年收入几亿,这没办法说。注意,我说的是学习,在学习上,你不需要用单片机来学习,但是在工作中,我们设计产品的时候,如果单片机的性能更好,我们就要选择单片机。
    就比如说小米的智能插座,他就是使用单片机来做的,如果同一个功能,用单片机可以省成本,我干嘛不用单片机呢?卖出几百万台设备,每一个省一毛钱,就可以省几十万。我只告诉你,在技术方面,一旦我们掌握了Linux的bootloader,反过来,对单片机来说,他是小菜一碟。

    为了嵌入式Linux, 换个两全的方法学习单片机

    为什么没前途也要学习单片机?

    因为它是个很好的入口。

    单片机的学习可以让我们抛开复杂的软件结构,先掌握硬件操作,如:看原理图、芯片手册、写程序操作寄存器等。
    在上一节视频里,我刚把单片机贬得一无是处,说单片机没前途了,这节视频,我又要告诉你们,没有前途,也要学习单片机。为什么?

    首先,我说不用学习单片机,是指不要使用老一套得学习方法学习单片机。什么叫老一套的方法?

    • 硬件上:不要使用C51、STM32这些专用的单片机开发板。如果以后,你不打算从事单片机开发,你用这些芯片干嘛,研究了两三个月,把这些寄存器都用清楚了,你又用不上,没必要啊。
    • 软件上:不要使用Keil、MDK等集成度太高的软件。你用这些软件,你写个main()就可以了,然后调用各种库,进行傻瓜式操作。这些好用的工具,封装了很多技术细节,使得我们没法了解裸机、单片机的本质。

    以后我们会使用新一套的方法来进行单片机的开发。新一套的方法,我们后面再介绍。
    这里写图片描述

    我们之所以还要学习单片机,是因为他里面的知识,对我们后续学习Linux还是有用的。我们首先来看看,一个Linux系统是怎么一回事。
    一个嵌入式Linux系统的软件组成:
    单片机大全Bootloader–>Linux驱动–>Linux APP–>Linux GUI(Android/QT)
    我们PC机一上电的时候,黑色屏幕上会显示BIOS,这个BIOS目的是去启动Windows内核。Windows内核再挂载C盘(系统盘)、D盘(应用盘),最后再去启动应用程序,像QQ、网游等。
    同样的道理,我们的Android手机或者工控设备,也有BIOS,但嵌入式Linux系统里面不叫BIOS,叫Bootloader,他的目的是去启动Linux内核。
    他首先也是识别应用程序所在的存储设备,挂载根文件系统(在Windows系统里面的C盘、D盘,在Linux里面称为根文件系统)。最后去启动应用程序。
    这里写图片描述

    仔细的分析下Bootloader,他去启动内核,他去哪里启动内核呢?
    显然是去某个地方读出内核,就比如说BIOS是去C盘上读出Windows内核,我们的Bootloader是去Flash或者SD卡读取内核。
    因此Bootloader要拥有读取Flash或者SD卡的能力。有些Bootloader还要显示logo,因此还要具有操作LCD的能力。Bootloader还要设置开发板的环境,比如,初始化时钟、初始化内存、还要设置网卡等。
    这么多事情,都是在Bootloader里面实现的,太复杂了,如果你一来就分析整个Bootloader是非常困难的。

    那我们怎么学习呢?
    把他拆开,写出单独的程序,比如:LED点灯、时钟、网卡、Flash都单独写个程序来练习,这些不就是单片机程序吗?所以说,Bootloader是单片机程序的大全。我们为了更好的学习Bootloader,我们应该事先一个一个练习硬件,当我们熟悉每个硬件后,再组合起来,就是一个Bootloader。

    这里写图片描述

    我们再来看看Bootloader启动内核之后,内核再去挂载根文件系统,意味着内核也要有操作硬件的能力,这就是驱动程序。我们首先来看看一个简单的驱动程序是什么样子。
    首先我们的应用程序是调用open()、read()、write()这些标准的接口去访问硬件。那么就进入驱动程序里面,驱动程序里面有对应的drive_open()、drive_read()、drive_write()。最后在驱动程序里面,去配置硬件。
    这里以如果是一个LED点灯驱动,那么drive_open()要把GPIO设置为输出引脚,drive_read(),返回GPIO状态,driver_write()则写GPIO,让引脚输出高电平或者低电平。

    这里写图片描述

    对于我们的LED驱动程序,你需要提供drive_open()、drive_read()、drive_write()这些接口,这就是他的框架。具体的怎么操作硬件,就是硬件操作。
    所以说,我们事先在单片机里面,熟悉熟练的掌握硬件操作。即驱动程序的组成:

    驱动程序=软件框架+硬件操作

    你需要学会看原理图、看硬件怎么连接、看芯片手册、知道怎么读写寄存器。这一切都可以先在单片机里面学习,去掌握。以后学习Linux驱动时,把重点放在软件框架就行了。

    我们可以事先学习单片机,单片机的学习可以让我们先抛开复杂的软件结构,先掌握硬件的操作,如:看原理图、芯片手册、写程序操作寄存器等。
    这就是为什么单片机没有前途,我们也要学习。是因为他里面涉及的硬件操作,对我们后续的学习,非常有用处。

    现在我们知道了,我们学习单片机,不是为了掌握单片机的开发技能,而是为了掌握Bootloader,掌握硬件操作
    这里写图片描述

    单片机和Linux都想学_换个两全的方法学习单片机

    本节教你如何学习单片机,如何选择合适的开发板开发工具

    现在我们知道单片机是要学习的,那么怎么去学习单片机?在上一课我们说不要使用老一套的方法学习,实际上是指的两个问题。

    第一:选择什么开发板;

    第二:使用什么开发工具;

    我们学习单片机的目的是干嘛?目的是为后续嵌入式Linux学习服务
    在这条学习线路上:

    单片机->bootloader->Linux系统/驱动->APP(QT) 可以使用同一套开发板

    我们选择开发板的原则是:资料丰富

    这里写图片描述

    开发板首推三星 (SAMSUNG)系列的,资料最开放,
    * 有S3C2440、S3C6410、S5PV210、Exynos4412;
    * 然后是德州仪器 (TI)的,TI开始不开放资料,现在逐渐公开了,有AM437X、AM335X;
    * 然后是飞思卡尔(freescale),有iMX6;
    * 还有其它国产芯片:全志瑞芯微

    我们用百度进行搜索,看哪个资料最丰富。结果如下:

    这里写图片描述

    再在搜索关键词中加入“教程”后,S3C2440的搜索结果比AM335X更多,因此S3C2440的资料仍是最多的,TI的营销更好,当然,TI作为工控板,其用户也是很多的。

    所以,从教程的丰富程度来看,S3C2440为首选开发板

    我们后面会考虑使用TI的芯片重新录制一套视频,但需要2-3年的功夫,所以,现在还是使用S3C2440吧。

    现在普遍有个错误观点:S3C2440过时了,它还是ARM9内核,现在Cortex-A7、 Cortex-A8、 Cortex-A9、 Cortex-A15都出来了,它的性能太差了。
    性能差没错,但它是否过时了呢?

    那要看学到的知识是否过时。

    我们首先来看看一个芯片是怎么组成的,里面有CPU、外设串口、I2C、SPI、LCD等。

    这里写图片描述
    我们写程序的时候,是去操作这些模块的寄存器,访问这些模块,并不是去操作CPU。
    等你工作的时候,你使用不同的芯片,那么差别在于这些模块,这些硬件的操作,差别不在CPU操作,你写程序的时候,根本不涉及CPU的内部机制。

    **不同芯片的差别:
    在于外设操作,不在于CPU,写程序几乎不涉及CPU,只有涉及中断时,才会跟CPU的机制有点关系,但是不同CPU的架构差异很小,并且我们后面开发Linux驱动时,内核已经帮我们做好了这些处理,根本不需要去关心。**

    从上一课我们知道,驱动=软件框架+硬件操作。这个软件框架对于所有的芯片都是一样的,因为都是用Linux内核。
    而这个硬件操作,你在2440上掌握了串口操作,I2C操作、SPI操作,掌握了这些硬件的语言,你换一种芯片,是完全类似的。

    这里写图片描述

    我假设你选择了2440开发板,那么怎么使用2440开发板来学习单片机的开发呢?又使用什么开发工具呢?
    以前在Windows开发的时候,我们使用ADS、Keil、MDK等,你直接写个main()函数,所有的细节都帮你实现了,谁来调用main()函数,有他帮你做了。这main()所生成出来的代码,怎么放入到内存里面,这工具也帮你做了,我们基本上只需要写main()函数,只需要写C语言就行了。但是这里掩盖了太多的技术细节,你看看我们官网->学习路线 的这篇文章,里面有个比较:

    ① Windows下的单片机学习,深度不够

    • Windows下有很好的图形界面单片机开发软件,比如keil、MDK等。
    • 它们封装了很多技术细节,比如:
    • 你只会从main函数开始编写代码,却不知道上电后第1条代码是怎么执行的;
    • 你可以编写中断处理函数,但是却不知道它是怎么被调用的;
    • 你不知道程序怎么从Flash上被读入内存;
    • 也不知道内存是怎么划分使用的,不知道栈在哪、堆在哪;
    • 当你想裁剪程序降低对Flash、内存的使用时,你无从下手;
    • 当你新建一个文件时,它被自动加入到工程里,但是其中的机理你完全不懂;
    • 等等等。

      ② 基于ARM+Linux裸机学习,可以学得更深,并且更贴合后续的Linux学习。

    • 实际上它就是Linux下的单片机学习,只是一切更加原始:所有的代码需要你自己来编写;哪些文件加入工程,需要你自己来管理。

    • 在工作中,我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更想学习到程序的本质。
    • 一切从零编写代码、管理代码,可以让我们学习到更多知识:
    • 你需要了解芯片的上电启动过程,知道第1条代码如何运行;
    • 你需要掌握怎么把程序从Flash上读入内存;
    • 需要理解内存怎么规划使用,比如栈在哪,堆在哪;
    • 需要理解代码重定位;
    • 需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场;
    • 你会知道,main函数不是我们编写的第1个函数;
    • 你会知道,芯片从上电开始,程序是怎么被搬运执行的;
    • 你会知道,函数调用过程中,参数是如何传递的;
    • 你会知道,中断发生时,每一个寄存器的值都要小心对待;
    • 等等等。
    • 你掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么那么简单!并且你会完全明白这些工具没有向你展示的技术细节。

    如果我们基于ARM+Linux,不使用这些Windows工具,你可以学得更深,并且单片机的大全Bootloader,他就是ARM+Linux开发的,他并不使用Windows下的工具。
    你基于ARM+Linux学裸板、学单片机,你可以学得更多,因为我们一切都从零开始的。我们既管理这些代码,也可以知道芯片上电的时候做了什么事情,知道程序自己怎么把自己读到内存,且知道怎么去规划内存,知道怎么代码重定位……

    我说的这些概念,你可能听都没听过,这是因为Windows下这些好用的工具把这些统统都给屏蔽了。
    我们使用ARM+Linux进行裸板开发,一旦掌握了ARM+Linux开发这套机制,再回过头去看这些Windows工具、看STM32的话,你只需要几分钟就可以搞定。
    并且你可以无缝进入后续的学习,因为你已经熟练掌握了Linux的操作环境,后面的Bootloader是在Linux下开发的,后面的Linux驱动也是在Linux下开发的。

    这里写图片描述

    所以我们怎么去学习单片机的开发呢?

    使用S3C2440开发板,在Linux环境(Ubuntu)下使用arm-Linux-gcc工具来编译程序。
    你编写代码的时候,可以使用Windows下各种好用的工具,文本工具等,但便宜的时候,使用arm-Linux-gcc来编译。

    展开全文
  • 单片机如何,过来人给你最实用的经验

    千次阅读 多人点赞 2018-05-18 17:20:19
    首先学习单片机,那就得先要知道单片机具体是做什么的,不要一抹黑,什么也不知道,就去无头无尾的开始学习单片机,那样单片机是没有效果的,所以我们先简单了解一下单片机。单片机是一种集成电路芯片,我们就用...

    首先学习单片机,那就得先要知道单片机具体是做什么的,不要一抹黑,什么也不知道,就去无头无尾的开始学习单片机,那样学单片机是没有效果的,所以我们先简单了解一下单片机。单片机是一种集成电路芯片,我们就用通俗的话来说就是有很多功能集成到一块硅片上构成的一个小而完善的微型计算机系统。那么应该如何学呢?要掌握方法。

    1.要知道熟悉单片机的结构

    在刚开始学习的时候,你要知道单片机的构成是什么样的,他的原理有哪些,他是怎么样运作的,这些都要了解,所以你要研究这些结构,那就必须要有扎实的电路基础、模拟电路、数字电路等方面的知识,没有这些扎实的基础,你会越学越懵的。

    第二步的话就是最重要的逻辑思维了

    学IT行业最重要的就是逻辑力了,不管做什么逻辑力是必须要有的。对于初学单片机时,要学会把一个程式的逻辑性关系用流程图的形式清楚的表示出来。至于用来编写程式的单片机的语言是很简单的,不要把它想象得很神秘,不管是汇编语言、C语言、还是更高级的VC++和图示化语言(如LABVIEW),都只不过是把我们清楚的逻辑思维告诉单片机处理器,并指令它将要被如何进行逻辑操作。把单片机的指令看得很重要应该是我们大家在学习单片机时的一个最大的误区,老是担心指令记不住、不会用,这也是学习单片机还没入门、上路的主要表现。其实这样有什么担心的呢,记不住就不要强求好了,把指令放在旁边,当把逻辑关系清理好之后,再来对着指令表确定哪个逻辑关系由哪些指令来完成,当一条指令运用得几次后,根本就用不着担心不知道指令不会用了。

    单片机学习离不开编程,那如何编程呢?方法如下:

    1、用文字描述自己需要的功能

    2、拆分出各个功能,用文字描述每个功能是如何实现的

    3、完成各个功能的程序,并做好测试,对于我来说,如果了解单片机的工作方式,那么编写程序其实就是把汉语翻译成汇编语言。

    4、修改每个功能模块的程序,尽量让程序简短,并且预留好和其他功能衔接的功能(接口、变量等)

    5、合并简单功能模块,复杂功能逐一合并,每次合并做好程序备份,以便纠错

    6、如果上述工作做的足够好,那么可以直接得到想要的结果,我的程序往往都是写完了就可以用,这是建立在部分模块程序的完美基础之上的。

    所以C语言是你必须要学的,要达到一看图,就直接可以在大脑中有思路。在这里我还是建议大家,要先学汇编语言,这没坏处,比如我,因为有汇编的基础,学起c来就觉得很上手,特别是自己可以写出更优化的程序。但有人说,汇编难学,就算学了,以后编程也用不到。很多单片机的参考资料,也都是以汇编作为原始资料的,你不懂汇编,怎么学习新的功能?学了汇编后,你会知道,单片机可以做哪些事情,哪些事情不能做,以及如何做好一件事情,这是单纯学C的人体会不到的。

    学习单片机需要注意:

    你要勤于练习,而且要理论与实践相结合,不要光学理论,也不要只实践,把两者相结合那就会学的更容易,更高效。

    合理安排实践,持之以恒的去学习。

    过一段时间后 (1-2 个月 ) 再重新学一遍知识点,学过的知识要经常运用,这样反复循环几次就能彻底弄懂消化,永不忘却。


    相关推荐:单片机学习资料

    C语言相关学习资料

    展开全文
  • 手把手教你学单片机完整 是一本嵌入式入门的书籍 想入门嵌入式领域的可以查看
  • 如何学习单片机——从51过渡到STM32

    千次阅读 多人点赞 2015-03-27 19:35:57
    鉴于原文只介绍了51单片机学习路线(当时STM32刚兴起),与当前流行的STM32等高端单片机相比,显得有些落后,所以笔者更新了此文。 一、51和STM32的区别。 STM32比51主频高、RAM大、FLASH大,...
  • 大家,本次和大家聊一聊学习单片机的时候,我们到底在学习什么? 因为最近断断续续的收到一些小伙伴的私信,说我现在在学习单片机课程,学习过程中自己感觉很迷茫,搞不清楚学习单片机到底是需要学习什么;本期...
  • 结合我学习单片机的感受来说说,刚开始的时候确实很迷茫,学习单片机需要点什么,要怎样学习,能不能学会,总是一知半解,不知怎样才能学会。刚开始是到处找资料,去了校里的图书室,在网上也搜了一大堆。觉得王云...
  • 所谓编程就是把单片机运行的程序烧写到单片机的存储器中,目前大部分单片机都是使用FLASH存储器,这些存储器的写入次数一般是1000次左右,也有1万次或是10万次的。编程也叫程序下载或是烧写。 实时仿真硬件 实时仿真...
  • 学习单片机的好处

    千次阅读 2018-07-26 17:07:36
    有很多初学者有这样的困惑,单片机初学者感觉入门很难,着,就会产生这样的疑问——自己辛辛苦苦学习单片机,将来有用吗? 单片机只是一个工具,重要的还是思想,有了自己的想法,电子行业地域辽阔,随便你闯...
  • 学习单片机的感受

    2016-10-20 23:14:54
    1、单片机需要耐心,耐得住自己的性子。 2、学习这个需要细心,画PCB板子和布线需要多次推敲。 3、要做好课堂笔记,并及时回顾课堂内容。 4、学习后样经常练习,反复在自己的脑海里形成印象。 5、刚完的一周内...
  • 学习单片机网址大全

    2010-10-24 09:30:24
    1、晓奇工作室 http://www.xiao-qi.com/ 转载于:https://blog.51cto.com/01258/409939
  • 首先总体上谈一谈看法:1、我从不说51是基础,如果我这么说,也请把这句话理解为微机原理是基础。2、对51单片机的操作本质上就是对寄存器的操作,对其他单片...
  • 资深程序员告诉你如何学习单片机

    千次阅读 2018-05-11 16:56:31
    首先你要知道,你为什么要学习单片机,是为兴趣,为专业,为饭碗,还是为工作,不管你是为了什么,你首先就是要对他有兴趣,不然你对他没兴趣,学习会有点难。接下来就要看看如何学习1.就是基础理论知识的学习你要...
  • 新手学习单片机用什么软件模拟

    千次阅读 2019-08-11 10:40:38
    我们可以通过这个软件仿真功能学习一些单片机的功能。  例如,可以通过软件仿真功能实现单片机端口输出高低电平,然后通过观察相应的端口寄存器的值来看程序是否正确执行了;还可以编写定时程序实现固定时间(例如...
  • 如何学习单片机
  • 51单片机指令学习(常用器件的资料).rar
  • 现状 不知道阅读本文的读者,在...感觉好像完了单片机的各种模块,但是要自己设计东西却还是毫无思路,也不知道怎么去进一步深入学习;甚至在一开始就遇到太多困难,直接放弃了学习。 在我身边,看到不少学习
  • 一、掌握单片机最小系统能够运行的必要条件  (1)电源  (2)晶振  (3)复位电路 二、掌握对单片机任意I/O口的操作  (1)输入控制电平高低  (2)输入检测电平高低 三、定时器:重点掌握最常用的...
  • 曾经很嫌弃单片机,现在我又回来学习它了,不过掌握它应该不会花我很多时间......
  • 学习单片机非常有用,可以从事硬件工程师或者嵌入式工程的职位,就业前景非常。 1. 单片机的应用 现在的电子类产品功能非常丰富,上手体验很人性化,这些都离不开单片机。正是由于单片机可以编程,从而降低了产品...
  • 怎样系统的学习单片机的知识

    千次阅读 2014-12-03 17:29:13
    本文中主要详细介绍如何学习嵌入式,对于需要学习嵌入式的新手是一个不错的指导文章
  • 学习单片机/PCB设计的步骤和方法

    千次阅读 2016-08-02 17:36:52
    学习单片机的步骤 1、熟悉单片机的原理,结构; 2、学好数电,模电,为设计电路打基础; 3、熟练使用C语言,多学习别人的程序; 4、对操作系统原理有一定的了解; 5、Protel至少要有点基础; 6、要实际...
  • 从2003年学习单片机开始,从公司到研究所,从研究所到学校,还真没有离开过它。对于经验丰富的工程师,以下内容可以忽略了,然而,对于刚入门的初学者,还是可以看一看的。 初学者的态度 在我学习单片机的年代,只有...
  • 学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。 第一、数字I/O的使用 使用按钮输入信号,发光二极管显示输出电平,就可以学习...
  • 如何学习单片机

    2013-03-18 08:49:02
     先说单片机,现在用的比较多的以51为内核的8位单片机(考虑到成本及引脚资源在实际开发中用的51单片机型号不一),它的学习资料非常多,且学习成本非 常低,可能有些初学者会说企业里用的不是51单片
  • 怎么学习单片机

    2017-03-31 15:17:25
    在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所过的模拟电路和数字电路知识,为学习单片机加强基础。否则,你的单片机学习之路不仅会很艰难和漫长,还可能半途而废。...
  • 零基础学习单片机(一)--LED

    千次阅读 2011-11-17 19:18:37
    笔者很是惭愧,浑浑噩噩在大学读了4年的电子专业,到头来单片机都没玩过2次。 计划花一段时间来玩单片机,从最简单的LED入手。 该系列的学习笔记 开发环境是: 开发板:HC800EM3 感觉是一块很不错的开发板,提供...
  • 这几天看了很多关于“类似单片机的 出路”的帖子,也有很多人问我单片机未来的规划。今天我就给大家带来自己的一点心得体会,喜欢的朋友可以留下企鹅。首先,单片机不是万能的,但没有单片机那是万万不能的。从NN...
  • 单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着工程师。为帮助工程师解决单片机设计上的难题,纳出单片机开发中应掌握的几个基本技巧。 一、 如何提高C语言编程代码的效率 用C语言...

空空如也

1 2 3 4 5 ... 20
收藏数 50,944
精华内容 20,377
关键字:

学单片机