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-

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

    关注

    6074

    文章

    45340

    浏览量

    663490
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    怎么学好单片机

    程之后,怎么嵌入单片机? 初学者学了编程语言的之后,又或者搞纯软件想转单片机的人,都会有个共同的特点就是,下一步不知道如何入手? 那么就会问,你懂硬件吗?要求不高,略懂就好,不求很精,因为硬件这
    发表于 12-04 07:16

    第1章 如何学习单片机

      在错误的道路上日夜兼程,最终也无法成功,方法和思路绝对是最重要的。本章节讲到的学习单片机的方法,都是作者学习单片机的无数经验和教训总结出来的瑰宝。通过作者前面的披荆斩棘,开辟了道路,可以告诉读者
    的头像 发表于 10-10 10:32 233次阅读

    单片机用什么封装

    单片机封装是将芯片内部电路与外部引脚连接并包裹保护的结构,不仅影响单片机的安装方式、适用场景,还与电路设计的紧凑性、散热性能密切相关。不同封装类型各有特点,适配从简单电路到复杂系统的多样化需求
    的头像 发表于 08-01 13:47 896次阅读

    什么单片机比较耐用

            在工业控制、户外设备、医疗仪器等场景中,单片机的耐用性直接决定了设备的稳定运行与维护成本。耐用的单片机通常具备宽温工作范围、强抗干扰能力、稳定的电源适应性和长寿命的硬件设计。深圳市安
    的头像 发表于 07-31 13:48 550次阅读

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 475次阅读

    单片机怎么驱动电机?

    在各类自动化设备和智能装置中,电机是重要的执行部件,而单片机作为控制核心,需要通过特定的方式驱动电机运转。单片机驱动电机并非直接连接即可,而是要根据电机类型和功率,搭配合适的驱动电路,才能实现稳定
    的头像 发表于 07-25 09:31 438次阅读

    单片机怎么烧程序

    单片机烧程序是将编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发中不可或缺的环节。无论是简单的灯光控制程序,还是复杂的工业控制算法,都需要通过烧
    的头像 发表于 07-23 11:47 650次阅读

    低功耗单片机各型号的对比及选型参考

    不同品牌、不同系列的低功耗单片机在功耗控制、性能表现、外设配置等方面各有特点,通过低功耗单片机各型号的对比,能帮助开发者更精准地匹配应用需求。本文将围绕主流低功耗单片机型号展开对比,并介绍在
    的头像 发表于 07-22 18:25 918次阅读

    大一暑假适合学51单片机吗?

    大一暑假学 51 单片机,简直是老天爷赏饭吃的黄金窗口。当时就是靠着这两个月,把从课本上看来的 C 语言指针、循环语句,变成了能让 LED 按节奏跳舞的真本事。
    的头像 发表于 07-16 11:42 388次阅读
    大一暑假适合学51<b class='flag-5'>单片机</b>吗?

    KF32A136系列单片机产品介绍

    F32A136 系列单片机是基于 KF32 内核架构开发的单片机
    的头像 发表于 06-27 11:42 1668次阅读
    KF32A136系列<b class='flag-5'>单片机</b>产品介绍

    单片机科普总结,建议收藏!

    单片机(MicrocontrollerUnit,MCU)作为嵌入式系统的核心之一,在现代电子产品中无处不在。从智能家居、汽车电子,到工业控制、医疗设备,单片机支撑着无数智能化应用的发展。对于初学者
    的头像 发表于 04-07 11:58 4464次阅读
    <b class='flag-5'>单片机</b>科普总结,建议收藏!

    什么是单片机的ADC接口

    在嵌入式系统和工业自动化领域,单片机(Microcontroller)作为核心控制单元,承担着数据采集、处理和控制的重要任务。其中,模数转换器(Analog-to-Digital Converter
    的头像 发表于 02-03 11:27 3724次阅读

    51单片机pwm和spwm

    51单片机pwm
    发表于 01-08 15:54 3次下载

    的开发板#单片机

    单片机
    jf_86851739
    发布于 :2025年01月07日 20:24:53

    单片机Debug工具性能对比 单片机调试常用命令

    单片机(Microcontroller Unit, MCU)调试是嵌入式开发中的一个重要环节,它帮助开发者发现和修复代码中的错误,优化程序性能。不同的单片机和开发环境可能使用不同的调试工具和命令
    的头像 发表于 12-19 09:56 2162次阅读