AN4457
Application note
Implementing an emulated universal asynchronous receiver
transmitter on STM32F4 microcontroller series
Introduction
This application note describes how to implement an emulated universal asynchronous
receiver transmitter (UART) on STM32F4 series.
Such an emulator is needed in applications that require more UARTs than the ones provided
by STM32F4 microcontrollers.
The emulated UART is full-duplex, supports up to 9 data bits and baud rates up to
115200 bps. It also offers a high flexibility since any I/O pin can be used as TX or RX line. In
addition, this UART emulation uses the DMA to minimize CPU usage.
This application note provides a basic example of communications between a hardware and
a software UART as well as a summary of CPU load and firmware footprint.
The STSW-STM32156 firmware package is delivered with this document and contains the
source code of the UART emulator with all firmware modules required to run the example.
Table 1. Applicable products
Type
Microcontrollers
Embedded software
STM32F4 series
STSW-STM32156
Part numbers
March 2015
DocID026046 Rev 1
1/24
www.st.com
1
Contents
AN4457
Contents
1
UART emulator description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1
1.2
1.3
Main features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
UART emulator block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
UART emulator principle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1
1.3.2
1.3.3
Data transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Single-frame transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Multiple-frame transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Single-frame reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Multiple-frame reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4
Data reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.1
1.4.2
1.5
Baudrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2
Software description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1
2.2
Implementation structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.1
2.2.2
Frame transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Transmission routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Frame reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Reception routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Peripheral settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Initialization and configuration function . . . . . . . . . . . . . . . . . . . . . . . . . 16
UART main functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3
Reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.1
2.3.2
2.4
UART emulator peripherals and main functions . . . . . . . . . . . . . . . . . . . . 16
2.4.1
2.4.2
2.4.3
3
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1
3.2
3.3
3.4
Hardware requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Software settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Running the example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Frame waveforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4
UART emulator CPU load and footprint . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1
CPU load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2/24
DocID026046 Rev 1
AN4457
Contents
4.2
UART emulator memory footprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5
6
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
DocID026046 Rev 1
3/24
3
List of tables
AN4457
List of tables
Table 1.
Table 2.
Table 3.
Table 4.
Table 5.
Table 6.
Table 7.
Applicable products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Transmission/reception functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Callback functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
UART Emulator and UART hardware connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
UART CPU Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
UART memory footprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Document revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4/24
DocID026046 Rev 1
AN4457
List of figures
List of figures
Figure 1.
Figure 2.
Figure 3.
Figure 4.
Figure 5.
Figure 6.
Figure 7.
Figure 8.
Figure 9.
Figure 10.
Figure 11.
Figure 12.
UART emulator block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
9-bit data transmission waveforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
9-bit data reception waveforms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
UART emulator application level view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Frame transmission routine flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Transmission routine flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Frame reception routine flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Reception routine flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
UART emulator and UART HW connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Example MDK-ARM workspaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
UART emulator frame with no parity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
UART emulator frame with odd parity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
DocID026046 Rev 1
5/24
5