ARM Radio: A Cheap SDR built out of an ARM Processor and not much more

A software defined radio can theoretically be made out of little more than a microprocessor with an onboard ADC and some DSP code. This is exactly what Alberto di Bene (I2PHD) achieved by connecting an antenna directly to the on board 12-bit ADC on a STM32F429 Discovery board.

To make it actually work as an SDR he also wrote some code to utilize the development board’s ARM processor which processes the ADC input into a radio signal, demodulates it and then turns it into audio via the boards DAC and speaker. The radio can tune from 8 kHz up to about 900 kHz.

The only real extra hardware in Alberto’s system is a low pass filter for anti-aliasing and impedance transformation, and a reconstruction filter to get sound to the speakers from the DAC. He also used the boards LCD screen to implement a full GUI tuning system.

A PDF document detailing his work can be downloaded here.

ARM Radio and its GUI interface.
ARM Radio and its GUI interface.
The ARM Radio with the low pass filter and reconstruction filter shown.
The ARM Radio with the low pass filter and reconstruction filter shown.


  1. Walter

    Hello Raul,

    late answer, but anyway. Yes, I made the same experience. It is exactly this mixture making problems. It only works with the old 2015 versions STM32F4xx_DFP 2.4.0, Middleware and CMSIS 4.3.0. Unfortunately file stm32_hal_legacy.h is missing in 2.4.0. The legacy file must be version 1.3.0.


  2. Raul

    Ok, I have downloaded the zip file and ttested de binary file into STM32F429 Discovery Board. I found 15Hz offset deviation from oscillator, the I decide to correct this offsetand recompile entire project changing the paths project compiler settings according to pdf file. But it doesn’t compile. There are plenty errors, i.e macro redefinition conflitcs , some unrecognized symbols… etc etc. I tried to repeat many times with no success. I hace keil v5.18a with CMSIS 4.5.0 and STM32F4xx_DFP version 2.7.0 drivers.
    So I decide to analyce bit carefully the code and I found that the project has a mix of two Hardware Abstraction Layer versions, Iy you look at the folders in project, you will find for example stm32f4xx_hal_dma.c, h files and on the other part stm32f4xx_dma.c. Thats is a messy not recommended mixture of incompatible HAL versions that causes compiling conflicts. So, I have a question does anybody already face to this kind of problem? If yes, how resolve it?

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>