‘壹’ 同一个项目分别用stm32和51单片机会有什么不同
李工的经验,有如下几点不同,希望你供你参考。
1.51是8位单片机,而stm32是32位单片机。时钟方面stm32运行频率更高,性能更好。两种单片机性能差别比较大。
2.片上资源不一样。简单讲stm32单片机外设丰富,比如串口,I2c等。stm32单片机片上flash和RAM更大。以后升级功能,改进功能的空间大。如果考虑以后功能升级,建议考虑stm32.
3.成本上应该是51单片机要便宜一些。
4.stm32单片机开发资料和参考程序比较多,有库函数,应用起来方便。51单片机更多直接操作寄存器,开发不方便。
我是北漂李工,一个北漂8年的程序员。
在项目开发过程中,我们经常会遇到需要单片机选型,所以我们常常会根据项目功能需求来选择合适的单片机品牌和型号。常见的51内核单片机和STM32单片机也会是我们主要考虑的型号。
STM32与51单片机的参数差异 STM32与51单片机软件开发难度差异
STM32使用寄存器比51单片机要多很多,其配置比51复杂,而且中断逻辑,时钟配置使能控制等很多概念都是51单片机中所没有的,再加上stm32很多功能如USB,FSMC。等等功能,其功能更加强大,虽然官方提供了开发固件库和相关开发辅助工具,但很多时候,遇到bug调试难度也加大了很多。
stm32固件库很多实用结构体和指针变量,很多在51单片机开发过程不太注重结构体与指针的使用,那么在STM32开发过程中,就难以理解其固件库的运用逻辑。
STM32与51单片机的性价比差异
STM32比51处理速度快,外设功能丰富强大,所以价格普遍比51单片机偏贵,在项目选型过程中,需要根据项目功能需求,选择合适的单片机,如果是51单片机能用,那么考虑项目成本,肯定是不能选择STM32,如果51单片机不能用,即使再便宜,也用不了。
总之, 作为单片机开发工程师,需要能够进行一定的器件选型能力,这个也是必备的专业技能。
搞多了开发,你会发现其实用什么真的不重要,只要你会用就行。单片机好比一个精密机床,你要想加工一件作品,你用任何品牌的机床都可以,关键点是这个机床你会不会用,了解通透程度如何。不同品牌机床操作方法肯定大同小异,不会差别很多,你会用一种,另外一种不用看手册,也能猜出个七八分。机床这样,编程也是这样,给你个51,你应该能控制全世界。
首先如果同一个项目可以用51和STM32同时开发,就不建议使用STM32了,51成本更低。
STM32和51单片机不同点有很多:
1.开发方式不同
51单片机一般是直接操作寄存器,STM32主要操作库函数编程
2.系统资源不同
一般而言STM32资源要比51单片机更多
3.开发环境可能不同
51和STM32一般来讲都可以在Keil下开发,但STM32有更多中选择,可以在Linux下面开发,windows Esplise下开发,甚至直接用VSCode + 插件方式开发。
4.操作系统区别
一般而言,51单片机不支持操作系统,STM32支持各种主流操作系统,STM32开发起来更容易,可以很方便的利用系统实现各种场景下的应用,51单片机由于没有操作系统,开发起来有一定阻碍,甚至有时候必须要做出部分功能的牺牲才能达到整体功能的和谐运行。
5.后期维护方式可能不同
STM32资源足够多,可以写一个bootloader程序来完成之后的系统升级工作,不需要拆机就可以完成固件的升级,而51单片机则不可以。
STM32系列单片机分为CORTEX M0,M1,M4内核,个人觉得STM32F0系列的从性价比,功能上可以完全替代51单片机,而且性能更好。当然也可以使用51,价格更便宜一些,,但是要做功能复杂一些的产品,51系列的单片机是不能满足的,比如驱动RGB 屏,至少要用STM32F429,支持LTDC接口,而且需要外扩内存,支持FMC接口,比如要做数字音频,要支持I2S ,比如要做USB传输,要支持USB ,要移植操作系统,文件系统等等,要看CPU 的资源等等,总之,要根据所做的项目看CPU的资源是否满足要求是非常重要的,这要再设计前期靠考虑周到,否则,项目做到一半发现资源不够,需要重来是很郁闷的事情。
做产品要考虑成本,几毛钱就能搞定的,没必要几块甚至几十块。一般来讲,价格越贵的,资源越多,使用起来越简单,随心所欲。简而言之,价格越低,资源越少的单片机,完成项目的难度越大,需要优化代码和算法。
在stm32之前是8051的天下,silabs的c8051f外设相当的强大。硬件不错,可惜代码不够多。atmel的代码比较多,可惜芯片不够强大。
stm32一出,横扫天下,要硬件有硬件,要软件有软件,价格便宜量又足,连低端产品都用他。
电动自行车控制器都用它,无刷电机都用它。
stm32是史上最广泛使用的单片机。
只要资源够用,都可以,20年前我用8051,现在用stm32。stm32方便些,可以在线调试。我现在开发东西复杂一点的,用stm32 1系列和4系列。简单一点的用stm8s一块多钱的样子。
我觉得你的问题对比对象不太对,一般能用51的项目用stm8或者avr即可。一般来说stm32比51强太多了,无论是性能和价格都没有可比性。
所以在我看来开发上没有什么太大不同,无非就是开发环境不一样,如果代码规范的话很容易进行互相移植(最近芯片涨价严重,我们公司正在换国产),而所谓的外设(uart iic spi等等)其实没有太大区别。
但是在生产上差别就出来了,主要在于交货能力,一般而言同为一级代理采购物料,st的交货能力要比stc的强(当然最近行情st也不行了,交期干到了9月份)。所以如果你的产品是主力长期货,建议选择交货能力强的。
我就记得51单片机放不了几个变量就超出了。复杂点的程序都很难写。
‘贰’ 如何用I2S来实现ARM单片机通讯,解决方案
STM32F4本身都 带有I2S接口,可以方便地与某些音频解码芯片进行连接,正点原子的STM32F4教程上有这方面的知识
‘叁’ 音控的电路及原理知识
1、主机音控的N种方式
A、数字控制的模拟音频处理(比如常见的TDA7418/TDA7419-7313-2313等等),一般都是输入模拟信号,有I2C控制,输出也是模拟信号,输出到功放模块。
B、DSP的汽车音响运用大大的方便了原车主机的设计和使用,它一般都可以接受 I2S,SPDIF,模拟音频输入,也可以输出I2S和模拟信号,更重要的是可以把目标车种的环境因素,比如,车内的EQ参数,反射因素和吸音因素等被厂家固化在DSP里,这样话一个主板只需要固化不同的相关参数就可以适用于其他车型,喜欢动手拆机的朋友一定能发现很多主机用了同一块主板,厂家能轻而易举的写入不同的程序就可以适于用不同的车型,输出模拟信号是可以在I/V变换处接RCA输出,当然它的I/V变换有无源的和有源的,不用讨论,有源的声音要好很多,且底噪也低很多。
C、如果DSP输出的I2S数码信号的话,那必须得加装I2S解码电路来获得高品质的输出信号,但这种较少见,音响低配的雷克萨斯的先锋功放就属于这种。
2、这类模拟功放块有几种控制方式的
A、ST-BY+MUTE的,比如常见的TDA738X系列等,常见于国产导航和常规车机,这种可以加音质较好的高转低来获取低电平的信号,失真在10%上下。
B、由高低电位产生ST-BY+MUTE控制的,比如TDA8751T.7009AR等,美规车最常见啦,比如福特的翼虎原车主机,这种可以加音质较好的高转低来获取低电平的信号,失真在10%上下。
C、由I2C总线控制在功放块内部形成的ST-BY+MUTE的功放块,比如常见的TDA7561,TDA7562,TDA7563,TDA7564,TDA7566,TB2913等等,常见于欧洲车系的主机和导航,比如RCD510等,这种可以加音质较好的高转低来获取低电平的信号,失真在10%上下。
D、有ST-BY+MUTE控制的,模拟输入,数字功放输出的,比如常见的TAS5414等,一般都是欧美车系使用,但不多,比如福特的猛禽F150的数字分离功放和标志的SUV的cd-45,这种是不可以使用高转低来获取低电平的信号的,强行使用高转低或是高电平输入的DSP,失真远大于30%以上,已经超越人们能承受的失真极限。
E、由I2C总线控制在功放块内部形成的ST-BY+MUTE的功放,且输入不是常规的模拟信号,而是经由处理过的I2S数字信号,当然功率输出也是数字功放,常见于雷克萨斯的音响,先锋生产的纯数字功放,具体型号是意法生产的FDA4100,这种是不可以使用高转低来获取低电平的.信号的,强行使用高转低或是高电平输入的DSP,失真远大于30%以上,已经超越人们能承受的失真极限。
在这里的数字功放失真是指在无原配负载的情况下强行加上高转低时的失真大于30%分离式的功放,另外有的音响使用了分离式的功放,它们的功率输出由上面介绍的A,B,C,D,E等几种方式,他们的音控也有上述的几种方式,但是有的DSP支持dts2.0,dts5.1,AC-3等多通道解码,比如13代顶配皇冠导航版,当然也有例外的,比如本田车的原车配来的分离式功放,都是主机处理好了的平衡信号输出给功放部分,仅仅是负责放大和功率输出而已,其实这个可以在功放之前截取平衡信号给有平衡信号输入的功放,那个声音效果的表现一定一流。也可以单端使用,但是可能会有一点的噪音出现,但那也可以这样使用。
在以上A,B,C的各种功率输出情况下,在外围升级一般情况下只能使用高转低,这是一个折中的不得已而存在的设备,在实际使用中被大量使用。
‘肆’ 声音进入麦克风后,出来的声音是什么格式 I2S总线什么作用I2S格式指的是什么格式MP3、wav又是什么
这是要干什么啊。。
声音进入麦克风,先变成了电流:模拟信号。然后经过话筒放大电路,此时仍然是模拟信号,模拟信号没格式,是随着声音变化的电流。
模拟信号进入声卡的AD芯片,做模拟——数字转换,最后经过编码,编码出的是PCM格式,最原始的音频格式,未压缩的文件。
I2S总线是编码芯片、解码芯片和数字发射、接收芯片当中使用到的,是飞利浦推出的一种在解码(编码)芯片和接收(发射)进行数字传输的一种格式,分为三条线路,一条数据线路,一条时钟线路,一条同步线路。
MP3是MPEG(活动影像压缩小组)推出的一种有损音频压缩格式,利用舍去人们对一些声音细节不敏感的方式,使得文件的体积大幅减小。WAV就是声卡原始编码的PCM格式文件,属于无损未压缩文件,效果最好。
声音进入麦克风——进入声卡——模拟数字转换——数字信号——(如果利用软件处理,此时做DSP处理,没有则略去此步)——数字模拟转换——模拟信号——放大器——扬声器还原成人耳能听到的振动。
‘伍’ pic 哪款单片机支持I2S总线通信的
应该反着问“pic哪款不支持I2C”
除了早期16FXX系列不支持外,其他几乎都支持,有单独的I2C接口,另外I2C总线很简单,可以自己编一段用普通IO调用。
‘陆’ 单片机如何控制立体声音频编解码器芯片
音频编解码芯片的通信标准是I2S总线,如果单片机上有这个总线接口,直接对接这个接口,然后按单片机相应控制程序编写I2S总线的代码。
如果单片机没有这个接口,可以用IO口模拟这个总线,这样做程序复杂一些。
‘柒’ 请教一个i2s的问题,我在使用STM32,型号为STM32F103VCT6,该型号单片机为大容量单片机。
就是MCK,提供时钟信号的,在ZET6上用过,貌似用的是pc6
‘捌’ 有人用SPI模拟I2S成功的吗
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); 姐姐,您里面是获取SPI1的TXE标志位,而您是对SPI2做的初始化。。。后面有向SPI2发数据。。。SPI1根本就没初始化过,所以TXE状态位为0初始态
‘玖’ 请教STM32的I2S的初始化问题
你是不是勾选了not generate init code 啊,如果你用的是hal库初始化名应该是MX_I2S3_Init
‘拾’ xmos的i2s 是用gpio模拟出来的吗
是的,XMOS的外设如i2s等时序就像FPGA使用时钟来产生相应的时序.大家都习惯把ARM的外设为硬外设,类似FPGA和XMOS的外设都是称为软IP。软IP的好处就是可以通过编程去改成想要的外设定义。木瓜电子有些文章是介绍XMOS的外设信息,您看一下。