大家好,今天小编关注到一个比较有意思的话题,就是关于单片机程序100例的问题,于是小编就整理了5个相关介绍单片机程序100例的解答,让我们一起看看吧。
请教单片机掉电后,如何快速的保存数据问题?
针对题主的问题,我想应该从以下几个方面入手:
尽量选用内部的flash来存储数据,内部flash的读写速度快,可靠性高。
如果用外置的flash或者是eeprom进行存储,flash一般是spi接口,考虑到电磁干扰,MCU的响应速度等问题,即使是采用MCU的硬件SPI模块进行通信,SPI的clock时钟最高也就1MHz左右,发送1个字节的数据大概需要10us,不考虑擦除flash的时间,存储100个字节的数据,如果考虑可靠性,需要读取验证,大概需要5ms左右的时间。
而eeprom一般采用IIC接口,与SPI接口类似,以高速IIC进行通信,存储100个字节的数据至少需要5ms左右的时候。
FLASH的特点是写数据只能由1改写为0,由0改写为1需要整个page,或者整个sector,或者整个block进行擦除。
以STM32F051为例,一个page为1kByte,一个block为64kByte,擦除一个page大概耗时约20ms,在整个擦除过程中,整个MCU是挂机的,也就是不执行任何操作。而FLASH的写操作比较快,大概1个Byte耗时1us。
需要有掉电检测电路,掉电检测需要通过检测给MCU供电的LDO或者DC-DC的前级电压。
比如MCU通过12V-3.3V的LDO供电,则需要通过检测12V的电压来判断是否断电。
将12V通过电阻分压之后,接入MCU的A/D检测口来判断是否掉电。
MCU供电的LDO或者DC-DC的前级并联足够的电容,以确保电容的供电能保证MCU将数据写入。
可以通过以下的步骤确认电容的大小:
- 评估由掉电时前级电压供电的工作电流大小,MCU一旦检测到掉电,需要切掉耗电大的输出,比如控制继电器输出的I/O口需要立即断开。比如20mA。
- 确认LDO的最低输入电压,比如5.3
- 确认判断掉电的电压,比如10V,确认掉电开始到LDO最低输入电压之间的压差,比如4.7V
- 确认写入所有数据所需要的时间,比如20ms。
- 根据公式计算所需电容的容量,C=IT/U=20mA20mS/4.7V=85uF。可选择100uF的电容。
MCU一旦检测到掉电,需要切掉耗电大的输出,比如控制继电器输出的I/O口需要立即断开。
在正常工作时,事先准备一块存储空间,将其擦除成为0xFF。
检测到掉电之后,可以不需要擦除FLASH内容,可以直接写入数据,可以节省大量的时间。
单片机和DSP的区别是什么?
在这秋高气爽的天气,很高兴给大家分享我对这个问题看法,在这里让我们一起走进这个问题,那现在让我们一起探讨一下关于这个问题。
单片机是通用的cpu,比如说控制led灯,显示温度时间等,做一些软件级别的计算。例如,你可以编写crc32的软件计算函数。而DSP主要做硬件级别的运算,例如软件传参到指定的寄存器中,DSP硬件模块可以直接算出结果并返回,速度比单片机软件要快。
在下面优质内容我为大家分享,首先我分享下我个人对这个问题的看法与想法,也希望我的分享能给大家带来帮助和快乐,同时也希望大家能够喜欢我的分享。
单片机不是设计来做密集乘法任务的,即使是一些现代的GPP,也要求多个指令周期来做一次乘法。而DSP处理器使用专门的硬件来实现单周期乘法。DSP处理器还增加了累加器寄存器来处理多个乘积的和。累加器寄存器通常比其他寄存器宽,增加称为结果bits的额外bits来避免溢出。
DSP算法的一个共同的特点,即大多数处理时间都花在执行较小的循环上,也就容易理解,为什么大多数的DSP都有专门的硬件,用于零开销循环。所谓的零开销循环是指处理器在执行循环时,不用花时间去检查循环计数器的值,条件转移到循环大额顶部,将循环计数器减1。
在以上我的精彩的分享是关于这个问题的解答,都是我的真实想法与观点,同时我希望我分享的这个问题的解答于分享能够帮助到大家。
我也希望大家能够喜欢我的解答,大家如果有更好的关于这个问题的解答与看法,望分享评论出来,共同走进这话题。
我在这里,发自内心真诚的祝大家每天开开心心工作快快乐乐,拥有身体健康生活每一天,家和万事兴,年年发大财,生意兴隆,谢谢。
最后欢迎大家关于这个问题畅所欲言,有喜欢我的记得关注下哦,每天为大家分享与解答我的想法与见解哦。
单片机:
以TI的MSP430系列的单片机为例,网上有很多基于此单片机的开发板。
开发板有数码管显示、按键、串口、PS/2鼠标等接口。这些资源都是与单片机相连接。也就是通过单片机可以控制数码管的显示,读取按键输入值,与PC机串口通信,读取鼠标的输入。所编写的嵌入式软件做一些业务逻辑的处理。
DSP:
以TI的C6000系列DSP为例,除了可以提供一般的通用控制外,还可以提供专用的数字信号处理。TI的官网提供的设计资源截图如下:
从图中可以看出厂商所提供的“编解码器”、“DSP库”、“图像库”、“FFT库”、“DSP数学库”、“电信库”。这些涉及到大量的数学运算。两者对比:
A. 单片机与DSP都是处理器。
B. 两者都可以做数学运算,单片机主要是软件级别,而DSP则是硬件级别。所以DSP数学处理速度更快,能力更强。
C. 两者都可以集成通用的控制功能。单片机的控制功能更丰富。而DSP由于集成数学计算硬件,同等业务逻辑控制资源下,则价格更贵。
两者集成:
芯片厂商也会将DSP + 单片机集成在一起,使其发挥两者功能。如下图:
首先,我们抛开与本问关系不大的处理器外围接口(实际上现在不仅单片机,DSP往往也有非常丰富的外围借口,包括数据采集和通讯,GPIO),即把单片机当做通用处理器对待,来讨论两者的区别。
最主要的区别是:DSP为了提高信号处理运算(最典型的是多项式运算,比如进行FFT和FIR)的效率,专门设计了循环乘累加指令及其相应的硬件架构(如硬乘法单元,指令与数据分区寻址,等),这样一条指令就能完成普通处理器需要多条指令和很多机器周期才能做的运算。具体的DSP还有不同数据宽度和定点浮点之分。
从理论上讲,DSP和通用处理器之间并没有绝对不可逾越的功能区别,也即:DSP完全可以当做通用处理器使用,而如果要使通用处理器完成信号处理,则效率要低得多。比如,完成一次1024点的基4复数FFT,用DSP可能只需100微妙,而用相同位宽和相似主频的通用处理器,或许要耗时1毫秒乃至更长。所以,最好让它们各司其责吧。
请教单片机掉电后,如何快速的保存数据问题?
针对题主的问题,我想应该从以下几个方面入手:
尽量选用内部的flash来存储数据,内部flash的读写速度快,可靠性高。
如果用外置的flash或者是eeprom进行存储,flash一般是spi接口,考虑到电磁干扰,MCU的响应速度等问题,即使是采用MCU的硬件SPI模块进行通信,SPI的clock时钟最高也就1MHz左右,发送1个字节的数据大概需要10us,不考虑擦除flash的时间,存储100个字节的数据,如果考虑可靠性,需要读取验证,大概需要5ms左右的时间。
而eeprom一般采用IIC接口,与SPI接口类似,以高速IIC进行通信,存储100个字节的数据至少需要5ms左右的时候。
FLASH的特点是写数据只能由1改写为0,由0改写为1需要整个page,或者整个sector,或者整个block进行擦除。
以STM32F051为例,一个page为1kByte,一个block为64kByte,擦除一个page大概耗时约20ms,在整个擦除过程中,整个MCU是挂机的,也就是不执行任何操作。而FLASH的写操作比较快,大概1个Byte耗时1us。
需要有掉电检测电路,掉电检测需要通过检测给MCU供电的LDO或者DC-DC的前级电压。
比如MCU通过12V-3.3V的LDO供电,则需要通过检测12V的电压来判断是否断电。
将12V通过电阻分压之后,接入MCU的A/D检测口来判断是否掉电。
MCU供电的LDO或者DC-DC的前级并联足够的电容,以确保电容的供电能保证MCU将数据写入。
可以通过以下的步骤确认电容的大小:
评估由掉电时前级电压供电的工作电流大小,MCU一旦检测到掉电,需要切掉耗电大的输出,比如控制继电器输出的I/O口需要立即断开。比如20mA。
确认LDO的最低输入电压,比如5.3
确认判断掉电的电压,比如10V,确认掉电开始到LDO最低输入电压之间的压差,比如4.7V
确认写入所有数据所需要的时间,比如20ms。
根据公式计算所需电容的容量,C=IT/U=20mA20mS/4.7V=85uF。可选择100uF的电容。
MCU一旦检测到掉电,需要切掉耗电大的输出,比如控制继电器输出的I/O口需要立即断开。
在正常工作时,事先准备一块存储空间,将其擦除成为0xFF。
检测到掉电之后,可以不需要擦除FLASH内容,可以直接写入数据,可以节省大量的时间。
STM单片机编程是不是很难学?
不难学的,先把51学会,再学STM32,不然STM32的寄存器会把你搞晕的,STM32的寄存器要比51多好几倍,当然功能也比51要多得多,推荐看正点原子的《例说STM32》,带你入门很容易,后面就要看你自己了,师傅领进门。
51单片机的两种低功耗方式分别是?
单片机内部有一个电源管理寄存器PCON,这个寄存器的最低两位,IDL和PD这两位分别用来设定是否使单片机进入空闲模式和掉电模式。
1. 空闲模式
当单片机进入空闲模式时,除CPU处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。
让单片机进入空闲模式的目的通常是为了降低系统的功耗,举个很简单的例子,大家都用过数字万用表,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。以STC89系列单片机为例,当单片机正常工作时的功耗通常为4mA~7mA,进入空闲模式时其功耗降至2mA,当进入掉电模式时功耗可降至0.1μA以下。
2. 休眠模式
当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。
可将数字万用表调节到电流档,然后串接入电路中,观察单片机在正常工作模式、休眠模式、空闲模式下流过系统的总电流变化情况,经测试可发现结果如下:正常工作电流>空闲模式电流>休眠模式电流。
到此,以上就是小编对于单片机程序100例的问题就介绍到这了,希望介绍关于单片机程序100例的5点解答对大家有用。