查看: 2271|回复: 0

34..STM2F469I---基于SD卡的录音及WAV

[复制链接]
  • TA的每日心情
    难过
    2021-2-27 22:16
  • 签到天数: 1568 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2018-1-12 20:49:53 | 显示全部楼层 |阅读模式
    分享到:
    【STM32F469I试用】学习记录5.基于SD卡的录音及WAV【转】

    由于mini OTG口转U盘母座的线没有,一直没测试音频输入输出这块,内存卡倒是有,实在没有也可以拆手机的内存卡顶上。在官方Demo基础上把U盘存读替换为TF卡。学习下测试下录音和WAV音乐播放。先献给同我一样,缺少那根OTG 小口转母座线的同学。从此甩掉U盘和烦人线,以后播自己的MP3,录自己的音。


    1.jpg

    这是移植好SD驱动的DEMO例程,没 使用U盘播放。官方提供的音乐,播放起来音质还不错。
    板载的MIC输出数据是PDM(Pulse Density Modulated 脉冲密度调制)类型的,需要软件做数字高通低通滤波,输成16位的音频格式数据。需要用到库文件libPDMFilter_CM4_Keil.lib。

    2.jpg

    连续扑在上面研究的时间不多,挤牙膏一点点学习深入吧。
    先添加文件stm32469i_discovery_sd.c

    3.jpg

    新建组 fatfs/sd并添加文件

    4.jpg

    去除文件 usbh_diskio.c usbh_conf.c

    5.jpg

    6---.png

    找到stm32f4xx_it.c 文件注释函数 void OTG_FS_IRQHandler(void)。
    拷贝目录stm32cubef4\STM32Cube_FW_F4_V1.10.0\Projects\STM32469I-Discovery\Applications\FatFs\FatFs_uSD\Inc下的ffconf.h文件替换工程目录下的。
    打开文件 stm32fxx_hal_conf.h 文件 去除注释:#define HAL_SD_MODULE_ENABLED
      找到文件explorer.c 做如下修改
         //while(USBH_MSC_IsReady(&hUSBHost))
         while(1)
    在main.c中,
       添加头文件
          #include "stm32469i_discovery.h"
          #include "stm32469i_discovery_sd.h"

          /* FatFs includes component */
          #include "ff_gen_drv.h"
          #include "sd_diskio.h"
      注释: /* Init Host Library */
         //USBH_Init(&hUSBHost, USBH_UserProcess, 0);

         /* Add Supported Class */
         //USBH_RegisterClass(&hUSBHost, USBH_MSC_CLASS);

    /* Start Host Process */
         //USBH_Start(&hUSBHost);

          /* USB Host Background task */
       //USBH_Process(&hUSBHost);
    在SystemClock_Config中添加SD卡时钟初始化
       RCC_PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SDIO | RCC_PERIPHCLK_CK48;
      RCC_PeriphClkInitStruct.SdioClockSelection = RCC_SDIOCLKSOURCE_CK48;
      RCC_PeriphClkInitStruct.Clk48ClockSelection = RCC_CK48CLKSOURCE_PLLSAIP;
      RCC_PeriphClkInitStruct.PLLSAI.PLLSAIN = 384;
      RCC_PeriphClkInitStruct.PLLSAI.PLLSAIP = RCC_PLLSAIP_DIV8;
      HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphClkInitStruct);
    Main.c中定义全局变量  char SDPath[4];
    在AUDIO_InitApplication();后添加代码
         if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
            {
                    AppliState = APPLICATION_READY;
                    LCD_UsrLog("sd card is ready.\n");
            }
            else
            {
                    AppliState = APPLICATION_DISCONNECT;
                    LCD_UsrLog("sd card not ok.\n");
            }
    这个DEMO就此跑通了,以后分析MIC录音,音乐播放,MP3解码方面多了。

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 18:37 , Processed in 0.136183 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.