AN3126 Application Note: Audio and Waveform Generation Using The DAC in STM32 Products
AN3126 Application Note: Audio and Waveform Generation Using The DAC in STM32 Products
Application note
Audio and waveform generation using the DAC
in STM32 products
Introduction
This application note provides some examples for generating audio waveforms using the
Digital to Analog Converter (DAC) peripheral embedded in STM32 products (seeTable 1).
A digital to analog converter (DAC) is a device with a function opposite to that of an analog
to digital converter, i.e. it converts a digital word to a corresponding analog voltage.
The STM32 DAC module is a 12-bit word converter, with up to three output channels to
support audio functions.
The DAC can be used in many audio applications such as security alarms, Bluetooth®
headsets, talking toys, answering machines, man-machine interfaces, and low-cost music
players.
The STM32 DAC can also be used for many other purposes, such as analog waveform
generation and control engineering.
This application note is organized in two main sections:
Section 1 describes the main features of the STM32 DAC module.
Section 2 presents two examples.
– In the first example, the DAC is used to generate a sine waveform
– In the second example, the DAC is used to generate audio from .WAV files
Contents
2 Application examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1 Using the DAC to generate a sine waveform . . . . . . . . . . . . . . . . . . . . . . 14
2.1.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.2 Waveform preparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.3 Setting the sine wave frequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Using the DAC to implement an audio player . . . . . . . . . . . . . . . . . . . . . 17
2.2.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.2 Audio wave file specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.3 .WAV file format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3 Audio wave player implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4 Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
List of tables
List of figures
1.1 Overview
STM32 products, based on Arm®(a) Cortex® cores, integrate DACs with different
configurations and features:
one to three output channels
noise waveform generation
triangular waveform generation
DMA under run flag
dedicated analog clock
For the different DAC configurations refer to the product datasheets and to reference
manuals. Additional info can be found in AN4566 “Extending the DAC performance of
STM32 microcontrollers”. All these documents are available on www.st.com.
a. Arm is a registered trademark of Arm Limited (or its subsidiaries) in the US and/or elsewhere.
ai18300
The analog output voltage on each DAC channel output is determined by the equation
DACOutput = VREF x DOR / 4096
TSELx[2:0] bits
TIM6_TRGO
TIM7_TRGO
TIM3_TRGO
TIM2_TRGO
TIM4_TRGO
TIM15_TRGO DAC Channel_x Trigger
SWTRIGx
EXTI_9
MS37395V1
CPU
RAM
(Pattern Table 1)
(Pattern Table 2)
DAC
DAC Triggers Channel 1 Channel 2
Output Output
ai18302
When using the DMA, the overall performance of the system is increased by freeing up the
CPU. This is because data is moved from memory to DAC by DMA, without need for any
action by the CPU. This keeps CPU resources available for other operations.
CPU
RAM DMA
(Pattern Table 1)
(Pattern Table 2)
DAC
DAC Triggers Channel 1 Channel 2
Output Output
ai18303
1.7.1 Definition
The STM32 DACs feature a pseudo random code generator, sketched in Figure 5.
Depending on what taps are used on the shift register, a sequence of up to 2n-1 numbers
can be generated before the sequence repeats.
x12 x6 x4 x x0
11 10 9 8 7 6 5 4 3 2 1 0
12
MS37396V1
The noise produced by this generator has a flat spectral distribution and can be considered
white noise. However, instead of having a Gaussian output characteristics, it is uniformly
distributed, see Figure 6.
The offset (or DC bias) of the noise waveform is programmable. By varying this offset with a
preconfigured table of offsets (signal pattern), the user can obtain a waveform that
corresponds to the sum of the signal pattern and the noise waveform.
Result waveform
ai18306
1.8.1 Definition
The STM32 DAC provides the user with a triangular waveform generator with flexible offset,
amplitude and frequency.
The amplitude of the triangular waveform can be fixed using the MAMPx bits in the
DAC_CR register.
0 1 0.0008
1 3 0.0024
2 7 0.0056
3 15 0.0121
4 31 0.0250
5 63 0.0508
6 127 0.1023
7 255 0.2054
8 511 0.4117
9 1023 0.8242
10 2047 1.6492
≥ 11 4095 3.2992
For more details about the triangular waveform refer to the dedicated sections in the
reference manuals.
The triangular waveform frequency is related to the frequency of the trigger source.
3.3V
Frequency
DAC output x Voltage
Amplitude
Offset
0V
Time
ai18307
The offset of the triangular waveform is programmable (see Figure 9). By varying the offset
of the triangular waveform with a preconfigured table of offsets (signal pattern), user can
obtain a waveform that corresponds to the sum of the signal pattern and the triangular
waveform. As there is no hardware overflow protection, the sum of offsets and amplitude
must not be higher than 4095.
Triangular waveform
Result waveform
ai18308
Figure 10. Non buffered channel voltage (with and without load)
DAC 0.6 V
DAC_Channel1 5.1 kΩ
DAC 1.65 V
DAC_Channel1
DAC 1.65 V
DAC_Channel1 5.1 kΩ
DAC 1.65 V
DAC_Channel1
2 Application examples
2.1.1 Description
This example describes step by step how to generate a sine waveform.
A sine waveform is also called a monotone signal, it is known as a pure (or sine) tone. The
sine tones are traditionally used as stimuli to assess the response of the audio system.
ySineDigital ySineAnalog(Volt)
5000 4.029
4000 3.223
3000 2.147
2000 1.611
1000 0.805
0 0
0 1 2 3 4 5 6 7 8 9
ai18311
Digital inputs are converted to output voltages on a linear conversion between 0 and VREF+.
The analog output voltages on each DAC channel pin are determined by the equation
DOR
DAC Output = V REF -------------------------------------------------------------------
DAC_MaxDigitalValue +1
So the analog sine waveform ySineAnalog can be determined by the following equation
y SineDigital x
y SineAnalog x = 3.3Volt -------------------------------------
0xFFF + 1
0 2048 1.650
1 3251 2.620
2 3995 3.219
3 3996 3.220
4 3253 2.622
5 2051 1.653
6 847 0.682
7 101 0.081
8 98 0.079
9 839 0.676
The table is saved in the memory and transferred by the DMA, the transfer is triggered by
the same timer that triggers the DAC.
f TimerTRGO
f Sinewave = -----------------------------
-
ns
So, if the TIMx_TRGO output frequency is 1 MHz, the frequency of the sine wave generated
by the DAC is 100 kHz.
Note: To get close to the targeted monotone waveform, it is recommended to use the highest
possible number of samples ns (the difference can be easily understood by comparing
Figure 13 with Figure 14).
ySineAnalog(Volt)
4
3
2
1
time
0
ai18312
ySineDigital ySineAnalog(Volt)
5000 4.029
4000 3.223
3000 2.147
2000 1.611
1000 0.805
0 time
0
0 51 102 153 204 255
ai18313
2.2.1 Description
The purpose of this demonstration is to provide an audio player solution based on STM32
products to play .WAV files. The approach is optimized to use a minimum number of
external components, and offers to end-users the possibility of using their own .WAV files.
The audio files are stored in a microSD memory card, accessible by the STM32 through the
SPI bus.
Figure 15. Flow of data from microSD memory card to external speakers
.WAV
CPU SPI
DAC RAM
DMA TIM6
STM32
ai18314
The audio player demonstration described in this section is a part of the STM32100B-EVAL
demonstration firmware, which can be downloaded, together with the associated user
manual (UM0891), from the STMicroelectronics website www.st.com.
WavePlayer_menuStart()
No
if .wav file status OK Read 512 next bytes from the .wav file
Yes and Save them in wavBuffer1 (*)
Connect TIM6 TRGO to its update
event No
If DMA transfer from wavBuffer2 to
DAC ch1 is completed (*)
Configure the TIM6 frequency to have
Yes
the correct .wav sample rate
Clear DMA channel3 flag
Enable TIM6
(start the Transfer from RAM to DAC) Decrement the WaveDataLength by 512
and if WaveDataLength < 512 then
WaveDataLength = 0
Initialize WaveDataLength with .wav
file audible data size
Disable DMA, Configure DMA transfer 512
bytes from wavBuffer1 to DAC ch1 8bit
DHR register, and Enable DMA
Exit
ai18315
When DMA transfers data from one SRAM buffer, the CPU transfers data from the
microSD™ Flash memory to the other SRAM buffer.
Figure 17. CPU and DMA activities during wave playing process
CPU
Idle Idle
(No activity) (No activity)
DMA Transfer 512 bytes data from wavBuffur_1 to DAC Transfer 512 bytes data from wavBuffur_2 to DAC
(Transfer triggered by TIM6_TRGO) (Transfer triggered by TIM6_TRGO)
ai18316
3 Conclusion
This application note and in particular the examples given in Section 2: Application
examples help the user to become familiar with the DACs main features.
The first example (Section 2.1: Using the DAC to generate a sine waveform) shows how to
generate an analog waveform (a sine waveform generation source code is provided as
reference). The second example (Section 2.2: Using the DAC to implement an audio player)
offers a straightforward and flexible solution to use the STM32 to play .WAV files stored in
an SPI microSD™ Flash memory.
These examples can be used as starting points to develop your own solution based on
STM32 products.
4 Revision history
STMicroelectronics NV and its subsidiaries (“ST”) reserve the right to make changes, corrections, enhancements, modifications, and
improvements to ST products and/or to this document at any time without notice. Purchasers should obtain the latest relevant information on
ST products before placing orders. ST products are sold pursuant to ST’s terms and conditions of sale in place at the time of order
acknowledgement.
Purchasers are solely responsible for the choice, selection, and use of ST products and ST assumes no liability for application assistance or
the design of Purchasers’ products.
Resale of ST products with provisions different from the information set forth herein shall void any warranty granted by ST for such product.
ST and the ST logo are trademarks of ST. For additional information about ST trademarks, please refer to www.st.com/trademarks. All other
product or service names are the property of their respective owners.
Information in this document supersedes and replaces information previously supplied in any prior versions of this document.