打印
[STM32F4]

【STM32F469I试用】学习记录5.基于SD卡的录音及WAV

[复制链接]
1829|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  由于mini OTG口转U盘母座的线没有,一直没测试音频输入输出这块,内存卡倒是有,实在没有也可以拆手机的内存卡顶上。在官方Demo基础上把U盘存读替换为TF卡。学习下测试下录音和WAV音乐播放。先献给同我一样,缺少那根OTG 小口转母座线的同学。从此甩掉U盘和烦人线,以后播自己的MP3,录自己的音。
基于官方DEMO修改,路径:stm32cubef4\STM32Cube_FW_F4_V1.10.0\Projects\STM32469I-Discovery\Applications\Audio
这是移植好SD驱动的DEMO例程,没 使用U盘播放。官方提供的音乐,播放起来音质还不错。
板载的MIC输出数据是PDMPulse Density Modulated 脉冲密度调制)类型的,需要软件做数字高通低通滤波,输成16位的音频格式数据。需要用到库文件libPDMFilter_CM4_Keil.lib。相关介绍在 AN3998PDM audio software decoding on STM32 microcontrollers
   
  连续扑在上面研究的时间不多,挤牙膏一点点学习深入吧。
先添加文件stm32469i_discovery_sd.c
  
   新建组 fatfs/sd并添加文件
  
  去除文件 usbh_diskio.c usbh_conf.c
  
  去除整个组文件
  去除整个组文件
  
   HAL驱动库中,添加库文件
  
   找到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解码方面多了。

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

131

帖子

3

粉丝