Mozzi  version v2.0
sound synthesis library for Arduino
Mozzi on STM32duino-based boards.

port by Thomas Friedrichsmeier

Note
Be sure to understand the info given at Mozzi on STM32-based boards - disambiguation . This page is about using Mozzi with the STM32duino core.

Port status and usage notes

Tested on a STM32F103C8T6 blue pill board as well as an STM32F411CE black pill board, i.e. on sboards without a real DAC. Compiles and runs, with a bunch of caveats (see below). Should probably run on any other board supported by the STM32duino core (although this theory is untested). When trying any other board, you probably want to check the platform specific settings (see below), carefully, importantly, whether the desired output resolution is achievable, and whether the desired output pins are PWM capable.

  • MOZZI_ANALOG_READ input implementation is somewhat experimental, and may not be able to service a whole lot of pins (contributions welcome)
  • MOZZI_AUDIO_INPUT is completely untested (but implemented in theory; feedback welcome!)
  • getAudioInput() and mozziAnalogRead() return values in the STM32's full ADC resolution (the exact range depending on the board in use) rather than AVR's 0-1023.
  • twi_nonblock is not ported

Output modes

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • MOZZI_OUTPUT_PWM
  • MOZZI_OUTPUT_PWM_2PIN

The default mode is MOZZI_OUTPUT_PWM .

Note
This port may look similar to, but uses a different default GPIO pinout than @hardware_stm32_maple !

MOZZI_OUTPUT_PWM

Standard pulse width modulated output to one (mono) or two (stereo, see MOZZI_AUDIO_CHANNELS) GPIO pins. Default pinout: PA8 (mono/left), PA9 (right channel in stereo). This mode uses two hardware timers: One for the PWM (Timer 3 when using the default pin configuration), and a second for updating the output at audio rate. The default audio resolution is 10 bits, which results in a carrier frequency of ~70kHz on a 72MHz CPU. On slower boards you will have to descrease this. The following settings may be costumized, if desired:

#define MOZZI_AUDIO_PIN_1 ... // Left / mono output pin. Default: PA8
#define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim, must not be the same of the timer for the above pin. Default TIM2
#define MOZZI_AUDIO_BITS ... // Output resolution in bits. Default is 10
// For stereo, only:
#define MOZZI_AUDIO_PIN_2 ... // Right channel output pin. This *must* be connected to the same hardware timer as MOZZI_AUDIO_PIN_1 ! Default: PA9

MOZZI_OUTPUT_PWM

This mode is very similar to MOZZI_OUTPUT_PWM, but splitting output for a single channel across two GPIO pins for better resolution. For details on the required hardware setup, and configuration tradeoffs, see MOZZI_OUTPUT_2PIN_PWM . Stereo output is not available in this mode. Output is at 2*7 bits at up to 560kHz carrier frequency (but limited to 5 times audio rate).

Customizable configuration options:

#define MOZZI_AUDIO_PIN_1 ... // High byte of the output. Default: PA8
#define MOZZI_AUDIO_PIN_1_LOW ... // Low byte of the output. Default: PA9
#define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim. Default TIM2
#define MOZZI_AUDIO_BITS_PER_CHANNEL ... // Bits per pin. Default is 7

MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

See External audio output . The (single) hardware timer claimed for MOZZI_OUTPUT_EXTERNAL_TIMED may be configured using "MOZZI_AUDIO_UPDATE_TIMER" (default: TIM2).