单片机

ROM、RAM、FLASH的区别

这一生的挚爱 提交于 2019-11-28 20:59:05
初学MCU的人,经常会看到ROM, RAM, FLASH,而且会被这些词汇搞得晕头转向。本文对这些概念进行了厘清,并介绍了这些Memory的区别,以及它们在MCU中的作用。 ROM (Read Only Memory)程序存储器 ROM全称Read Only Memory,顾名思义,它是一种只能读出事先所存的数据的固态半导体存储器。ROM中所存数据稳定,一旦存储数据就再也无法将之改变或者删除,断电后所存数据也不会消失。其结构简单,因而常用于存储各种固化程序和数据。 在单片机中用来存储程序数据及常量数据或变量数据,凡是c文件及h文件中所有代码、全局变量、局部变量、‘const’限定符定义的常量数据、startup.asm文件中的代码(类似ARM中的bootloader或者X86中的BIOS,一些低端的单片机是没有这个的)通通都存储在ROM中。 为了便于使用和大批量生产,进一步发展出了可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)。EPROM需要用紫外线长时间照射才能擦除,使用很不方便。1980s又出现了电可擦除可编程只读存储器(EEPROM),它克服了EPROM的不足,但是集成度不高、价格较贵。于是又发展出了一种新型的存储单元结构同EPROM类似的快闪存储器(FLASH MEMORY)。FLASH集成度高、功耗低、体积小,又能在线快速擦除,因而获得了快速发展。

我的大学四年——郭天祥

空扰寡人 提交于 2019-11-28 18:01:17
处大学的第八个学期,眼睁睁看着我大学四年最后的时光一点点逝去,再看看身边很多学生一天天的把时间就这样白白的荒费掉,我在内心里替他们惋惜,在即将结束我的大学本科生涯之际,在这里将我的大学四年生活与大家分享一下,也许能让有些同学为了实现自己的人生目标少走点弯路,大家要相信,大学,真的是很好的学习地方。 我2002年考入哈尔滨工程大学信通学院学电子信息工程专业,现在已经是我在本科阶段的最后一个学期了。在我刚入校的时候对电子类知识一点也不懂,因为以前我比较喜欢经商,第一志愿报了经管学院,结果没被录取,被调到信通学院了,现在想来也挺好,刚上大学时认为在大学里当班长,或者能在学生会里混个什么小官当当就很好了,所以我从上大一就开始加入学校的学生会,还有系里的学生会,总竞选班干部什么的,后来也如了我的愿,官当了不少,大一时候根本不知道大学里要学什么东西,天天就是上课,那时一节课也不敢逃,天天上课、然后吃饭、回宿舍。周末还找几个同学诳诳街什么的,日子过得很平谈,但也感觉很充实,可能还带着刚离开高中校园的那种兴奋吧。 一年就这样过去了,接着就大二了,上学期也一样的过,和大一没什么区别,没有特别的事,天天打篮球,踢足球。等到大二下学期时,有一天我突然觉悟了,我想起了我曾经的梦想、我的追求、我的理想,想想我的将来会是什么样?我的专业是电子信息工程,那我必须在这方面学有所成,两年都快过去了,我是学电子的

轻松入门电磁兼容:电子设备的敏感性试验

Deadly 提交于 2019-11-28 16:29:19
我读大学时(1984年),单片机刚刚出现,对于这个神奇的器件大家十分兴奋。于是在毕业设计中,很多项目都是与单片机有关的。记得,那时经常发生的一个事件就是,正在实验的兴头上,突然单片机就出现了死机,或者复位。那时不知道电磁兼容这个术语,但是知道单片机系统对电磁骚扰十分敏感,所以后来在应用单片机时总是心有余悸。 现在单片机无处不在,保证他们的可靠工作是十分重要的事情。也就是,电子设备在工作时,不能对外部的电磁骚扰过于敏感。这种骚扰既可以是其他电子设备的功能性电磁发射,例如雷达、电台等的电磁波发射,也可以是伴随发射,例如变频器等强骚扰设备。 检查设备对电磁骚扰敏感的程度的试验叫做敏感性试验,也叫做抗扰性试验。抗扰性试验的项目很多,之所以有很多项目,是因为要模拟现实中可能出现的各种电磁骚扰现象。 敏感性试验从对设备产生影响方面划分,主要分为四类: 第一类,电源线传导骚扰敏感性试验:主要考察设备对来自电源线的骚扰的敏感性,电源线上的骚扰既可以来自电网上的其他设备,也可以来自空间电磁波的感应;来自电网的骚扰的一般频率较低,来自空间的骚扰一般频率较高。还有一个重要区别,来自电网的骚扰是差模骚扰,来自空间的骚扰是共模骚扰。差模和共模的概念后面会进行介绍。 第二类,辐射骚扰敏感性试验:考察设备对空间电磁波的敏感性。这种电磁波主要来自无线电辐射天线,例如,电台、雷达等。也可以来在附近的强骚扰设备,例如

