你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于PDM转PCM数据存入内部flash问题

[复制链接]
55-366289 提问时间:2018-6-14 16:27 /
本帖最后由 55-366289 于 2018-6-14 16:30 编辑

本人萌新
用STM32F4DISCOVERY的示例程序修改存储方式为内部FLASH存储,现在读到的不对,是我的存储方式有问题吗?请大神指教:下面是录音过程和IIS中断采集程序。
  1. void WaveRecorder_kaishi(void)
  2. {
  3.         WaveRecorderInit(32000,16, 1); //录音初始化   32KHZ  16位数据  单通道
  4.   WaveCounter = 0;
  5.   LED_Toggle = 7;
  6.   num_shu=0;
  7.   
  8.   STMFLASH_CACHU(); //整片擦除的是地址0x0802 0000 - 0x0803 FFFF 和 0x0804 0000 - 0x0805 FFFF  两个扇区

  9.   /* Start the record 开始录音*/
  10.   WaveRecorderStart(RecBuf, PCM_OUT_SIZE);
  11.   
  12.   /* Reset the time base variable重置时间基变量 */
  13.   Time_Rec_Base = 0;
  14.   Switch = 0;
  15.      
  16.   while(1)
  17.   {
  18.     /* Wait for the recording time 等待录音时间 */  
  19.     if (num_shu*32 < 262144)
  20.     {
  21.       /* Wait for the data to be ready with PCM form 等待数据以PCM的形式准备好*/
  22.       while(Data_Status == 0);
  23.       Data_Status =0;
  24.       LED_Toggle = 3;        
  25.       if (Switch ==1)
  26.      {
  27.        pAudioRecBuf = RecBuf;
  28.        writebuffer = RecBuf1;
  29.        WaveCounter += 32;
  30.        Switch = 0;
  31.      }
  32.       else
  33.       {
  34.         pAudioRecBuf = RecBuf1;
  35.         writebuffer = RecBuf;
  36.         WaveCounter += 32;
  37.         Switch = 1;
  38.       }
  39.       
  40.       for (counter=0; counter<16; counter++)
  41.       {
  42.         LED_Toggle = 3;
  43.         if (buf_idx< RAM_BUFFER_SIZE)
  44.         {
  45.           /* Store Data in RAM buffer */
  46.           RAM_Buf[buf_idx++]= *(writebuffer + counter);
  47.           if (buf_idx1 == RAM_BUFFER_SIZE)
  48.           {
  49.             buf_idx1 = 0;
  50.             /* Write the stored data in the RAm to the USB Key 将存储的数据写入到USB密匙中 */
  51.             STMFLASH_Write(0x08020000+(num_shu*32),(uint32_t*)RAM_Buf1,RAM_BUFFER_SIZE/2);
  52.           }
  53.         }
  54.         else if (buf_idx1< RAM_BUFFER_SIZE)
  55.         {
  56.           /* Store Data in RAM buffer 在RAM缓冲器中存储数据 */
  57.           RAM_Buf1[buf_idx1++]= *(writebuffer + counter);
  58.           if (buf_idx == RAM_BUFFER_SIZE)
  59.           {
  60.             buf_idx = 0;
  61.             /* Write the stored data in the RAM to the USB Key */
  62.             STMFLASH_Write(0x08020000+(num_shu*32),(uint32_t*)RAM_Buf,RAM_BUFFER_SIZE/2);
  63.           }
  64.         }
  65.       }  
  66.                         
  67.     }
  68.     else /* End of Recording time 记录结束时间  */
  69.     {
  70.       WaveRecorderStop();
  71.       LED_Toggle = 4;
  72.       luyin = 2;
  73.       Data_Status =0;
  74.           AUDIO_SZE=262144;
  75.       break;
  76.     }
  77.   }
  78.   
  79.   
  80.   void AUDIO_REC_SPI_IRQHANDLER(void)
  81. {  
  82.    u16 volume;
  83.    u16 app;

  84.   /* Check if data are available in SPI Data register 检查SPI数据寄存器中的数据是否可用 */
  85.   if (SPI_GetITStatus(SPI2, SPI_I2S_IT_RXNE) != RESET)
  86.   {
  87.     app = SPI_I2S_ReceiveData(SPI2);
  88.     InternalBuffer[InternalBufferSize++] = HTONS(app);
  89.    
  90.     /* Check to prevent overflow condition 检查防止溢出条件 */
  91.     if (InternalBufferSize >= INTERNAL_BUFF_SIZE)
  92.     {
  93.       InternalBufferSize = 0;
  94.      
  95.       volume = 50;
  96.       
  97.       PDM_Filter_64_LSB((uint8_t *)InternalBuffer, (uint16_t *)pAudioRecBuf, volume , (PDMFilter_InitStruct *)&Filter);
  98.       Data_Status = 1;    //代表PDM转PCM转换完毕  
  99.           num_shu++;               
  100.     }
  101.   }
  102. }
复制代码



收藏 评论6 发布时间:2018-6-14 16:27

举报

6个回答
feixiang20 回答时间:2018-6-15 00:50:29
要么去参考下资料【声音采集播放及IIS接口介绍】【STM32F407 PDM转PCM问题】
55-366289 回答时间:2018-6-15 12:19:32
feixiang20 发表于 2018-6-15 00:50
要么去参考下资料【声音采集播放及IIS接口介绍】【STM32F407 PDM转PCM问题】

谢谢,已经搞定了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励,可以分享下问题原因啊.

查看全部评分

55-366289 回答时间:2018-6-21 17:26:38
其实我直接用的示例源码,只是把存储方式改为内部FLASH存储,PDM转为PCM后存储在16字节的一个缓存里面,我套用源码的双缓存存储,反倒因为数据缓存大,存入内部FLASH用时稍长,导致录音中有哒哒卡顿声。直接存储pAudioRecBuf得到很好地音质了
lyh1040754007 回答时间:2018-10-30 19:42:24
55-366289 发表于 2018-6-21 17:26
其实我直接用的示例源码,只是把存储方式改为内部FLASH存储,PDM转为PCM后存储在16字节的一个缓存里面,我 ...

我也在做这个,用单片机读到MIC的数据一直为0x00;你的源码在哪里下载的,我一直没找到,,能分享一下吗?QQ2629286552  拜托了
lyh1040754007 回答时间:2018-11-12 08:39:21
我调用的函数,InternalBuffer的数据一直有变化,pAudioRecBuf的数值一直不变化,调用的库直接用可以吗?
lyh1040754007 回答时间:2018-11-12 08:41:40
我看里程里面用的MIC读取数据的频率至少1mhz以上,,但是历程WaveRecorderInit(32000,16, 1);读取MIC数据的时候只有32kz,,为什么啊

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版