Skip to main content
Explorer
November 29, 2024
Solved

Problem with pdm2pcm library in vs code

  • November 29, 2024
  • 1 reply
  • 990 views

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.

    This topic has been closed for replies.
    Best answer by tjaekel

    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).

    1 reply

    tjaekelAnswer
    Visitor II
    January 3, 2025

    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).

    baator025Author
    Explorer
    January 10, 2025

    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!