轻松入门电磁兼容:电子设备的敏感性试验

孤人 提交于 2019-11-28 16:19:34
我读大学时(1984年),单片机刚刚出现,对于这个神奇的器件大家十分兴奋。于是在毕业设计中,很多项目都是与单片机有关的。记得,那时经常发生的一个事件就是,正在实验的兴头上,突然单片机就出现了死机,或者复位。那时不知道电磁兼容这个术语,但是知道单片机系统对电磁骚扰十分敏感,所以后来在应用单片机时总是心有余悸。 现在单片机无处不在,保证他们的可靠工作是十分重要的事情。也就是,电子设备在工作时,不能对外部的电磁骚扰过于敏感。这种骚扰既可以是其他电子设备的功能性电磁发射,例如雷达、电台等的电磁波发射,也可以是伴随发射,例如变频器等强骚扰设备。 检查设备对电磁骚扰敏感的程度的试验叫做敏感性试验,也叫做抗扰性试验。抗扰性试验的项目很多,之所以有很多项目,是因为要模拟现实中可能出现的各种电磁骚扰现象。 敏感性试验从对设备产生影响方面划分,主要分为四类: 第一类,电源线传导骚扰敏感性试验:主要考察设备对来自电源线的骚扰的敏感性,电源线上的骚扰既可以来自电网上的其他设备,也可以来自空间电磁波的感应;来自电网的骚扰的一般频率较低,来自空间的骚扰一般频率较高。还有一个重要区别,来自电网的骚扰是差模骚扰,来自空间的骚扰是共模骚扰。差模和共模的概念后面会进行介绍。 第二类,辐射骚扰敏感性试验:考察设备对空间电磁波的敏感性。这种电磁波主要来自无线电辐射天线,例如,电台、雷达等。也可以来在附近的强骚扰设备,例如

【转载】while(1)的作用

那年仲夏 提交于 2019-11-28 14:44:05
补一下while(1)的作用: 单片机中while(1)有两种用途, while(1); 意义:这是一个死循环,代码不再向下执行。 用途: 1. 一般在调试代码时,为了检测一部分代码是否OK,防止后面的代码干扰执行结果,会在观测点加上while(1); 2. 有些代码检测到运行错误时,会抛出错误(打印、设置错误码),然后进入while(1); 3. 机器需要复位时,停止喂看门狗,进入while(1); 迫使看门狗超时,产生硬件复位 while( 1 ) { 代码 } 意义:这里将会重复执行{}中的代码 用途: 1. 单片机在不使用操作系统时,主程序一般都使用这种架构 2. 操作系统中的进程,执行任务时,有些也会使用这种架构 3. {}中的代码不停地检测某个条件,当条件符合时,跳出该循环,继续向下执行 我们在单片机中使用while(1),大部分还是为了防止程序跑飞,因为很多时候执行完某段程序后单片机的程序指针PC(就是程序指针)并不会停止,仍然会继续从ROM中读取指令并执行,这样一来可能会出现程序跑飞的情况,进而出现不确定的结果,我们加个while(1)就能让程序在执行完后在原地循环,相当于停在原地,防止跑飞。 原则上来讲,如果程序中没有加结尾的话,程序计数器会继续累加,从而执行正常程序后面的ROM空间里面的指令,不过一般这个指令都是0XFF,这就要看这条指令的含义了

STM32内部FLASH介绍

China☆狼群 提交于 2019-11-28 04:51:52
一、介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。 RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。 Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失, RAM可以理解为内存,用来存储代码运行时的数据,变量等等。掉电数据丢失。 STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。 stm32的外设地址从0x4000 0000开始,可以看到在库文件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。 一般情况下,程序文件是从 0x0800 0000 地址写入,这个是STM32开始执行的地方,0x0800 0004是STM32的中断向量表的起始地址。 在使用keil进行编写程序时,其编程地址的设置一般是这样的: 程序的写入地址从0x08000000(数好零的个数)开始的,其大小为0x80000也就是512K的空间,换句话说就是告诉编译器flash的空间是从0x08000000-0x08080000,RAM的地址从0x20000000开始,大小为0x10000也就是64K的RAM。这与STM32的内存地址映射关系是对应的

利用C51单片机模拟SPI进行双机通信

人盡茶涼 提交于 2019-11-27 23:49:30
SPI协议简述   SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。由Motorola首创。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线。 优缺点: 协议简单,相对数据速率高。 占用的Pin口较多 没有指定的流控制,没有应答机制确认是否接收到数据。 SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI,SDO,SCK,CS。 SDO – 主设备数据输出,从设备数据输入 SDI – 主设备数据输入,从设备数据输出 SCK – 时钟信号,由主设备产生 CS – 从设备使能信号,由主设备控制 CS: 其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能。 SCK:SCK为时钟信号线,主要控制时序。相当于整个SPI协议是以SCK为准进行的。因此SCK的控制在每次发送中只能在主机的控制下进行,从机不可控制。 SDI/SDO: 通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议

