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

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

[复制链接]
哈斯去啊 提问时间: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. }
复制代码



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

举报

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

谢谢,已经搞定了

评分

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

查看全部评分

哈斯去啊 回答时间: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,,为什么啊
Billlix 回答时间:2023-5-2 15:46:13

Demo源代码哪里下载呢?谢谢。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版