产品选型

单片机底层 单片机底层逻辑思考,单片机学习必备硬核

小编 2024-10-06 产品选型 23 0

单片机底层逻辑思考,单片机学习必备硬核

单片机底层逻辑思考,单片机学习必备硬核

以控制灯跑马灯为例,思考硬件电路与寄存器编程的关系

最一般的实现跑马灯电路如下

从任意单片机引出四个含GPIO功能的引脚引出来,GPIO是General Purpose Input Output是最经典的实现设置输出电平,检测捕获输入电平的硬件电路。

四个GPIO口与电阻和LED灯连接,共同连接在接地端。

如果想实现1亮234灭,2亮134灭,像这样的跑马灯功能,该如何实现呢?

我来做这些事,首先我会把第一个电路接在VCC上,其他电路都接在地上,这样一路电路有了压降LED亮了,其他没有,就灭了,然后我再把一路接地,二路接VCC,就实现了一个跑马灯的动画效果。

好像下图这样

就是这样,只要我不停的换连导线,就可以完成这样的动画效果了。

BUT这样好麻烦,我不想重复做这件事,可以花更多的时间在散步读书上才对。

所以我特别希望改进这个电路,仔细观察,找到规律

如果用1 代表导线接入VCC , 用0代表接地,那么顺序应该是

1000 -> 0100 -> 0010 -> 0001 ->1000

有没有什么设备帮助我们换连导线呢?

这里有两个思路,第一个使用经典的数字电路,移位寄存器,用逻辑门啥的,在时钟信号的驱动下帮我们切换导线连接方法。

第二个思路就是用单片机啦!单片机那可比简单的数字电路强多了。

单片机的GPIO设备有好几种工作的方式,按照其工作特点来看可以分为 输出/输入两种模式。

当我们需要单片机去感应外部电平的时候,我们会把它设置在输入模式,当然现在在我们希望他能输出特定的电压,所以设置他为输出模式。

例如,选择GPIO口为输出还是输入,其切换电路可以抽象成这样

当P0SEL寄存器的BIT0的数值为1的时候,P0.0口硬件与一大片输出相关电路相连,就是说此时P0.0口是处于输出功能状态下,反之BIT0为数值0 则与一大片输入相关的电路相连。其底层的原理大概是利用三极管开关特性完成的吧!无论如何我们配置寄存器,就完成了开关的操作,选择了怎样的电路与我的P0.0口连接!

庆幸的是在GPIO一系列的寄存器里,我找到了切换输出电平的寄存器 P0OUT寄存器,我抽象的思考这样寄存器应该是这样的。

当我给P0OUT的最低位写上1的时候P0.0口与VCC连接,写上0的时候P0.0口与GND连接。大概是这样思考的。

于是我发现,单片机可以帮助我实现切换导线连接这样的事情。

我用了MSP430单片机,把P0.0 P0.1 P0.2 P0.3 接在了上述的电路上。

C代码如下

