cancel
Showing results for 
Search instead for 
Did you mean: 

Problem with pdm2pcm library in vs code

baator025
Associate III

Hi,
I am struggling to make PDM2PCM library work. My projects build without issues, but when I upload them to the board , program executes until it reaches PDM_Filter_setConfig function (tested with breakpoints). After that, it goes to infinite loop caused by watchdog.
I tried to integrate this library in a project with my own drivers and it was the first time I ran into this problem. To make things simple, I created an empty project to run the configuration only. The result was unfortunately the same.

I am using 32F411EDISCOVERY kit. I tested the lib using STM32Cube F4 1.28.0 and 1.26.2 packages. I am not using HAL.
Below you can find the code I used in the simpler project (it is basically code copied and pasted from the official docs).

 

 

#include <stdint.h>
#define STM32F411xE
#include "stm32f4xx.h"
#include "pdm2pcm_glo.h"


int main(void)
{
    RCC->AHB1ENR |= RCC_AHB1ENR_CRCEN;
    CRC->CR = CRC_CR_RESET;

    PDM_Filter_Handler_t PDM1_filter_handler;
    PDM_Filter_Config_t PDM1_filter_config;
    /* Initialize PDM Filter structure */
    PDM1_filter_handler.bit_order = PDM_FILTER_BIT_ORDER_LSB;
    PDM1_filter_handler.endianness = PDM_FILTER_ENDIANNESS_BE;
    PDM1_filter_handler.high_pass_tap = 2122358088;
    PDM1_filter_handler.out_ptr_channels = 1;
    PDM1_filter_handler.in_ptr_channels = 1;
    PDM_Filter_Init((PDM_Filter_Handler_t *)(&PDM1_filter_handler));
    PDM1_filter_config.output_samples_number = 16;
    PDM1_filter_config.mic_gain = 24;
    PDM1_filter_config.decimation_factor = PDM_FILTER_DEC_FACTOR_64;
    PDM_Filter_setConfig((PDM_Filter_Handler_t *)&PDM1_filter_handler,
    &PDM1_filter_config);
    /* Loop forever */
	for(;;);
}

 

CMake parts used for including the library to build system:

 

# Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
    ${include_DIRS}
    $<$<COMPILE_LANGUAGE:C>: ${include_c_DIRS}>
    $<$<COMPILE_LANGUAGE:CXX>: ${include_cxx_DIRS}>
    $<$<COMPILE_LANGUAGE:ASM>: ${include_asm_DIRS}>
    "${PROJECT_SOURCE_DIR}/Drivers/CMSIS/Include"
    "${PROJECT_SOURCE_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include"
    "${PROJECT_SOURCE_DIR}/Middlewares/ST/STM32_Audio/Addons/PDM/Inc"
)

# Add linked libraries
target_link_libraries(${CMAKE_PROJECT_NAME} ${link_LIBS}
"${PROJECT_SOURCE_DIR}/Middlewares/ST/STM32_Audio/Addons/PDM/Lib/libPDMFilter_CM4_GCC_wc32.a")

 

Rest of the CMake file is unchanged.

1 ACCEPTED SOLUTION

Accepted Solutions
tjaekel
Lead

Assuming you use the right PDM2PCM LIB for your processor - what could be a reason for HardFault_Handler called:

  • check, if you generate code with HW FPU
  • and verify that you enable the HW PFU (on startup):
    there is macro needed to be defined and during the startup is code in #ifdef which executes the steps to enable the HW FPU on MCU

Assuming PDM2PCM uses (needs) floating point operations, intended to be done via HW FPU, but if not FPU not enabled - it crashes (another user has similar thread in forum with crashing on float operations).

View solution in original post

2 REPLIES 2
tjaekel
Lead

Assuming you use the right PDM2PCM LIB for your processor - what could be a reason for HardFault_Handler called:

  • check, if you generate code with HW FPU
  • and verify that you enable the HW PFU (on startup):
    there is macro needed to be defined and during the startup is code in #ifdef which executes the steps to enable the HW FPU on MCU

Assuming PDM2PCM uses (needs) floating point operations, intended to be done via HW FPU, but if not FPU not enabled - it crashes (another user has similar thread in forum with crashing on float operations).

I've just seen that you responded here as well, sorry. :(

And you suggested the solution here as well. :D Could have fixed the issue eariler if I read notifications more carefully.

Thanks again!