STM32F412xE/xG
Errata sheet
STM32F412xE/xG device limitations
Applicability
This document applies to the part numbers of STM32F412xx devices listed in Table 1 and their variants shown in Table 2.
Section 1 gives a summary and Section 2 a description of / workaround for device limitations, with respect to the device datasheet and reference manual [RM0402.
|
Table 1. Device summary |
|
Reference |
Part numbers |
|
|
|
|
STM32F412xx |
STM32F412CE, STM32F412RE, STM32F412VE, STM32F412ZE, |
|
STM32F412CG, STM32F412RG, STM32F412VG, STM32F412ZG |
||
|
||
|
|
Reference |
Silicon revision codes |
|
|
|
|
|
|
Device marking(1) |
|
REV_ID(2) |
|
|
|
||
STM32F412xx |
Z |
|
0x1001 |
|
|
|
|
STM32F412xx |
C |
|
0x3000 |
|
|
|
|
STM32F412xx |
1 |
|
0x3000 |
|
|
|
|
1.Refer to the device data sheet for how to identify this code on different types of package.
2.REV_ID[15:0] bit field of DBGMCU_IDCODE register. Refer to the reference manual.
October 2020 |
ES0305 Rev 9 |
1/25 |
www.st.com
Contents |
STM32F412xE/xG |
|
|
Contents
1 |
Arm® 32-bit Cortex®-M4 with FPU limitations . . . . . . . . . . . . . . . . . . . . |
5 |
1.1Cortex-M4 interrupted loads to stack pointer can cause
erroneous behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2VDIV or VSQRT instructions might not complete correctly
when very short ISRs are used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 |
STM32F412xx silicon limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
7 |
|
2.1 System limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
9 |
2.1.1 Debugging Sleep/Stop mode with WFE/WFI entry . . . . . . . . . . . . . . . . . 9
2.1.2Wakeup sequence from Standby mode when using more than
one wakeup source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.3 Full JTAG configuration without NJTRST pin cannot be used . . . . . . . . 10
2.1.4MPU attribute to RTC and IWDG registers could be managed
|
incorrectly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
10 |
2.1.5 |
Delay after an RCC peripheral clock enabling . . . . . . . . . . . . . . . . . . . . |
10 |
2.1.6 |
Internal noise impacting the ADC accuracy . . . . . . . . . . . . . . . . . . . . . . |
10 |
2.1.7 |
Flash sector erase issue for sectors 5 to 11 . . . . . . . . . . . . . . . . . . . . . |
11 |
2.1.8In some specific cases, DMA2 data corruption occurs when managing
AHB and APB2 peripherals in a concurrent way . . . . . . . . . . . . . . . . . . 11
2.2 |
IWDG peripheral limitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
12 |
|
|
2.2.1 |
RVU and PVU flags are not reset in STOP mode . . . . . . . . . . . . . . . . . |
12 |
2.3 |
I2C peripheral limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
12 |
|
|
2.3.1 |
SMBus standard not fully supported . . . . . . . . . . . . . . . . . . . . . . . . . . . |
12 |
|
2.3.2 |
Start cannot be generated after a misplaced Stop . . . . . . . . . . . . . . . . |
12 |
|
2.3.3 |
Mismatch on the “Setup time for a repeated Start condition” timing |
|
|
|
parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
13 |
2.3.4Data valid time (tVD;DAT) violated without the OVR flag being set . . . . . 13
2.3.5Both SDA and SCL maximum rise time (tr) violated when VDD_I2C bus higher than ((VDD+0.3) / 0.7) V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.6Last received byte can be lost when using Reload mode
with NBYTES > 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4 FMPI2C peripheral limitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.1Wrong data sampling when data set-up time (tSU;DAT) is smaller than
one FMPI2CCLK period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 SPI/I2S peripheral limitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.1Wrong CRC calculation when the polynomial is even. . . . . . . . . . . . . . 15
2/25 |
ES0305 Rev 9 |
STM32F412xE/xG |
Contents |
|
|
2.5.2BSY bit may stay high at the end of a data transfer in slave mode . . . . 15
2.5.3Corrupted last bit of data and/or CRC, received in Master mode with
delayed SCK feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 |
USART peripheral limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
17 |
|
|
2.6.1 |
Idle frame is not detected if receiver clock speed is deviated . . . . . . . . |
17 |
|
2.6.2 |
In full duplex mode, the Parity Error (PE) flag can be cleared by |
|
|
|
writing to the data register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
17 |
|
2.6.3 |
Parity Error (PE) flag is not set when receiving in Mute mode |
|
|
|
using address mark detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
18 |
|
2.6.4 |
Break frame is transmitted regardless of nCTS input line status . . . . . . |
18 |
|
2.6.5 |
nRTS signal abnormally driven low after a protocol violation . . . . . . . . |
18 |
|
2.6.6 |
Start bit detected too soon when sampling for NACK signal |
|
|
|
from the smartcard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
19 |
|
2.6.7 |
Break request can prevent the Transmission Complete flag (TC) |
|
|
|
from being set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
19 |
|
2.6.8 |
Guard time is not respected when data are sent on TXE events . . . . . . |
19 |
|
2.6.9 |
nRTS is active while RE or UE = 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
19 |
|
2.7 |
bxCAN limitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
20 |
|
|
|
2.7.1 |
bxCAN time triggered communication mode not supported . . . . . . . . . |
20 |
|
2.8 |
FSMC peripheral limitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
20 |
|
|
|
2.8.1 |
Dummy read cycles inserted when reading synchronous memories . . . |
20 |
|
2.9 |
SDIO peripheral limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
20 |
|
|
|
2.9.1 |
Wrong CCRCFAIL status after a response without CRC is received . . . |
20 |
|
|
2.9.2 |
No underrun detection with wrong data transmission . . . . . . . . . . . . . . |
21 |
|
2.10 |
ADC peripheral limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
21 |
|
|
|
2.10.1 ADC sequencer modification during conversion . . . . . . . . . . . . . . . . . . |
21 |
|
|
2.11 |
QuadSPI limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
21 |
|
|
|
2.11.1 |
First nibble of data is not written after dummy phase . . . . . . . . . . . . . . |
21 |
|
|
2.11.2 |
Wrong data can be read in memory-mapped after an indirect mode |
|
|
|
|
operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
22 |
3 |
Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
23 |
ES0305 Rev 9 |
3/25 |
List of tables |
STM32F412xE/xG |
|
|
List of tables
Table 1. Device summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Table 2. Device variants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Table 3. Cortex-M4 core limitations and impact on microcontroller behavior . . . . . . . . . . . . . . . . . . . 5 Table 4. Summary of silicon limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Table 5. Maximum allowable APB frequency at 30 pF load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Table 6. Document revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4/25 |
ES0305 Rev 9 |
STM32F412xE/xG |
Arm® 32-bit Cortex®-M4 with FPU limitations |
|
|
|
|
1 |
Arm® 32-bit Cortex®-M4 with FPU limitations |
An errata notice of the STM32F412xx core is available from http://infocenter.arm.com.
All the described limitations are minor and related to the revision r0p1-v1 of the Cortex-M4 core. Table 3 summarizes these limitations and their implications on the behavior of STM32F412xx devices.
Arm ID |
Arm |
Arm summary of errata |
Impact on STM32F412xx |
|
category |
||||
|
|
|
|
|
752770 |
Cat B |
Interrupted loads to SP can cause erroneous |
Minor |
|
behavior |
||||
|
|
|
||
|
|
|
|
|
776924 |
Cat B |
VDIV or VSQRT instructions might not complete |
Minor |
|
correctly when very short ISRs are used |
||||
|
|
|
||
|
|
|
|
1.1Cortex-M4 interrupted loads to stack pointer can cause erroneous behavior
An interrupt occurring during the data-phase of a single word load to the stack pointer (SP/R13) can cause an erroneous behavior of the device. In addition, returning from the interrupt results in the load instruction being executed an additional time.
For all the instructions performing an update of the base register, the base register is erroneously updated on each execution, resulting in the stack pointer being loaded from an incorrect memory location.
The instructions affected by this limitation are the following:
•LDR SP, [Rn],#imm
•LDR SP, [Rn,#imm]!
•LDR SP, [Rn,#imm]
•LDR SP, [Rn]
•LDR SP, [Rn,Rm]
As of today, no compiler generates these particular instructions. This limitation can only occur with hand-written assembly code.
Both limitations can be solved by replacing the direct load to the stack pointer by an intermediate load to a general-purpose register followed by a move to the stack pointer.
Example:
Replace LDR SP, [R0] by LDR R2,[R0]
MOV SP,R2
ES0305 Rev 9 |
5/25 |
Arm® 32-bit Cortex®-M4 with FPU limitations |
STM32F412xE/xG |
|
|
On Cortex-M4 with FPU core, 14 cycles are required to execute a VDIV or VSQRT instruction.
This limitation is present when the following conditions are met:
•A VDIV or VSQRT is executed
•The destination register for VDIV or VSQRT is one of s0 - s15
•An interrupt occurs and is taken
•The ISR being executed does not contain a floating point instruction
•14 cycles after the VDIV or VSQRT is executed, an interrupt return is executed
In this case, if there are only one or two instructions inside the interrupt service routine, then the VDIV or VQSRT instruction does not complete correctly and the register bank and FPSCR are not updated, meaning that these registers hold incorrect out-of-date data.
Two workarounds are applicable:
•Disable lazy context save of floating point state by clearing LSPEN to 0 (bit 30 of the FPCCR at address 0xE000EF34).
•Ensure that every ISR contains more than 2 instructions in addition to the exception return instruction.
6/25 |
ES0305 Rev 9 |
STM32F412xE/xG |
STM32F412xx silicon limitations |
|
|
Table 4 gives quick references to all documented limitations.
Legend for Table 4: A = workaround available; N = no workaround available; P = partial workaround available, ‘-’ and grayed = fixed.
|
|
|
Revision C |
|
|
Links to silicon limitations |
Revision Z |
and |
|
|
|
|
Revision 1 |
|
|
|
|
|
|
|
Section 2.1.1: Debugging Sleep/Stop mode with WFE/WFI entry |
A |
A |
|
|
|
|
|
|
|
Section 2.1.2: Wakeup sequence from Standby mode when using |
A |
A |
|
|
more than one wakeup source |
|||
|
|
|
||
|
|
|
|
|
|
Section 2.1.3: Full JTAG configuration without NJTRST pin cannot |
A |
A |
|
|
be used |
|||
|
|
|
||
|
|
|
|
|
Section 2.1: |
Section 2.1.4: MPU attribute to RTC and IWDG registers could be |
A |
A |
|
managed incorrectly |
||||
|
|
|||
System limitations |
|
|
|
|
Section 2.1.5: Delay after an RCC peripheral clock enabling |
A |
A |
||
|
|
|
|
|
|
Section 2.1.6: Internal noise impacting the ADC accuracy |
A |
A |
|
|
|
|
|
|
|
Section 2.1.7: Flash sector erase issue for sectors 5 to 11 |
A |
- |
|
|
Section 2.1.8: In some specific cases, DMA2 data corruption |
|
|
|
|
occurs when managing AHB and APB2 peripherals in a concurrent |
A |
A |
|
|
way |
|
|
|
|
|
|
|
|
Section 2.2: IWDG |
|
|
|
|
peripheral |
Section 2.2.1: RVU and PVU flags are not reset in STOP mode |
A |
A |
|
limitation |
|
|
|
|
|
|
|
|
|
|
Section 2.3.1: SMBus standard not fully supported |
A |
A |
|
|
|
|
|
|
|
Section 2.3.2: Start cannot be generated after a misplaced Stop |
A |
A |
|
|
|
|
|
|
|
Section 2.3.3: Mismatch on the “Setup time for a repeated Start |
A |
A |
|
|
condition” timing parameter |
|||
Section 2.3: I2C |
|
|
||
|
|
|
||
Section 2.3.4: Data valid time (tVD;DAT) violated without the OVR |
|
|
||
peripheral |
A |
A |
||
limitations |
flag being set |
|||
|
|
|||
|
Section 2.3.5: Both SDA and SCL maximum rise time (tr) violated |
A |
A |
|
|
when VDD_I2C bus higher than ((VDD+0.3) / 0.7) V |
|
|
|
|
Section 2.3.6: Last received byte can be lost when using Reload |
P |
P |
|
|
mode with NBYTES > 1 |
|||
|
|
|
||
|
|
|
|
|
Section 2.4: |
Section 2.4.1: Wrong data sampling when data set-up time |
|
|
|
FMPI2C peripheral |
A |
A |
||
(tSU;DAT) is smaller than one FMPI2CCLK period |
||||
limitation |
|
|
|
ES0305 Rev 9 |
7/25 |
STM32F412xx silicon limitations |
STM32F412xE/xG |
|||
|
|
|
|
|
|
Table 4. Summary of silicon limitations (continued) |
|
|
|
|
|
|
Revision C |
|
|
Links to silicon limitations |
Revision Z |
and |
|
|
|
|
Revision 1 |
|
|
|
|
|
|
|
Section 2.5.1: Wrong CRC calculation when the polynomial is |
A |
A |
|
|
even. |
|||
Section 2.5: |
|
|
||
|
|
|
||
Section 2.5.2: BSY bit may stay high at the end of a data transfer in |
|
|
||
SPI/I2S peripheral |
A |
A |
||
limitation |
slave mode |
|
|
|
|
Section 2.5.3: Corrupted last bit of data and/or CRC, received in |
A |
A |
|
|
Master mode with delayed SCK feedback |
|||
|
|
|
||
|
|
|
|
|
|
Section 2.6.1: Idle frame is not detected if receiver clock speed is |
N |
N |
|
|
deviated |
|||
|
|
|
||
|
|
|
|
|
|
Section 2.6.2: In full duplex mode, the Parity Error (PE) flag can be |
A |
A |
|
|
cleared by writing to the data register |
|||
|
|
|
||
|
|
|
|
|
|
Section 2.6.3: Parity Error (PE) flag is not set when receiving in |
N |
N |
|
|
Mute mode using address mark detection |
|||
|
|
|
||
|
|
|
|
|
|
Section 2.6.4: Break frame is transmitted regardless of nCTS input |
N |
N |
|
Section 2.6: |
line status |
|||
|
|
|||
|
|
|
||
USART peripheral |
Section 2.6.5: nRTS signal abnormally driven low after a protocol |
A |
A |
|
limitations |
violation |
|||
|
|
|||
|
|
|
|
|
|
Section 2.6.6: Start bit detected too soon when sampling for NACK |
A |
A |
|
|
signal from the smartcard |
|||
|
|
|
||
|
|
|
|
|
|
Section 2.6.7: Break request can prevent the Transmission |
A |
A |
|
|
Complete flag (TC) from being set |
|||
|
|
|
||
|
|
|
|
|
|
Section 2.6.8: Guard time is not respected when data are sent on |
A |
A |
|
|
TXE events |
|||
|
|
|
||
|
|
|
|
|
|
Section 2.6.9: nRTS is active while RE or UE = 0 |
A |
A |
|
|
|
|
|
|
Section 2.7: |
Section 2.7.1: bxCAN time triggered communication mode not |
A |
A |
|
bxCAN limitation |
supported |
|||
|
|
|||
|
|
|
|
|
Section 2.8: FSMC |
Section 2.8.1: Dummy read cycles inserted when reading |
N |
N |
|
peripheral |
synchronous memories |
|||
limitation |
|
|
||
|
|
|
||
|
|
|
|
|
Section 2.9: SDIO |
Section 2.9.1: Wrong CCRCFAIL status after a response without |
A |
A |
|
CRC is received |
||||
peripheral |
|
|
||
limitations |
Section 2.9.2: No underrun detection with wrong data transmission |
A |
A |
|
|
||||
|
|
|
|
|
Section 2.10: ADC |
|
|
|
|
peripheral |
Section 2.10.1: ADC sequencer modification during conversion |
A |
A |
|
limitations |
|
|
|
|
|
|
|
|
|
Section 2.11: |
Section 2.11.1: First nibble of data is not written after dummy phase |
A |
A |
|
QuadSPI |
Section 2.11.2: Wrong data can be read in memory-mapped after |
A |
A |
|
limitations |
||||
an indirect mode operation |
||||
|
|
|
||
|
|
|
|
8/25 |
ES0305 Rev 9 |