int main(void){unsigned char led_flash_pos=0x01;Basic_init(); //基础配置P0SEL = 0x0f;//确保P0SEL寄存器低四位是1,使得硬件电路与输出相关电路相连Loop:if(led_flash_pos == 0x10)led_flash_pos = 0x01; //限制左移范围P0OUT = led_flash_pos;DELAY_S(1); // 延时1S让眼睛看到现象led_flash_pos <goto Loop;//跳转 循环}

可能有很多花里胡哨的写法,但是最底层的操作就是配置P0OUT这个寄存器,单片机编程所有对硬件的操作都是对寄存器的操作,我们无需对底层硬件有太多深奥的理解,就可以完成操作!

作者思考:

分工时代,如果认真深入的去了解学习单片机最底层的硬件原理的话,那会消耗大量的时间和精力,一名优秀的软件开发工程师,对底层硬件有一定的理解就好,更多精力花费在对代码数据结构,算法的优化,例如对P0OUT这个寄存器,何时写他,怎么写他,写多少比较合适,这都是需要考虑的事情,还有就是延时的时间是否过长,用定时器延时比较好,还是用阻塞延时比较好?另外,怎样的跑马灯动画更好看?很多可以编程的花样!

记得笔者第一次跑起跑马灯程序,兴奋的写了好多衍生代码,例如隔着一个灯闪烁,快速闪烁,等等,好像往你手上塞了好多好多乐高积木(寄存器),你可以任意的搭接,描绘出自己心中完美的模样!

想要学习单片机的朋友 ,关注我们,回复一哥,与导师一起学习成长,共同进步,还有更多资料领取。

说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~

只有想不到,没有嵌不到,嵌入式系统科普

如今,物联网、AI、5G的发展都离不开嵌入式系统,它就好比一个乐高拼图,只要你会“玩”,就会发生意想不到的性能。那么到底什么是嵌入式系统?下面就给大家科普一下。

想要了解它的组成就先要知道它是如何成长的。

第一个微处理器诞生于20 世纪70 年代初,是由成立3年的Intel推出的4004CPU,4位微处理器,10微米工艺。如今,嵌入式系统发展已有50年的历史,大体上历经了四个阶段:

一、无操作系统阶段

基于初单片机上,多数以编程控制器的形式出现,这一时期,一般没有操作系统相关支持,只有通过汇编语言对系统进行直接的控制,当然在相关运行结束之后再清除内存。

主要特点是:系统机构和功能相对都比较单一,处理效率较低、储存量小,几乎没有用户接口,由于具备以上特性,曾经被工业领域广泛认可。

二、简单的操作系统阶段

高可靠、低耗能的嵌入式CPU。

特点:嵌入式操作系统比较简单,但已初步具备一定的兼容性和扩展性,对控制系统负载以及监控应用程序的运行有一定作用。

三、实时操作系统阶段

在数字化通信和信息家电等巨大需求的牵引下,随着硬件实时性要求的提高,嵌入式系统的软件规模也在不断扩大,这一时期操作系统的实行性得到了很大的改善。

特点:可在不同类型的微处理器上,实现高度的模块化和扩展性运行,以此使得应用软件的开发变的更加简单。

四、面向internet阶段

嵌入式设备与internet的完美结合才是嵌入式技术的真正未来,在这个信息时代和数字时代里,为嵌入式系统的开发带来了巨大的机遇,同时对于嵌入式系统提供商来讲也是新的挑战。

嵌入式系统构成:麻雀虽小五脏俱全

如果按照书本定义,嵌入式指的是把软件直接烧录在硬件里,而不是安装在外部存储介质上。IEEE(美国电气和电子工程师协会)对嵌入式系统的定义是:“嵌入式系统,是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。”

以应用为中心,嵌入式系统是有明确实际用途的。以计算机技术为基础,说明它其实就是一种特殊的计算机。软硬件可裁剪,说明它有很强的灵活性和可定制能力。

专用计算机系统的“专用”是什么意思。先说“通用”,就是指我们常用的个人PC、笔记本电脑、数据中心服务器,可以用于多种用途,就是“通用计算机系统”。那么嵌入式系统究竟具体应用于哪些“专用”方向呢?

比较贴近生活的嵌入式产品,如智能手机、智能冰箱、电梯、汽车导航等;又如一些高大上的产品,谷歌眼镜、数字电视、智能医疗、智能手表。当然还有很多很多。

嵌入式系统就是以处理器(CPU)为核心,依靠总线(Bus)进行连接的多模块系统:

一个嵌入式系统大体可以分为:

硬件系统

中间层

软件系统

应用层

这张图含盖了嵌入式系统的基本构成:

在硬件层里面的主要分为:嵌入式处理器、存储器、模拟电路、电源、接口控制器、接插件等。

其核心是嵌入式微处理器。

嵌入式微处理器与通用CPU最大的不同在于嵌入式微处理器大多工作在为特定用户群所专用设计的系统中,它将通用CPU许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。

嵌入式微处理器的体系结构可以采用冯·诺依曼体系[1]或哈佛体系结构;指令系统可以选用精简指令系统(RISC)和复杂指令系统(CISC)。其中RISC目前最为火热,这种架构只包含最有用的指令,确保数据通道快速执行每一条指令,从而提高了执行效率并使CPU硬件结构设计变得更为简单。   嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线宽度,或集成了不同的外设和接口。目前全世界嵌入式微处理器已经超过1000多种,体系结构有30多个系列,其中主流体系有arm、MIPS、PowerPC、X86和SH等。

在嵌入式领域,arm架构的处理器占据了半壁江山,而它却没有生产任何处理器,而只是提供了IP。

嵌入式微处理器有以下特点:

1)对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。

2)具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。

3)可扩展的处理器结构,以能最迅速地开展出满足应用的最高性能的嵌入式微处理器。

4)嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统更是如此,功耗只有mW甚至μW级。

你是否把单片机和嵌入式处理器搞混?

还有一个叫做嵌入式微控制器MCU,MCU内部集成ROM/RAM、总线逻辑、定时/计数器、看门狗、I/O、串口、A/D、D/A、FLASH等。典型代表是8051、8096、C8051F等。

其实MCU就是所谓的单片机。单片机就是将CPU、存储器、定时计数器、I/O接口电路等集成在一块芯片上,体积小,功耗小,叫做单片微型计算机。因为单片机体积很小可以植入任何微小的设备、仪表当中,被广泛作为这些微小设备仪表的控制器,所以单片机又可称作嵌入式微控制器。

