ilovefengshulin

  • 2020-05-21
  • 发表了主题帖: 使用ST公司提供的MP3解码库

    硬件平台:STM32F746G-DISC 开发平台:KEIL_5.29 我这里不再介绍MP3文件的详细结构,只介绍如何使用MP3解码库,需要了解MP3文件信息可以参考这个网:https://www.cnblogs.com/ranson7zop/p/7655474.html 这个解码库可以从ST公司官网通过搜索关键词“x-cube-audio”下载。下载解压完后,进入到此路经下:STM32CubeExpansion_Audio_V1.1.1\Middlewares\ST\STM32_Audio\Codecs,可以看到有两个文件夹,如下图所示:    进入到解码库的目录下,会有3个文件夹,如下图所示:   进入lib文件夹下,会有3个解码库,分别对应不同的平台   我这里使用的是STM32F7,当然选用M7平台的lib文件。 接下来创建KEIL工程,先把SD卡驱动和音频芯片WM8994驱动调试好,然后将SpiritDSP_MP3_Dec文件夹复制到工程目录下,keil中添加lib文件,并设置include包含路经,那么MP3解码库就添加完成了。     接着说明一下MP3解码用到的函数,这些函数可以在spiritMP3Dec.h文件中找到。 1. void SpiritMP3DecoderInit( TSpiritMP3Decoder *pDecoder, fnSpiritMP3ReadCallback* pCallbackFn,                       fnSpiritMP3ProcessCallback *pProcessFn,                       void * token   ) 函数功能:初始化MP3解码器,每次解码完后,再重新解码新的MP3文件,就必须再次先调用这个函数,以完成MP3解码器的初始化。 参数: TSpiritMP3Decoder *pDecoder: 指向要初始化的解码器结构。所有解码器变量都存储在此结构中。 解码器不使用非恒定的静态或全局变量,因此所有函数都是可重入的。 fnSpiritMP3ReadCallback* pCallbackFn: 回调函数指针,解码器将使用此功能来检索输入的mp3数据。 fnSpiritMP3ProcessCallback *pProcessFn: 回调函数指针,解码器将使用此功能来解码Layer3文件时,处理MDCT系数。目前不需要用到此功能,设置为NULL。 void * token: 传递给回调函数的可选参数。 2. typedef unsigned int (fnSpiritMP3ReadCallback) ( void * pMP3CompressedData, unsigned int nMP3DataSizeInChars, void * token ) 函数功能:解码器使用它来读取MP3文件数据,必须实现此功能。 参数:   void * pMP3CompressedData: 存放读取的mp3数据。 unsigned int nMP3DataSizeInChars: 需要读取的MP3数据大小。 void * token : 回调函数的可选参数。 3. unsigned int SpiritMP3Decode ( TSpiritMP3Decoder *pDecoder,                               short *pPCMSamples,                    unsigned int nSamplesRequired,                TSpiritMP3Info * pMP3Info                  ); 函数功能:解码每一帧MP3数据,并将解码完后的数据存放在pPCMSamples中。如果此函数的返回值小于nSamplesRequired,则文件指针已到达MP3文件末尾,MP3文件解码完成,否者继续调用此函数解码。 参数: TSpiritMP3Decoder *pDecoder: 指向初始化的解码器结构。 short *pPCMSamples: 存放解码输出的PCM数据。 unsigned int nSamplesRequired: MP3文件每个音频帧的采样字节数 TSpiritMP3Info * pMP3Info: 解码完成后,存放当前音频帧的解码信息。其中TSpiritMP3Info结构体中的成员IsGoodStream,用来判断当前音频帧解码是否成功,解码成功为1,失败为0。         介绍下该解码库的使用流程,具体代码请参考我的程序。    

  • 2020-03-10
  • 回复了主题帖: TouchGFX多屏切换无过渡效果,求解?

    结贴,问题已解决。附加解决方法: 1.打开TouchGFXGeneratedHAL.CPP文件。 2.找到void TouchGFXGeneratedHAL::initialize()这个函数,里面有一个设置帧缓存器地址的函数setFrameBufferStartAddresses((void*)0xC0000000, (void*)0xC0119400, (void*)0),这个函数的第一个参数为帧缓存器第一个起始地址,第二个参数为帧缓存器第二个起始地址(我这里使用的是双缓存器,如果是但缓存器,可以设置为0),第三个参数为动画缓存器,默认为0(就是禁止动画效果),设置为其他值则开启动画效果,动画缓存器的大小和帧缓存器的大小一样,只要地址不和帧缓存器的地址重叠就行。

  • 2020-03-09
  • 发表了主题帖: TouchGFX多屏切换无过渡效果,求解?

    软件平台: 1.KEIL_5.29 2.TouchGFX_4.13 3. STM32CubeMX_5.50 硬件平台:STM32F746GDISC(屏幕已被我更换为800X480分辨率的屏幕) 问题描述:    使用STM32CubeMX配置并生成工程,然后通过TouchGFXDesigner设计两个screen,分别为screen1和screen2。工作流程是screen1显示后,等待2s,然后切换到screen2。就这么简单。在TouchGFXDesigner通过仿真后,可以看到screen1切换到screen2中间会有平滑过渡效果(附件有仿真程序,可以直接运行),但是通过MDK编译后,下载到板子时,screen1切换到screen2没有看到平滑过渡效果,是screen1显示完后,等待2s,直接跳到screen2(或许有过渡效果,只是切换速度太快,看不到而已吗?)。求解释?

  • 2019-12-26
  • 加入了学习《世健第四期》,观看 全新设计的8通道16位同步采样SAR ADC -- AD7606B

  • 2019-09-27
  • 发表了主题帖: 模拟串口红外发射

    很久没有在论坛发东西了,那就分享一个最近项目中用到的红外数据发送方法。该方案不适合红外数据编码为RC5、NEC的发送和接收,适用于纯数据发送和接收。       废话少说,红外发射和接收电路没有什么特殊的地方,红外发射和接收都是采用38K载波方式,接收采用VS1838B。VS1838B接收到38K载波信号时,IR_OUT会输出低电平,未接收到信号时,输出高电平。电路如下所示:  IR_IN要接到PWM信号输出引脚,IR_OUT要接到串口的接收引脚。既然使用串口接收红外信号,那么红外信号发送当然要使用串口发送啦。我这边使用的是IO口模拟串口方式,而这个IO口必须是PWM信号输出引脚。 接下来讲下红外信号发送原理,首先单片机硬件上需要具备两个定时器,其中一个必须带有PWM输出功能,配置成频率为38KHz,占空比50%的信号。既然使用串口发送,当然需要波特率,目前我使用的波特率为600,效果好;建议不要将波特率设置超过1200,不然传输距离会变短;波特率越低,传输距离越大。另外一个定时器用于精确延时,用于每个数据位的发送延时,T = 1000 / 波特率。不同的单片机特性不一样,因此T的值会有协偏差,微调下T值,会有更好的效果。 最后说下数据发送方法,我这边串口数据发送格式:使用8位数据位,1个停止位,无奇偶校验位,低位优先发送。当数据位为1时,不发送载波信号(关闭PWM信号输出);当数据位为0时,发送载波信号(开启PWM信号输出)。发送的信号经过VS1838B处理后就会得到高低电平信号,最后经串口解析出来。接收端有时会接收到一些乱码,我这边使用的双字节发送,第一个字节用于标识,第二个字节是数据,这样效果会比较好。还有一种数据发送方法:需要硬件串口,串口波特率设置不得高于1200;还需要一个定时器用于PWM信号输出,同样用于38K载波生成;还需要一个模拟开关芯片用于控制PWM信号输出。这样只要把数据往串口里填,就可以发送了。电路如下: 文章末尾有红外数据发送的代码,可以参考下。接收部分就不上传了,只要将串口设置成接收模式,波特率,数据位,停止位等跟发送端一致就可以了。好了,你们可以自己搞腾了,看看能不能DIY出新的功能。 此内容由EEWORLD论坛网友ilovefengshulin原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-09-22
  • 回复了主题帖: 新买的电脑打不开,求支招

    第一眼感觉像是美帝良心Y7000呢,不会是同一套磨具吧

  • 2019-09-16
  • 加入了学习《世健的 ADI 之路主题游第一站:工业自动化》,观看 ADI: 工业4.0 工业以太网与向时间敏感型网络的转型

  • 加入了学习《世健的 ADI 之路主题游第一站:工业自动化》,观看 世健介绍

  • 2019-08-28
  • 回复了主题帖: 三十而立---一穷二白,重新开始!!!

    楼主牛逼,我一个同学研发干久了也熬不住了,现在出来跑业务了,祝你你能前程似锦。话说这家底不是一般厚

  • 2019-08-04
  • 加入了学习《如何选择示波器》,观看 如何选择示波器

最近访客

< 1/3 >

统计信息

已有92人来访过

  • 芯币:1531
  • 好友:4
  • 主题:23
  • 回复:150
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


AllenFire 2018-5-15
ilovefengshulin: 我是做嵌入式底层的,像电脑主板设计我不会啊
谢谢你的回复,有认识的朋友做这一块吗?
AllenFire 2018-5-14
你好,很高兴认识你。我们是做防火墙电脑的,想找人设计研发主板,报酬私聊。 有兴趣吗?
AllenFire 2018-5-14
你好,很高兴认识你。我们是做防火墙电脑的,想找人设计研发主板,报酬私聊。 有兴趣吗?
nmg 2015-7-8
ilovefengshulin: 国内最近还没有铺货,等货到了,再给大家分享下,哈
你海淘啦?
nmg 2015-7-7
Hi,ilovefengshulin
你最近又进一步去了解STM32F7这个新板子了吗?有的话,来论坛分享哈
搜集到新的开发资料也可以来分享
查看全部