ARM have developed a range of optimized DSP functions for all of the Cortex MCU’s. I have found them a challenge to use in “baremetal” gcc based projects as they rely on a particular directory structure and certain compiler directives. The project linked below tackles these difficulties and implements a real-time Finite Impulse Response FIR low pass filter on an STM32F303 Nucleo board. The filter has a sample rate of 20kHz and a cut-off frequency of 1kHz. Initial evaluations indicate the filter performs well and further experimentation will definitely follow.
The output voltage at 500Hz is shown in yellow below (input signal is green trace).
The output voltage at 1kHz is shown in yellow below. The roll off is a little more than expected but this could be the result of truncating of coefficients.
Code and further explanatory documentation is available here:
http://eleceng.dit.ie/frank/arm/BareMetalSTM32F303Nucleo/fir/