0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

假如,我变身成了单片机…

朱老师物联网大讲堂 2022-09-19 10:40 次阅读

嗞~~~~~

一股温和的电流流进了我的身体,我从沉睡中醒来,感受着心脏稳定的跳动,我的大脑高速的运转着,我感觉到了他的运转速度,很快,非常快,一秒几十兆的运算速度,我感觉我无所不能。同时,我拥有了几十上百个手脚。我,是单片机?

渐渐地,我也发现了我的缺点,我好像脑容量比较小,感觉不能记得很多东西,我虽然思维活跃,但是好像能量很小,我的能量全来自于唤醒我的那股温和的电流,他虽然稳定,但是他所能够提供的能量很少,我可以灵活地抬放我的手脚,但是它们好像并不能拎起多大多大物体,我好像一无是处。

单片机又称微控制器,是把中央处理器(大脑)、存储器(脑缘系统)、时钟(心脏)、各种输入输出接口(手脚口)等都集成在一块集成电路芯片上的微型计算机。一般单片机的内存较小,输入电压较低,通常为3.3v-5v。运行速度(主频)在几十兆赫兹到几百兆赫兹不等。

83965ad0-35eb-11ed-9ade-dac502259ad0.jpgSTM32F103xx增强型模块框图随着环境的变化,我突然觉得胸口发蒙,温度太高或者太低都让我的心跳异常,经常犯错。但是我却无可奈何,此时我听到了一个声音:你名为单片机,乃是科技的结晶,虽然你现在像个小丑,但是你可以去闯副本,解锁新的皮肤,新的地图。于是我便沉沉睡去。当我再起醒来,我感觉背上剧痛,什么!有人在给我纹身,难道是“精忠报国”?难道我将驰骋沙场,立不世之功!原来我的副本是为了保家卫国……后来我才知道,背上纹的是STM32F103RB,这有个啥用啊,哎~我没想到,这个皮肤有种魔力,让我解锁了新的地图——开发板。在这个地图上,我拥有了另一颗心脏,一个我似乎可以使用外部的心脏,那家伙挺厉害,很多我适应不了的环境他都可以,不容易产生心跳紊乱,我只需要在我醒来时启动它便好,可好用了。现在32位单片机内部都会集成一个晶振,即使不外挂晶振也可以正常工作,但是内部晶振收环境影响较为严重,在一些极端场合可能会造成较大的误差,所有一般应用都会外挂一个高精度晶振,可以使单片机更好的工作。83b71162-35eb-11ed-9ade-dac502259ad0.jpg▲使用8MHz晶体的典型应用
探索新地图:我虽然拥有了强力的心脏,可是我啥也不会呀,我怕黑,想开灯,但是我却无从下手,我看得到地图上有个灯,我不知如何打开,直到我遇到了一个神奇的动物——程序猿。他有着人类一样的外边,但是怎么看怎么像牛,挺奇怪的。那天,这个程序猿给了我一个开灯的说明书,这个说明书好复杂,让我做了好多事,最后让我用其中一个手拉一下开关就可以开灯,不明白为啥要这么麻烦。但是他有时候也给我很简单的说明书,里面只写了:伸手。然后灯就开了,好神奇。那之前为啥要给我那么复杂的说明书呢?单片机本身不含任何功能,需要用户编写代码,编译成单片机熟悉的语言烧录进单片机才可实现功能。例如我们点灯,就让控制灯的引脚输出相应电平即可。在ST的开发环境中,ST提供了多种开发方式:直接操作寄存器、标准库、HAL库、LL库。其中,寄存器的方式是最直接的方式,单片机的响应最快,代码执行效率最高,同时难度较高;LL库及其接近寄存器,效率次之;标准库对寄存器进行了封装,用户可以直接使用库函数实现功能,不能直面寄存器,是曾经最常用的方式;HAL库是开发最简单的方式,HAL库将寄存器和开发者隔离,开发难度特别小,但是也带来一个问题,就是执行效率相较于前几个更低。当我会点灯之后,我发现自己的思维逻辑好像有问题,我总是一根筋,不会回头,做事只会按照一条线去做。好在程序猿给了我一份新的说明书,书中说道:苦海无涯,回头是岸。反正就是让我主线任务做完了再重新来过,还让我注意自己的手脚,他碰我不同的脚我得暂停主线去做支线任务。做完支线才能回来继续做主线任务。说明书上还交代任务的紧急程度,碰我的1脚我得去做1号支线,如果没做完就碰我的2脚,那我得暂停1号支线去做2号支线的任务,等2号支线任务做完再回来做1号任务,直到两个任务都做完才能回去做主线任务单片机就是一根筋,只会按照逻辑一直往下执行,当有紧急事件需要处理可借助单片机的中断系统来处理,单片机会暂停当前执行的任务,转向中断安排的任务,并在完成中断后返回之前跳转到节点。83ce1466-35eb-11ed-9ade-dac502259ad0.jpg▲中断嵌套及响应示意图
如上图所示,当中断发生,单片机会将中断发生时刻的状态和参数保存进堆栈,通过中断向量的指引去完成中断的服务任务,执行完中断服务任务后会返回之前的被打断的指令,然后继续向下执行。当正在执行的中断函数遇到更高优先级的中断请求到来,当前的中断任务保存,跳转执行更高优先级的任务,当高优先级的任务执行完成再返回之前的次优先级任务继续执行,直至中断任务全部执行完成后返回主程序。那天,我发现了另外一块单片机,好不容易见到同类,好想和它聊天。于是,我向他呼喊(UART),但是只能发出1和0,它无动于衷。随后,程序猿给我一本词典(协议),我按照词典的介绍开始发音,但是对方的语言能力可能不是很好,我说的快了它反应不过来,说的慢了它会漏掉我的话(波特率匹配)。在尝试许久后终于见它有反应了,我也收到了它的回复,它也只会说什么1啊,什么0啊之类的,我只能考词典进行翻译(转码),但是也只能它说一句我回一句,就像对讲机一样(异步串行通信),好在虽然比较麻烦,总算能聊上了。随着时间的推移,我们之间的距离越来越远,说话都是断断续续的,即使我叫破了喉咙也不顶用(远距离通信),于是我俩想办法找到了扩音喇叭(RS485芯片),这玩意自带能量供给,不需要我们提供(单独供电),我只需要正常说话,他就会给我放大,即使隔得很远我们也能说话。但是不知怎么的,我们的距离越来越远,远到靠扩音喇叭都无法起作用,但是难不倒我们,我们又找来更先进的设备——无线通信模组,通过这类设备,我们可以实现天南地北通话无误。嵌入式开发中,UART串口通信协议是我们常用的通信协议之一,全称叫作通用异步收发传输器(Universal Asynchronous Receiver / Transmitter),是异步串口通信协议的一种,其工作原理是将传输数据的每个字符一位接一位地传输,它能将要传输的资料在串行通信与并行通信之间加以转换,能够灵活地与外部设备进行全双工数据交换。UART的通信需要遵守通信协议,同时匹配波特率,才能进行正常的通信。可以将通信过程按下图想象:83e1cbb4-35eb-11ed-9ade-dac502259ad0.jpg▲正常通信UART发送数据就类似打开门放数据出去,波特率就是控制打开门的速度,当发送方按照一定的速率放出数据,接收方也按相同的速度开关自己的闸门,那数据就刚好可以一个个进来。如果接收方和发送方的波特率不一样,就可能出现数据当接收方门口的时候门关了,数据进不去,导致接收异常。83f502ec-35eb-11ed-9ade-dac502259ad0.jpg▲通信异常当通信双方距离较远,通信就会受阻,此时可采用485通信,485的出现,是为了解决232通信距离受限的问题。RS-485的数据最高传输速率为10Mbps。RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
RS-485最大的通信距离约为1219m,最大传输速率为10Mbps,传输速率与传输距离成反比,在100Kb/S的传输速率下,才可以达到最大的通信距离,如果需传输更长的距离,需要加485中继器。RS-485总线一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。485通信只需要+、-两根线,或者也叫A、B两根线。A、B两根线的差分电平信号就是作为数据信号传输。由于发送与接收都是用这两根线,也就是说每次只能用作发送或者只能用作接收。所以,485是半双工通信。8407a348-35eb-11ed-9ade-dac502259ad0.jpg▲RS-485通信
但是这样说话好累啊,我想发出声音怎么办呢?这时我发现自己有一个手上拿着一个蜂鸣器(无源他激型),只要我拼命地摇动,他就会发出声音,我摇动的频率不同,发出的声音就不同,这样我就可以发出不同的声音了,我甚至还可以给自己来首曲子(方波信号输入谐振装置转换为声音信号输出)。就是比较累,我还得算着时间来摇动。音乐都有了,我还要灯光,可是我手上的灯只能发出一种颜色,要么让他亮,要么要他灭,于是我找到了身上的定时器,我可以让它控制我的手去开关灯(PWM输出),在一定时间内多让灯多亮一会,再关掉,控制打开和关闭的时间灯光就会一会亮,一会暗,但是可能我动作得快点(频率大于人眼捕捉频率),不然会一闪一闪的,这好酷啊(动态更改PWM占空比)。渐渐地,我觉得我还是养一条狗比较好,因为上次我做错事了,但是我钻牛角尖,不愿意放弃,一直死等(程序卡死),导致后面好多事都耽搁了,还导致自己差点出事。决定还是养个看门狗(就是看门狗),每隔一段时间就去喂狗,它不饿就不会叫,我要是钻牛角尖了,就会忘了喂狗,这样他就会叫,我听到狗叫就会反应过来的。
但是,有问题我也得解决不是,我可以把这件事记在身上的本子上(写FLASH),这样以后就能看看到底咋回事了。但是我的笔记本挺不好用的,每次都得把这一页擦掉才能写,而且最少得擦掉一页。但是还是很必要的,因为我每次昏睡后(掉电)都会丢失一些数据(掉电会丢失RAM数据),为了防止我忘记也可以写在上面。但是我的脑子可能真的有问题,每次再做笔记时总是会屏蔽其他的声音,谁都不能打扰我。在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watchdog)。
看门狗的作用是系统CPU正常工作时定时给看门狗喂狗,复位定时器,如果系统出问题,没有给看门狗喂狗,看门狗就由于超时将CPU复位。一般工程都会使用两个看门狗,一个是独立看门狗,主要用于在代码跑飞之后复位使用,一个是窗口看门狗,主要用于在复位前对于一些重要数据进行保存。小数据量一般可以保存进单片机自己的FLASH中,下次上电还会存在。注意:1、每一款单片机的FLASH的大小不尽相同,在操作FLASH之前一定要根据手册确定手里的单片的FLASH的大小,超出FLASH容量的写操作是不被允许的,也无法成功完成数据写入。2、计算好程序的内存,程序也是保存在FLASH中,如果没有计算好程序的大小,将写FLASH写入程序占用的内存中,会导致程序奔溃。3、写数据之前必须先对页进行擦除,因为FLASH不能写1,只能写0,所以写之前要通过擦除操作将FLASH页中的数据全部恢复为FF,才能进行写操作,如果该FLASH中存在需要的数据,必须要先将数据读出来存在缓存区,再将页擦除,再进行写数据。4、数据不超过一页,可连续写入。5、注意FLASH的操作单位,每次最少写4个字节,可通过手册查询页的大小,因为一般采用的是整页的擦除和写入,不可随意擦写。6、操作FLASH时会占用总线,会打断你的中断操作,且写FLASH时间一般较长,所以在操作FLASH时要保证单片机预留出足够的时间。7、详情参见帖子:国民技术G435大容量FLASH让你储存离线数据不必节衣缩食(地址:https://bbs.21ic.com/icview-3208110-1-1.html)我觉得我还有很多很多的很强很强的能力等我发现,但是我突然觉得体内的能量越来越少,渐渐感觉头晕眼花,我可能需要休息一会,不知道小憩一下会不会恢复(睡眠模式),不行的话,可能我要好好睡个觉了(深度睡眠),如果能量再少下去我可能就睡昏头了(待机模式),这样再醒来可能之前的事我就全忘记了(停机模式下会丢失RAM数据)。
呼呼~~1、睡眠模式:在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设,CPU核心的外设全都还照常运行,在软件上表现为不再执行新的代码。这个状态会保留睡眠前的内核寄存器、内存的数据。唤醒后 ,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。唤醒延迟:无延迟。(WFI:Wait For Interrupt,WFE:Wait For Event)。2、深度睡眠模式(停止模式):在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。唤醒后,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。停止模式唤醒后,STM32会使用 HSI(f1的HSI为8M,f4为12M)作为系统时钟。所以,有必要在唤醒以后,在程序上重新配置系统时钟,将时钟切换回HSE。
唤醒延迟 :基础延迟为 HSI振荡器的启动时间,若调压器工作在低功耗模式,还需要加上调压器从低功耗切换至正常模式下的时间,若 FLASH 工作在掉电模式,还需要加上 FLASH 从掉电模式唤醒的时间。3、待机模式:它除了关闭所有的时钟,还把 1.2V区域的电源也完全关闭了,也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测 boot条件,从头开始执行程序。注:以上蓝色内容仅是作者个人理解,黑体部分纯属瞎编乱造,如有错误,欢迎评论区留言指正!84182cb8-35eb-11ed-9ade-dac502259ad0.png作者:呐咯密密来源:21ic论坛-END-

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634580
收藏 人收藏

    评论

    相关推荐

    单片机怎么写入程序

    单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器、输入/输出接口等功能集成在一个芯片上。单片机广泛应用于嵌入式系统和物联网设备中。编写单片机
    的头像 发表于 10-21 11:21 419次阅读

    单片机的中断机制

    单片机的中断机制是一种重要的处理方式,它允许单片机在执行主程序的过程中,能够暂停当前任务,转而处理外部或内部紧急事件。这种机制极大地提高了系统的响应速度和处理能力,使得单片机在各种应用领域中得到广泛应用。以下是对
    的头像 发表于 10-17 18:03 616次阅读

    单片机烧录程序的基本步骤是什么

    单片机烧录程序是单片机开发过程中非常重要的一步,它涉及到将编写好的程序代码通过一定的方式传输到单片机内部的存储器中,使单片机能够按照预定的逻辑执行任务。 一、硬件准备
    的头像 发表于 09-02 09:47 993次阅读

    一文读懂什么单片机:组成结构与应用

    需要了解什么是单片机单片机与微处理器类似,但它在同一芯片上集成了一些额外的组件。什么是单片机单片机是一种超大规模集成电路(VLSI),它
    的头像 发表于 08-09 11:49 1672次阅读
    一文读懂什么<b class='flag-5'>单片机</b>:组成结构与应用

    UCGUI单片机源码

    UCGUI单片机源码
    发表于 07-04 17:11 1次下载

    一个暑假如何学习单片机

    一个暑假是学习和掌握单片机基础知识的良好时机。以下是一个关于如何在暑假期间学习单片机的建议计划
    的头像 发表于 07-03 09:19 512次阅读
    一个暑<b class='flag-5'>假如</b>何学习<b class='flag-5'>单片机</b>

    如何系统、科学地自学单片机

    很多初学者都会面临这个问题,想学习单片机也想学好单片机也想系统地学习单片机,但是
    的头像 发表于 03-28 08:03 1063次阅读
    如何系统、科学地自学<b class='flag-5'>单片机</b>?

    单片机是什么?单片机编程如何入门?

    单片机其实是一种很早的叫法了,最开始我们的前辈叫单板机或者叫单片机,因为那个时候单片机的处理能力还没有很强,现在我们所用的基本都是微型处理单元,也叫为控制器也称之为MCU
    的头像 发表于 03-28 08:03 1880次阅读
    <b class='flag-5'>单片机</b>是什么?<b class='flag-5'>单片机</b>编程如何入门?

    单片机的最小系统由什么组成 单片机的最小系统包括哪些

    单片机(Microcontroller Unit,MCU)的最小系统包括以下几个主要组成部分: 单片机芯片:单片机是整个最小系统的核心部分,它集成了中央处理器(Central Proc
    的头像 发表于 02-02 11:27 1w次阅读

    怎么根据外围电路配置单片机gpio的时钟

    怎么根据外围电路配置单片机gpio的时钟  根据外围电路配置单片机GPIO的时钟是一项重要的任务,它决定了单片机与外部设备的通信速度和稳定性。在本文中,将详细介绍如何根据外围电路配置
    的头像 发表于 01-31 10:57 1097次阅读

    基于单片机控制的交通灯设计

    本课程设计是在学完单片机原理及课程之后综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现。
    的头像 发表于 01-22 15:31 2034次阅读
    基于<b class='flag-5'>单片机</b>控制的交通灯设计

    什么是单片机? 单片机由哪几个主要部分组成?

    单片机是一种集成电路芯片,具有处理器核心、存储器、输入输出接口等主要部分。它可以用来控制并执行各种任务,广泛应用于电子产品中。 一、单片机的概述 单片机是指在一块集成电路中集成了中央处
    的头像 发表于 01-22 10:38 9128次阅读

    单片机最小系统的作用 单片机最小系统包含哪几部分

    部分: 单片机芯片:单片机最小系统的核心部分是单片机芯片,它是整个系统的主控制核心。单片机芯片上集成了CPU、存储器、定时器、IO口等各种功
    的头像 发表于 01-18 13:54 4012次阅读

    单片机编程实例介绍

    单片机(Microcontroller)是指内部集成了处理器核心、存储器、输入输出接口和外围设备接口等功能模块的集成电路芯片。它具有体积小、功耗低、性能高等优点,被广泛应用于嵌入式系统中。单片机编程
    的头像 发表于 01-16 09:37 2610次阅读

    单片机解析g代码的方法

    单片机是一种完整的计算机系统,它集成了处理器、存储器、输入输出接口等基本的计算机组成部分。单片机应用广泛,可以用于控制各种电子设备。在单片机中,G代码是一种常用的数控编程语言,用于控制
    的头像 发表于 12-22 14:15 1754次阅读