Library to handle the X-NUCLEO-CCA02M1 MEMS Microphones Expansion Board.

Dependencies:   ST_I2S ST_FREQUENCY_DIVIDER USBDEVICE

Dependents:   HelloWorld_CCA02M1 HelloWorld_CCA02M1_mbedOS HelloWorld_CCA02M1 Karaoke_CCA01M1_CCA02M1_mbedOS

Fork of X_NUCLEO_CCA02M1 by ST Expansion SW Team

MEMS Microphones Library

Library to handle the X-NUCLEO-CCA02M1 MEMS Microphones Expansion Board. A single board allows to record a standard 2-channel stereo signal as an array of PCM samples (16 bit/sample); in principle, it could make use of six additional MEMS microphones to realize a 8-channel audio system.


Microphones configuration

Currently the configurations supported are the following:

  • Stereo@48KHz
  • Stereo@44.1KHz (CD audio quality)
  • Stereo@32KHz
  • Stereo@16KHz
  • Stereo@8KHz
  • Mono@48KHz
  • Mono@44.1KHz
  • Mono@32KHz
  • Mono@16KHz
  • Mono@8KHz

Mono configurations need a Jumper connecting PB_5 and PB_13 on the Morpho connector to properly work.


Platform compatibility

  • This board can be currently used with the Nucleo F4 Family only, please see the ST_I2S library compatibility for further information.
  • The library is compatible both with mbed OS 5.x and mbed classic 2.x (to work with mbed classic, the main application has to import the "events" library, which is not included into the "mbed" library).


I2S Peripheral Usage

By default this board makes use of the I2S peripheral available on Nucleo boards.


Acquiring through the USB

In order to acquire the recorded PCM audio channel with an audio SW on a PC, please connect the expansion board to a USB port of the PC, and the Nucleo board to a USB power supply.