STM32单片机GPIO口配置问题

痴心易碎 提交于 2019-11-27 21:30:58
  在学习STM32F单片机时,我们常常困惑什么时候才能叫入门,采用什么样的教材入门,或者采用什么的编程软件。在学习类的教材中,以神州,原点教材布局很多,但是相信很多人看到这类教材也是一头雾水,需要你花费巨大的精力从寄存器的最底层去学习和了解,学习时间还是相对漫长。在采用的编程软件中,KEIL和IAR各有优势吧,在这里我选用的是KEIL。   在开始学习编程时,我采用的是库函数开发指南。在安装完成KEIL软件和添加项目工程时,就开始学习库函数编程。   在编写一个GPIO口控制时,首先我们要知道我们要实现的功能,连接的IO口和怎么配置GPIO口。最常见的以LED举例来说。比如我采用PB13引脚连接LED灯的负极,按照硬件的逻辑需要置位该引脚为低电平,LED才点亮。置位高电平,LED灯熄灭。按照库函数编程的规则,我需要创建一个LED.C和一个LED.H文件,当然,也可以省事,两个不需要创建,创建的好处,方便以后直接移植修改和便于阅读理解。只有main函数中包含LED.H文件,这个头文件才会被调用,LED.C文件需要被添加进来。   在图示中配置为引脚配置为LED灯控制引脚,在这里GPIO口配置为输出。GPIO口可以灵活配置为输入和输出。输入模式一般为四种,一般为模拟输入,浮空输入,上拉输入和下拉输入模式,也有人认为输入为模拟输入,浮空输入,弱上拉输入,强上拉输入

单片机的栈

与世无争的帅哥 提交于 2019-11-27 18:43:00
导读:在C语言的世界里,栈的地位非常举足轻重,许多错误都可能和栈设置有关,那么该如何确定栈的大小? 今天分享一点栈知识,帮助你确定栈的大小,参考链接请点击下方的阅读原文。 其实很多编译工具是可以获取函数调用信息的,比如: KEIL 平台 可以使用参数: --callgraph:生成一个静态调用图(html或文本格式),显示堆栈使用情况 --info=stack:列出所有全局符号的堆栈使用情况 以上两个参数分别生成Objects目录下的 xxx.htm文件(事实上这个--callgraph是默认参数,用浏览器打开这个文件即可)和 Listings目录下的xxx.map 文件(keil或者记事本打开)。 xxx.htm xxx.map 事实上这个文件生成也是由默认参数 --map 管理的,不同的是增加 --info=stack 参数后,文件中还会增加如下信息: 它描述了每一个函数调用情况,并且把最大调用链和最大使用栈给你找出来了(这个文件打开有一个小技巧,双击 Target 1,即可打开这个文件,方便快捷)。 事实上,这些信息只能用于参考,而不能作为最终的栈大小,计算实际栈大小远比这个复杂,这个原文进行了深入阐述。 事实上,一般设置栈大小都不会采用如此复杂的计算,而是通过长时间运行来简单确定栈大小(一般 RTOS 都有栈检查功能函数)

基于STM32L431单片机和NB-IOT技术的低功耗追踪器

假装没事ソ 提交于 2019-11-27 17:05:42
趋势: 随着5G技术的逐渐普及,NB-IOT技术即将成为未来低功耗设备的主流趋势。在最近华为提出的5G标准中,着重强调了物联网设备中NB-iot设备对于5G全局建设的重要性。可见,未来的物联网将大概率由NB-iot设备主导。 功能说明: 1、使用低功耗系列单片机做主控制器,获取设备所处位置(GPS得到的经纬度或者基站定位的得到的多个基站ID和RSSI),以及一些其他的信息(如温度、湿度等)。 2、该设备在低功耗休眠后,每隔一段时间向指定IP的指定端口上报信息。 3、整个系统可以在10000mah的电池下工作长达半年~一年。 用途展望 : 最初项目的目的是为了制作危险品箱子(陈放危险品,需要知道位置,但是又不是必须要实时跟踪)的类似用途,除此之外开发类似采集某地的水质土壤数据、灾情警报器(可以知道实时的位置,不需要人工在布置时记录)。 使用设备 :STM32L431、高新兴物联NB-IOT模块ME3616、 深圳市合方圆科技GSM模块GU620。 系统框图如图: 各部分模块介绍: NB-IOT: NB-IOT技术本身并不提供定位服务,当前NB-IOT设备甚至还未开放小区ID(单基站)查询服务,预计未来将开放。为了定位,经过综合对比、挑选我们使用了由深圳高新兴物联开发的ME3616模块,该模块具有功耗低,集成具有GPS定位的功能。另外,通过AT指令集配置