典型产品:51单片机、STM32

嵌入式系统是一个大类,单片机是其中一个重要的子类。嵌入式系统像是一个完整的计算机,而单片机更像是一个没有外设的计算机。现在各种硬件功能都能被做进单片机之中。所以,嵌入式系统和单片机之间的硬件区别越来越小,分界线也越来越模糊。

单片机与嵌入式处理器最大区别

单片机的存储空间和嵌入式处理器不是一个等级,单片机通常片内存储只有几k大小,而由于外设的限制也不太可能大范围增加外设嵌入式多媒体控制器emmc,而嵌入式处理器通常有几百兆的RAM,如此巨大的差别导致单片机几乎不可能像嵌入式处理器那样运行操作系统,甚至连TCP/IP协议栈和USB协议栈都跑不起来,一些高端的单片机比如ST的STM32系列,可能可以跑一些轻量级系统os和嵌入式网络协议栈,比如IwIP协议栈。

此外,嵌入式处理器丰富强大的性能决定它能完成更多单片机不能完成的应用,比如网络通信功能,视频传输处理功能等,而当外设存储增加后,嵌入式处理器能够轻松运行各种Linux系统,以及图形GUI界面。

其余部件

存储器:嵌入式系统需要存储器来存放和执行代码。包含Cache、主存(ROM和RAM)和辅助存储器。

嵌入式外围硬件设备:串口、以太网接口、USB、音频接口、液晶显示屏、摄像头等。

除此之外,还有专门用于信号处理的嵌入式DSP处理器(Digital Signal Processor)以及嵌入式片上系统SoC。

下图是一个嵌入式系统的实物样例:

中间偏左上角是CPU,中间是RAM,然后还有ROM、网卡、串口、电源等。可以看出,嵌入式系统麻雀虽小,五脏俱全。

软件层

软件层很好理解,它是一种用途广泛的系统软件,由实时多任务操作系统(RTOS)、文件系统、图形用户接口、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。主要有:嵌入式实时操作系统µC/OS-II、嵌入式Linux、Windows、VxWorks等,以及应用在智能手机和平板电脑的Android、iOS等。

嵌入式中间层

所谓中间层就是软件层和硬件层之间的接口层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。

相关问答

一个 单片机 的程序, 底层 ,中间层,上层。各是指什么?详细点啦,最好能距离,比较笨,看不懂?

分层的好处是可以将应用与硬件剥离,当硬件发生变更(移植,设计更改)时只需改动底层以及少量中间层;当需求发生变更时只需改动上层以及少量中间层。底层一般...

单片机底层 开发指的是什么?

单片机底层开发一般指利用单片机的固有资源完成的控制功能的软硬件开发,比如通讯协议及驱动(SPI,232,485,IIC,CAN,IR等)、AD转换、各种现场控制、各种环境状...

单片机 开发一定要学习C语言吗? 申请方

C语言库函数比较丰富、运算速度快、编译效率高、可移植性也高,而可以直接实现对系统硬件的控制。单片机的设计与开发使用C语言已成为单片开发与设计...

怎么自学 单片机 ?需要用什么软件看什么书?

单片机应用广泛,学会单片机很有发展前景。学习单片机主要包含硬件学习和软件/程序学习两个方面,这两个方面都会涉及到相应的软件。1.单片机硬件学习单片机在...

PLC与 单片机 有什么不同?

都是计算机,有cpu存储器等计算机具有的必要元件。1.PLC是建立在单片机之上的产品,单片机是一种可编程的集成芯片,换句话来说,plc就是由单片机加上外围电路...

学习哪款 单片机 对找工作更有帮助?

谢邀。观点最近我们在招一批关于单片机的研发岗位就此我也谈谈自己的感受。首先单片机的基本都是对单片机底层驱动的控制,对寄存器的控制。其实学透一种单片机...

单片机 跟树莓派有什么区别?

1.硬件结构不同:单片机的硬件结构比较简单,并且只有一个处理器;而树莓派则是一个完整的计算机,包含主板、CPU、内存、存储器等多个组件。2.应用范围不同:...

单片机 标准函数概念?

在单片机编程中,标准函数是指由单片机厂商提供的一组预定义函数,用于简化常见任务的实现。这些函数通常包含在单片机的开发环境或库文件中,可以直接调用和使用...

单片机 工程师证书?

全称叫单片机开发工程师。目前单片机已渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的足迹。据统计,我国的单片机年需求量已达1-3亿片,且每年以...

51 单片机 教程有哪些推荐?

有没有什么教程,视频比较好的,或者有什么好的方法呢?

猜你喜欢