Committer:
davide.aliprandi@st.com
Date:
Fri Apr 21 10:33:08 2017 +0200
Revision:
2:9f389fd8fb2e
Parent:
0:d5552d432108
Aligned to ARM mbed codinmg style; OpenPDM2PCM middleware added.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davide.aliprandi@st.com 0:d5552d432108 1 /**
davide.aliprandi@st.com 0:d5552d432108 2 ******************************************************************************
davide.aliprandi@st.com 0:d5552d432108 3 * @file pdm_filter.h
davide.aliprandi@st.com 0:d5552d432108 4 * @author MCD Application Team
davide.aliprandi@st.com 0:d5552d432108 5 * @version V2.0.1
davide.aliprandi@st.com 0:d5552d432108 6 * @date 17-December-2013
davide.aliprandi@st.com 0:d5552d432108 7 * @brief Header file for PDM audio software decoding Library.
davide.aliprandi@st.com 0:d5552d432108 8 * This Library is used to decode and reconstruct the audio signal
davide.aliprandi@st.com 0:d5552d432108 9 * produced by ST MEMS microphone (MP45Dxxx, MP34Dxxx).
davide.aliprandi@st.com 0:d5552d432108 10 * For more details about this Library, please refer to document
davide.aliprandi@st.com 0:d5552d432108 11 * "PDM audio software decoding on STM32 microcontrollers (AN3998)".
davide.aliprandi@st.com 0:d5552d432108 12 ******************************************************************************
davide.aliprandi@st.com 0:d5552d432108 13 * @attention
davide.aliprandi@st.com 0:d5552d432108 14 *
davide.aliprandi@st.com 0:d5552d432108 15 * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
davide.aliprandi@st.com 0:d5552d432108 16 *
davide.aliprandi@st.com 0:d5552d432108 17 * Licensed under MCD-ST Image SW License Agreement V2, (the "License");
davide.aliprandi@st.com 0:d5552d432108 18 * You may not use this file except in compliance with the License.
davide.aliprandi@st.com 0:d5552d432108 19 * You may obtain a copy of the License at:
davide.aliprandi@st.com 0:d5552d432108 20 *
davide.aliprandi@st.com 0:d5552d432108 21 * http://www.st.com/software_license_agreement_image_v2
davide.aliprandi@st.com 0:d5552d432108 22 *
davide.aliprandi@st.com 0:d5552d432108 23 * Unless required by applicable law or agreed to in writing, software
davide.aliprandi@st.com 0:d5552d432108 24 * distributed under the License is distributed on an "AS IS" BASIS,
davide.aliprandi@st.com 0:d5552d432108 25 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
davide.aliprandi@st.com 0:d5552d432108 26 * See the License for the specific language governing permissions and
davide.aliprandi@st.com 0:d5552d432108 27 * limitations under the License.
davide.aliprandi@st.com 0:d5552d432108 28 *
davide.aliprandi@st.com 0:d5552d432108 29 ******************************************************************************
davide.aliprandi@st.com 0:d5552d432108 30 */
davide.aliprandi@st.com 0:d5552d432108 31
davide.aliprandi@st.com 0:d5552d432108 32 /* Define to prevent recursive inclusion -------------------------------------*/
davide.aliprandi@st.com 0:d5552d432108 33 #ifndef __PDM_FILTER_H
davide.aliprandi@st.com 0:d5552d432108 34 #define __PDM_FILTER_H
davide.aliprandi@st.com 0:d5552d432108 35
davide.aliprandi@st.com 0:d5552d432108 36 #ifdef __cplusplus
davide.aliprandi@st.com 2:9f389fd8fb2e 37 extern "C" {
davide.aliprandi@st.com 0:d5552d432108 38 #endif
davide.aliprandi@st.com 0:d5552d432108 39
davide.aliprandi@st.com 2:9f389fd8fb2e 40
davide.aliprandi@st.com 0:d5552d432108 41 /* Includes ------------------------------------------------------------------*/
davide.aliprandi@st.com 0:d5552d432108 42 #include <stdint.h>
davide.aliprandi@st.com 0:d5552d432108 43
davide.aliprandi@st.com 0:d5552d432108 44
davide.aliprandi@st.com 0:d5552d432108 45 /* Exported types ------------------------------------------------------------*/
davide.aliprandi@st.com 0:d5552d432108 46 typedef struct {
davide.aliprandi@st.com 0:d5552d432108 47 uint16_t Fs;
davide.aliprandi@st.com 0:d5552d432108 48 float LP_HZ;
davide.aliprandi@st.com 0:d5552d432108 49 float HP_HZ;
davide.aliprandi@st.com 0:d5552d432108 50 uint16_t In_MicChannels;
davide.aliprandi@st.com 0:d5552d432108 51 uint16_t Out_MicChannels;
davide.aliprandi@st.com 0:d5552d432108 52 char InternalFilter[34];
davide.aliprandi@st.com 0:d5552d432108 53 } PDMFilter_InitStruct;
davide.aliprandi@st.com 0:d5552d432108 54
davide.aliprandi@st.com 0:d5552d432108 55 /* Exported constants --------------------------------------------------------*/
davide.aliprandi@st.com 0:d5552d432108 56 /* Exported macros -----------------------------------------------------------*/
davide.aliprandi@st.com 0:d5552d432108 57 #define HTONS(A) ((((uint16_t)(A) & 0xff00) >> 8) | \
davide.aliprandi@st.com 0:d5552d432108 58 (((uint16_t)(A) & 0x00ff) << 8))
davide.aliprandi@st.com 0:d5552d432108 59
davide.aliprandi@st.com 0:d5552d432108 60 /* Exported functions ------------------------------------------------------- */
davide.aliprandi@st.com 0:d5552d432108 61 void PDM_Filter_Init(PDMFilter_InitStruct * Filter);
davide.aliprandi@st.com 0:d5552d432108 62 int32_t PDM_Filter_64_MSB(uint8_t* data, uint16_t* dataOut, uint16_t MicGain, PDMFilter_InitStruct * Filter);
davide.aliprandi@st.com 0:d5552d432108 63 int32_t PDM_Filter_80_MSB(uint8_t* data, uint16_t* dataOut, uint16_t MicGain, PDMFilter_InitStruct * Filter);
davide.aliprandi@st.com 0:d5552d432108 64 int32_t PDM_Filter_128_MSB(uint8_t* data, uint16_t* dataOut, uint16_t MicGain, PDMFilter_InitStruct * Filter);
davide.aliprandi@st.com 0:d5552d432108 65 int32_t PDM_Filter_64_LSB(uint8_t* data, uint16_t* dataOut, uint16_t MicGain, PDMFilter_InitStruct * Filter);
davide.aliprandi@st.com 0:d5552d432108 66 int32_t PDM_Filter_80_LSB(uint8_t* data, uint16_t* dataOut, uint16_t MicGain, PDMFilter_InitStruct * Filter);
davide.aliprandi@st.com 0:d5552d432108 67 int32_t PDM_Filter_128_LSB(uint8_t* data, uint16_t* dataOut, uint16_t MicGain, PDMFilter_InitStruct * Filter);
davide.aliprandi@st.com 0:d5552d432108 68
davide.aliprandi@st.com 0:d5552d432108 69 #ifdef __cplusplus
davide.aliprandi@st.com 0:d5552d432108 70 }
davide.aliprandi@st.com 0:d5552d432108 71 #endif
davide.aliprandi@st.com 0:d5552d432108 72
davide.aliprandi@st.com 0:d5552d432108 73 #endif /* __PDM_FILTER_H */
davide.aliprandi@st.com 0:d5552d432108 74
davide.aliprandi@st.com 0:d5552d432108 75 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
davide.aliprandi@st.com 0:d5552d432108 76