当我们谈单片机的时候,我们在谈些什么?

Posted crenx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我们谈单片机的时候,我们在谈些什么?相关的知识,希望对你有一定的参考价值。

  单片机是什么?你可以理解为它是一台微型的电脑,没有IO设备的电脑。为什么这样说,我们可以来对比一下。

  个人电脑的主要硬件如下:CPU 内存 硬盘 键盘 显示器

  单片机主要硬件:CPU RAM ROM

  其中ROM用来存程序代码,CPU用来进行数据的处理,程序执行时程序先装入RAM中,产生的中间数据也在RAM中。这里一对比,RAM与内存,ROM与硬盘,CPU之于CPU,一目了然。两者相同的地方是这里,不同的仅仅是单片机没有键盘与显示器。

  如果你给单片机配上矩阵键盘,配上LCD显示器,加上适当的程序,一个单片机就能实现你按下键盘,然后显示器上显示一些字符的操作。技术分享图片

就这么一个小小的单片机就能实现键盘输入然后显示操作,很奇妙吧?

 

  那这个东西既然是微型电脑,那它能不能有操作系统呢?答案是可以有,一般像STM32这种比较强大的单片机可以有RTOS系统,更有厉害的人,可以在这个STM32上跑Linux系统。 你看,单片机配上了键盘,显示器,操作系统。是不是就和电脑差不多了?

  这是从一个大众角度去看单片机。那么对于工程技术人员来说,单片机是一个怎么样的存在呢?

    一般在工程中,单片机用来接收数据,加以处理,然后输出一些控制信号并且可以显示数据处理的结果。这整个过程抽象为 数据输入->数据处理->数据输出。深刻理解这个过程,单片机怎么用就比较清晰了。

  数据输入,从哪输入呢? 传感器啊,很多种类的传感器,温度,湿度,烟雾浓度,光强,超声波,酒精浓度,这些传感器测出了某个指标的模拟量,然后转化为电信号通过单片机的引脚输入进单片机。然后单片机对这些数据进行一些处理,这就是一个数据处理的过程。接着这这些数据转化为我们人容易看的数据加以显示,这就是一个数据输出的过程。这就是用单片机搭建了一个测量系统。

  在这个过程中我们需要做什么呢?

  首先传感器部分,你需要编写代码来驱动这个传感器,让它知道该怎么测量,测量以后数据如何回传,这个就是传感器的驱动代码。

  接着数据传入以后,你要处理啊,怎么个处理方法?所以这个时候你要编写数据处理的代码,即数据处理模块。

  然后是处理好的数据要显示吧?可能还要上传到某些设备上去,这时候你就需要编写的数据输出代码。

  最后,单片机还要根据数据处理的结果来产生相应的控制信号,比如说某个测量指标超标以后,单片机某个引脚电平发生变化,然后硬件会产生相应的动作来执行某些动作,这个根据处理结果来决定是否产生控制信号的代码,也是工程技术人员的任务。

  综上所述,一个单片机的测控系统,要做的事情就是这些,要做好这些,也并不是很容易。

  你看,你传感器回传数据给单片机这涉及到通信吧?那通信协议也要了解,UART,SPI,I2C这些常用的通信协议你要很熟悉。

  给传感器写驱动程序,那这个传感器的数据手册你要拿来看吧?那时序图和真值表你要会看,很多手册是英文的,你英语也要过关。

  然后数据处理模块,这又涉及到算法,怎么处理?这个是需要你认真思考的,处理数据的这个算法应该是精华所在。

  你如果要显示,你还要会写显示设备的驱动程序,这也需要你看数据手册了。

  如果你想要将处理好的数据给通过网络发出去,你这时候又要懂TCP/IP协议吧?再提一些,CAN总线协议,蓝牙协议,你都要清楚吧?

  这整个的过程都依托于C语言上面,所以你C语言要比较熟练吧。

  所以这整个过程不是很容易的,要求你会不少方面的技能。这些你都做好了,可以算是一个比较可以的“电子码农”。为什么这样说呢?因为这些东西很多人都可以来做,电子系的学生基本都可以来做这些。那么怎么样才能摆脱“电子码农”这个群体呢?

  这个时候就需要一些真本领了,这些真本领包括:数字电路,模拟电路,电路理论,PCB板的绘制,对单片机的深度理解。

  数字电路的一些东西你要很清楚,组合逻辑电路,时序逻辑电路,数据选择器,逻辑门更不必说,为什么需要了解这些? 你单片机和外部设备通信,外部设备不少都是数字IC芯片,都是数字电路的范畴,前面提到的时序图,真值表,也是数字电路的范畴。时序逻辑电路的基本元件,锁存器,触发器工作原理你要明白,你要会触类旁通。啥意思?单片机里面不有RAM吗? RAM能存储运算的一些中间数据,那它就是存储电路啊! 这不是就是锁存器,触发器的作用吗?你不懂数字电路,只知道RAM能存储数据,却不知道为什么能存储数据。那这就是匠人和大师的区别之一。

  模拟电路就更重要了,与非门这些逻辑电路的实现就是依托于模拟电路,那随便说一些典型的单片机的一些模拟电路结构你要知道原理并且会运用,比如说开漏输出,比如说推挽输出。 再比如说,单片机端口很多都加了上拉电阻,那为啥要加上拉电阻,你能解释原因吗? 那还有下拉电阻,啥时候要加下拉电阻你知道吗?为什么要加下拉电阻你又明白吗? 晶振旁边要加倆电容,为啥加电容,电容加多大你会算吗? 某一天你自己设计电路的时候这些都需要你来决定。

  PCB板子的绘制,工作以后,自己做产品你当然需要自己绘制PCB板子了,那么绘板软件你要会使用吧?

  那么啥是对单片机的深度理解呢? 这就涉及到底层了,你要对单片机内部的资源非常了解,才能叫深度理解。

  我这里以STM32单片机来说明一下这个问题。

  很多人学STM32就只会按照历程改一改代码,学一下库函数,然后跑一下代码,这样学出来就不算精通单片机。很多人连模块的寄存器都不清楚,也不会用,模块原理也不清楚。

  比如GPIO模块,这里常用的寄存器有CRL CRH ODR IDR BSRR BRR,GPIO的内部电路是怎么样的?为什么会有推挽输出,开漏输入,模拟输入,上下拉输入,这些电路是什么样的,怎么起作用的?   我提到的一个是寄存器,一个是内部电路。很多人都不太了解,只会用库函数操作一下。 那这就很没意思了,如果我需要高效率的代码,我需要更小的代码,不能用库函数的时候,那这些只会操作库函数的人就懵了。  你也可以对比一下用库函数点一个LED和直接寄存器点一个LED生成的代码的大小有多大的差别。

  对单片机的深度理解就是对单片机内部模块,GPIO,中断,定时器,ADC,PWM等等这些模块的寄存器的熟悉,对这些模块电路的了解。如果能做到这些,那才算对单片机有一个比较深度的理解。

  总结一下,对数电,模电,PCB板绘制,以及单片机本身的深度理解,做到这些以后,算是有了一个进阶。从电子码农进化到了一个单片机老手的水平,接着就是要多在项目中进行一些锻炼,逐渐的非常熟悉各种外设的使用,达到信手拈来的水平就很厉害了。

 

  接下来的要再怎么进阶呢?

  这时候要上操作系统啦。学一下RTOS,这时候要开始补操作系统的知识啦,然后看源码,估计算法和数据结构的知识也要补一补啦。 

  接着学一下Linux系统,这个时候内核的裁剪,移植,uboot的移植,文件系统的创建,等等这些又是一个新起点去学习。

  这时候需要高级点的板子啦,带MMU的芯片才行(高手可以在Cortex-m3上跑Linux,Cortex-m3是没有MMU的)。我记得ARM9以及以上的芯片才带MMU。

  这个阶段应该算是嵌入式的入门了,后面的我也不太清楚了,慢慢学习,再慢慢更新。

  

  我还只是一个在校的大三学生,文中有不对的地方,还请技术大牛批评指正,感激不尽。

 

以上是关于当我们谈单片机的时候,我们在谈些什么?的主要内容,如果未能解决你的问题,请参考以下文章

融云分析当我们在谈通讯安全时,我们在谈些什么

性能测试===当我们在谈性能测试的时候,我们在谈什么?

当我们在谈 SaaS 的时候,在谈什么?

多线程知识梳理,当我们谈到CAS的时候,我们在谈什么?

多线程知识梳理,当我们谈到volatile的时候,我们在谈什么?

Redis知识梳理当我们谈到双写一致性的时候,我们在谈什么?