stm32声控灯难点在哪里

stm32声控灯难点在哪里,第1张

您好:STM32声控灯的难点主要集中在以下几个方面:

1 声音信号的采集和处理。声控灯需要对周围环境中的声音信号进行采集和处理,以便对信号进行分析和判断。声音信号的采集需要使用麦克风等传感器,处理需要使用数字信号处理技术,对信号进行滤波、放大、采样等 *** 作,以提取出有用的信息。

2 声音分析算法的设计。声控灯需要对采集到的声音信号进行分析,以判断是否需要控制灯光的开关。声音分析算法需要根据实际情况进行设计,以提取出有效的信号特征,对信号进行分类和识别。

3 灯光控制的实现。声控灯需要根据声音信号的分析结果来控制灯光的开关。灯光控制需要使用PWM等技术,对灯光进行调光和调色,以满足用户的需求。

4 硬件和软件的兼容性。声控灯需要使用STM32芯片作为控制核心,需要兼容硬件和软件的环境,以便实现系统的稳定性和可靠性。

综上所述,STM32声控灯的难点主要集中在声音信号的采集和处理、声音分析算法的设计、灯光控制的实现以及硬件和软件的兼容性等方面,需要使用多种技术手段来解决。。。,

我猜,来到这个问题底下的我们,疑问估计都是相同的,那就是为什么HADDR[0]未接?一般不是都一对一连接的吗?怎么到了这里它就不能了呢?这越想越觉得这种接线方法太反常理了。。。对不对?

首先,CPU中一个地址只能存储一个字节的数据,而当CPU通过地址线访问外部存储器的一个地址时,如果外部储存器的一个地址的数据刚好是八位时(即一个字节),访问一次就可接收过来;但是,当外部存储器的一个地址里存的是16位数据时(即两个字节),CPU就开始傻眼了,“我访问你一次,你竟然给我两个字节的数据!!!”(如下图所示)

然后,CPU为了解决这个问题,只能够再派一个地址去访问外部存储器的同一个地址,把剩下的那个字节也接收过来,之后再接着访问外部存储器的第二个地址,依此类推。。。在此过程中,CPU如果还是把地址线一对一地连接到外部存储器上,那就做不到让自己的第二个地址还继续访问同一个地址了。。。

于是,人们帮了CPU一把,让它每一回访问时还是照旧把自己内部的地址按二进制拆分放到HADDR的0~25上(如下图)

然后,到了FSMC_A一端,人们选择性地去掉HADDR[0],然后才把把剩余的25根依次接到FSMC_A上(人们之所以这么做,正是因为他们发现了一个规律,那就是,通过HADDR[1]是0还是1却正好能够区别外部存储器上的0地址和1地址,而通过HADDR[2]和HADDR[1]是10还是11又正好能够区别外部存储器上的2地址和3地址。。。依此类推,下一个就是通过HADDR[3]HADDR[2]和HADDR[1]一起来判断)

最后,地址区分出来了,接收数据也就好说了,因为在CPU那边,它对人们把HADDR[0]不接到FSMC上是不知情的,所以,它还是照旧把地址逐次增一地去访问,也还是发出一个地址读回一个字节,但是它不知道的是,自己每发两个地址都会停留在外部存储器的同一个地址上,所以最终,同一个地址上的两个字节都会被CPU读走。。。

--------------------------分界线-------------------------------------

回答完毕,这里再提供一个相关内容的补充(首先,衷心感谢以下所有链接中每一位作者提供的“智慧闪光”以及见解),那就是ARM9中类似的问题(我估计大部分读者学完STM32这个之后可能会继续学习,所以此处一起给出),问题背景是:网页链接(譬如视频里16分钟开始的地方)以及网页链接,然后解决问题的思路可参阅(和本次问题有异曲同工之处,其实本题的思路也是来源于此):网页链接(这个作者括号中写的内容,我理解起来是没有太大问题的,所以我需要理解关键点即可,但是毕竟大家的知识储备不会都一样,所以如果你觉得理解上有困难,那我还推荐你可以去看一下内存相关:网页链接 ;如果时间有限,可直接看415C语言如何 *** 作内存这一集:网页链接),下图则是我自己的理解(实质上,这个图是理解ARM平台四字节对齐问题的关键,但看到这里,你也会发现,其实这个能困扰大部分人的难题它的原理和上面的原理并无二致):

=======补充(2018/11/11)=======

今日突然想起写这个回答的时候只是解决了这个问题的最关键又最重要的部分,如果比较细心的读者会发现,其实这个问题还存在着一个值得大家思索的小问题,细分来思考的话,就有了如下一些子问题:那就是HADDR的线数只有HADDR[0~25]吗?(其实不是的,而是有HADR[0~27]),那么另外这两根跑哪去了呢?还有就是为什么一定要HADDR[25]以下那么多根线呢?少用一些不行么(譬如只用8根、16根)?

(上述问题容易在手册以及百度上找到答案)我在这里只为了能够给大家提个醒、起个引子,就是希望大家在模仿学习、求知的过程中千万要警惕,别人的东西、拿来的东西始终不是自己的,自己需要极尽所能地进行内化,如果不去做反思,就会导致出现越学越多,反而越迷茫的现象。

=======补充(2023/03/28)=======

删除原回答中和问题无关的部分语句,关于内存数据在具体硬件上更真实的分布情况,可以继续学习uboot,启动起来之后用md命令就可以看到了(其实也并不一定要到这一步,因为继续往前学就自然而然接触到相关内容了),另外ubuntu上的hexdump出来的也可当参考,但是这个得到的数据分布是大端的。总而言之,继续往前学不要停就是了。。。

STM32F1的单片机内部自带12位的ADC处理器,如果12位已经满足了采样要求,那么不用另外接入ADC芯片(这类芯片一般很贵),可以外接的ADC芯片比如ads1256(24位)、AD7689(16位)。

ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。转换时最快为1us,当ADC的输入时钟超过14MHz 时其会损失一些精度。也就是说,可以牺牲采样速度来获取采样精度,也可以牺牲采样精度来获取采样速度,当然精度要满足任务要求。

时钟分频:ADC 时钟 ADC 接在APB2 上,APB2的时钟为72MHz,通过分频的方式给ADC 提供时钟,预分频主要有2、4、6、8 四种分频方式。比如,如果打算选择分频6,那么就是ADC采样时钟频率就是72MHz/6=12MHz

转换时间:转换时间TCONV = 采样时间+ 125 个周期(125个周期采集12位AD时间是固定的周期)

例如:当ADCCLK=14MHz和15周期的采样时间

TCONV = 15 + 125 = 14

周期=1μs

例如:当ADCCLK=14MHz 和15 周期的采样时间 TCONV = 15 + 125 = 14 周期 = 1μs

1)一般情况,如果是软件启动,那么转换时间即是采样周期。

2)若通过定时器进行触发启动ADC,则还需要加上定时器的相关时间。

采样周期:采样周期对于转换时间/采样时钟频率

STM32—ADC详解

STM32的ADC采样时间

以上就是关于stm32声控灯难点在哪里全部的内容,包括:stm32声控灯难点在哪里、STM32 FSMC HADDR和FSMC_A对应的问题、STM32 ADC详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9778202.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存