Rm0430 Stm32f413423 Advanced Armbased 32bit Mcus Stmicroelectronics
Rm0430 Stm32f413423 Advanced Armbased 32bit Mcus Stmicroelectronics
Reference manual
STM32F413/423 advanced Arm®-based 32-bit MCUs
Introduction
This reference manual targets application developers. It provides complete information on
how to use the memory and the peripherals of the STM32F413/423 microcontrollers.
The STM32F413/423 is a line of microcontrollers with different memory sizes, packages and
peripherals.
For ordering information, mechanical and electrical device characteristics refer to the
datasheet.
For information on the Arm® Cortex®-M4 with FPU core, refer to the Cortex®-M4 Technical
Reference Manual.
Related documents
Available from STMicroelectronics web site www.st.com:
• STM32F413/423xG/xH datasheet
• PM0214 “STM32F3 and STM32F4 Series Cortex®-M4 with FPU-M4 programming
manual” for information on the Arm®Cortex®-M4 with FPU.
Contents
1 Documentation conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.1 General information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.2 List of abbreviations for registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.3 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.4 Availability of peripherals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.5.3 Erase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.5.4 Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.5.5 Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.6 Option bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.6.1 Description of user option bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.6.2 Programming user option bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.6.3 Read protection (RDP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.6.4 Write protections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.6.5 Proprietary code readout protection (PCROP) . . . . . . . . . . . . . . . . . . . 79
3.7 One-time programmable bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.8 Flash interface registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.8.1 Flash access control register (FLASH_ACR) . . . . . . . . . . . . . . . . . . . . 82
3.8.2 Flash key register (FLASH_KEYR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.8.3 Flash option key register (FLASH_OPTKEYR) . . . . . . . . . . . . . . . . . . . 83
3.8.4 Flash status register (FLASH_SR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.8.5 Flash control register (FLASH_CR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
3.8.6 Flash option control register (FLASH_OPTCR) . . . . . . . . . . . . . . . . . . . 86
3.8.7 Flash interface register map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
List of tables
Table 49. NOR Flash/PSRAM: example of supported memories and transactions . . . . . . . . . . . . . 272
Table 50. FSMC_BCRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Table 51. FSMC_BTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Table 52. FSMC_BCRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Table 53. FSMC_BTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Table 54. FSMC_BWTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Table 55. FSMC_BCRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Table 56. FSMC_BTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Table 57. FSMC_BWTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Table 58. FSMC_BCRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Table 59. FSMC_BTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Table 60. FSMC_BWTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Table 61. FSMC_BCRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Table 62. FSMC_BTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Table 63. FSMC_BWTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Table 64. FSMC_BCRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Table 65. FSMC_BTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Table 66. FSMC_BCRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Table 67. FSMC_BTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Table 68. FSMC_BCRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Table 69. FSMC_BTRx bit fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Table 70. FSMC register map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Table 71. QUADSPI pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Table 72. QUADSPI interrupt requests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Table 73. QUADSPI register map and reset values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Table 74. ADC pins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Table 75. Analog watchdog channel selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Table 76. Configuring the trigger polarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Table 77. External trigger for regular channels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Table 78. External trigger for injected channels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Table 79. ADC interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Table 80. ADC global register map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Table 81. ADC register map and reset values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Table 82. ADC register map and reset values (common ADC registers) . . . . . . . . . . . . . . . . . . . . . 365
Table 83. DAC pins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Table 84. External triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Table 85. DAC register map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Table 86. DFSDMx implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Table 87. DFSDM external pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Table 88. DFSDM internal signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Table 89. DFSDM1 triggers connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Table 90. DFSDM2 triggers connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Table 91. DFSDM break connection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Table 92. Demultiplexers (DM[6:1]) operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Table 93. Use-cases examples for beamforming applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Table 94. Filter maximum output resolution (peak data values from filter output)
for some FOSR values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Table 95. Integrator maximum output resolution (peak data values from integrator
output) for some IOSR values and FOSR = 256 and Sinc3 filter type (largest data) . . . . 411
Table 96. DFSDM interrupt requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Table 97. DFSDM register map and reset values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Table 98. RNG internal input/output signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
List of figures
Figure 49. Synchronous multiplexed read mode waveforms - NOR, PSRAM (CRAM) . . . . . . . . . . . 293
Figure 50. Synchronous multiplexed write mode waveforms - PSRAM (CRAM). . . . . . . . . . . . . . . . 295
Figure 51. QUADSPI block diagram when dual-flash mode is disabled . . . . . . . . . . . . . . . . . . . . . . 307
Figure 52. QUADSPI block diagram when dual-flash mode is enabled . . . . . . . . . . . . . . . . . . . . . . 308
Figure 53. An example of a read command in quad mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Figure 54. An example of a DDR command in quad mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Figure 55. nCS when CKMODE = 0 (T = CLK period). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Figure 56. nCS when CKMODE = 1 in SDR mode (T = CLK period) . . . . . . . . . . . . . . . . . . . . . . . . 320
Figure 57. nCS when CKMODE = 1 in DDR mode (T = CLK period) . . . . . . . . . . . . . . . . . . . . . . . . 321
Figure 58. nCS when CKMODE = 1 with an abort (T = CLK period) . . . . . . . . . . . . . . . . . . . . . . . . . 321
Figure 59. Single ADC block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Figure 60. Timing diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Figure 61. Analog watchdog’s guarded area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Figure 62. Injected conversion latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Figure 63. Right alignment of 12-bit data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Figure 64. Left alignment of 12-bit data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Figure 65. Left alignment of 6-bit data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Figure 66. Temperature sensor and VREFINT channel block diagram . . . . . . . . . . . . . . . . . . . . . . 348
Figure 67. DAC channel block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Figure 68. Data registers in single DAC channel mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Figure 69. Data registers in dual DAC channel mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Figure 70. Timing diagram for conversion with trigger disabled TEN = 0 . . . . . . . . . . . . . . . . . . . . . 370
Figure 71. DAC LFSR register calculation algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Figure 72. DAC conversion (SW trigger enabled) with LFSR wave generation. . . . . . . . . . . . . . . . . 372
Figure 73. DAC triangle wave generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Figure 74. DAC conversion (SW trigger enabled) with triangle wave generation . . . . . . . . . . . . . . . 373
Figure 75. Single DFSDM block diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Figure 76. Input channel pins redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Figure 77. Channel transceiver timing diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Figure 78. Clock absence timing diagram for SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Figure 79. Clock absence timing diagram for Manchester coding . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Figure 80. First conversion for Manchester coding (Manchester synchronization) . . . . . . . . . . . . . . 401
Figure 81. Multi-channel delay block for pulse skipping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Figure 82. Pulses skipper operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Figure 83. DFSDM_CHyDATINR registers operation modes and assignment . . . . . . . . . . . . . . . . . 409
Figure 84. Example: Sinc3 filter response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
Figure 85. RNG block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Figure 86. Entropy source model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Figure 87. Advanced-control timer block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Figure 88. Counter timing diagram with prescaler division change from 1 to 2 . . . . . . . . . . . . . . . . . 465
Figure 89. Counter timing diagram with prescaler division change from 1 to 4 . . . . . . . . . . . . . . . . . 465
Figure 90. Counter timing diagram, internal clock divided by 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Figure 91. Counter timing diagram, internal clock divided by 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Figure 92. Counter timing diagram, internal clock divided by 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Figure 93. Counter timing diagram, internal clock divided by N. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Figure 94. Counter timing diagram, update event when ARPE=0
(TIMx_ARR not preloaded) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Figure 95. Counter timing diagram, update event when ARPE=1
(TIMx_ARR preloaded) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Figure 96. Counter timing diagram, internal clock divided by 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Figure 97. Counter timing diagram, internal clock divided by 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Figure 98. Counter timing diagram, internal clock divided by 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Figure 151. Counter timing diagram, internal clock divided by 4, TIMx_ARR=0x36 . . . . . . . . . . . . . . 544
Figure 152. Counter timing diagram, internal clock divided by N. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Figure 153. Counter timing diagram, Update event with ARPE=1 (counter underflow). . . . . . . . . . . . 545
Figure 154. Counter timing diagram, Update event with ARPE=1 (counter overflow) . . . . . . . . . . . . . 545
Figure 155. Control circuit in normal mode, internal clock divided by 1 . . . . . . . . . . . . . . . . . . . . . . . . 546
Figure 156. TI2 external clock connection example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Figure 157. Control circuit in external clock mode 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Figure 158. External trigger input block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Figure 159. Control circuit in external clock mode 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Figure 160. Capture/compare channel (example: channel 1 input stage) . . . . . . . . . . . . . . . . . . . . . . 550
Figure 161. Capture/compare channel 1 main circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Figure 162. Output stage of capture/compare channel (channel 1). . . . . . . . . . . . . . . . . . . . . . . . . . . 551
Figure 163. PWM input mode timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Figure 164. Output compare mode, toggle on OC1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Figure 165. Edge-aligned PWM waveforms (ARR=8) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Figure 166. Center-aligned PWM waveforms (ARR=8) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Figure 167. Example of one-pulse mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Figure 168. Clearing TIMx OCxREF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
Figure 169. Example of counter operation in encoder interface mode . . . . . . . . . . . . . . . . . . . . . . . . 562
Figure 170. Example of encoder interface mode with TI1FP1 polarity inverted . . . . . . . . . . . . . . . . . 562
Figure 171. Control circuit in reset mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Figure 172. Control circuit in gated mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
Figure 173. Control circuit in trigger mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
Figure 174. Control circuit in external clock mode 2 + trigger mode . . . . . . . . . . . . . . . . . . . . . . . . . . 566
Figure 175. Master/Slave timer example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
Figure 176. Gating timer 2 with OC1REF of timer 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Figure 177. Gating timer 2 with Enable of timer 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Figure 178. Triggering timer 2 with update of timer 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
Figure 179. Triggering timer 2 with Enable of timer 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
Figure 180. Triggering timer 1 and 2 with timer 1 TI1 input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
Figure 181. General-purpose timer block diagram (TIM9 and TIM12) . . . . . . . . . . . . . . . . . . . . . . . . 596
Figure 182. General-purpose timer block diagram (TIM10/11/13/14) . . . . . . . . . . . . . . . . . . . . . . . . . 597
Figure 183. Counter timing diagram with prescaler division change from 1 to 2 . . . . . . . . . . . . . . . . . 599
Figure 184. Counter timing diagram with prescaler division change from 1 to 4 . . . . . . . . . . . . . . . . . 599
Figure 185. Counter timing diagram, internal clock divided by 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Figure 186. Counter timing diagram, internal clock divided by 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Figure 187. Counter timing diagram, internal clock divided by 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Figure 188. Counter timing diagram, internal clock divided by N. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Figure 189. Counter timing diagram, update event when ARPE=0
(TIMx_ARR not preloaded) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Figure 190. Counter timing diagram, update event when ARPE=1
(TIMx_ARR preloaded) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Figure 191. Control circuit in normal mode, internal clock divided by 1 . . . . . . . . . . . . . . . . . . . . . . . . 603
Figure 192. TI2 external clock connection example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Figure 193. Control circuit in external clock mode 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Figure 194. Capture/compare channel (example: channel 1 input stage) . . . . . . . . . . . . . . . . . . . . . . 605
Figure 195. Capture/compare channel 1 main circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
Figure 196. Output stage of capture/compare channel (channel 1). . . . . . . . . . . . . . . . . . . . . . . . . . . 606
Figure 197. PWM input mode timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
Figure 198. Output compare mode, toggle on OC1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Figure 199. Edge-aligned PWM waveforms (ARR=8) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
Figure 200. Example of one pulse mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Figure 250. 128-bit block construction with respect to data swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Figure 251. DMA transfer of a 128-bit data block during input phase . . . . . . . . . . . . . . . . . . . . . . . . . 727
Figure 252. DMA transfer of a 128-bit data block during output phase . . . . . . . . . . . . . . . . . . . . . . . . 728
Figure 253. AES interrupt signal generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Figure 254. RTC block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Figure 255. FMPI2C block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
Figure 256. I2C bus protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786
Figure 257. Setup and hold timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
Figure 258. FMPI2C initialization flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Figure 259. Data reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
Figure 260. Data transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
Figure 261. Slave initialization flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
Figure 262. Transfer sequence flowchart for FMPI2C slave transmitter, NOSTRETCH=0 . . . . . . . . . 797
Figure 263. Transfer sequence flowchart for FMPI2C slave transmitter, NOSTRETCH=1 . . . . . . . . . 798
Figure 264. Transfer bus diagrams for FMPI2C slave transmitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
Figure 265. Transfer sequence flowchart for slave receiver with NOSTRETCH=0 . . . . . . . . . . . . . . 800
Figure 266. Transfer sequence flowchart for slave receiver with NOSTRETCH=1 . . . . . . . . . . . . . . 801
Figure 267. Transfer bus diagrams for FMPI2C slave receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801
Figure 268. Master clock generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
Figure 269. Master initialization flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
Figure 270. 10-bit address read access with HEAD10R=0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
Figure 271. 10-bit address read access with HEAD10R=1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
Figure 272. Transfer sequence flowchart for FMPI2C master transmitter for N≤255 bytes. . . . . . . . . 807
Figure 273. Transfer sequence flowchart for FMPI2C master transmitter for N>255 bytes. . . . . . . . . 808
Figure 274. Transfer bus diagrams for FMPI2C master transmitter. . . . . . . . . . . . . . . . . . . . . . . . . . . 809
Figure 275. Transfer sequence flowchart for FMPI2C master receiver for N≤255 bytes . . . . . . . . . . . 811
Figure 276. Transfer sequence flowchart for FMPI2C master receiver for N >255 bytes . . . . . . . . . . 812
Figure 277. Transfer bus diagrams for FMPI2C master receiver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
Figure 278. Timeout intervals for tLOW:SEXT, tLOW:MEXT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
Figure 279. Transfer sequence flowchart for SMBus slave transmitter N bytes + PEC. . . . . . . . . . . . 821
Figure 280. Transfer bus diagrams for SMBus slave transmitter (SBC=1) . . . . . . . . . . . . . . . . . . . . . 822
Figure 281. Transfer sequence flowchart for SMBus slave receiver N Bytes + PEC . . . . . . . . . . . . . 823
Figure 282. Bus transfer diagrams for SMBus slave receiver (SBC=1). . . . . . . . . . . . . . . . . . . . . . . . 824
Figure 283. Bus transfer diagrams for SMBus master transmitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
Figure 284. Bus transfer diagrams for SMBus master receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Figure 285. I2C bus protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
Figure 286. I2C block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
Figure 287. Transfer sequence diagram for slave transmitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Figure 288. Transfer sequence diagram for slave receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
Figure 289. Transfer sequence diagram for master transmitter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
Figure 290. Transfer sequence diagram for master receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Figure 291. I2C interrupt mapping diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868
Figure 292. USART block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
Figure 293. Word length programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
Figure 294. Configurable stop bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
Figure 295. TC/TXE behavior when transmitting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
Figure 296. Start bit detection when oversampling by 16 or 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
Figure 297. Data sampling when oversampling by 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
Figure 298. Data sampling when oversampling by 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
Figure 299. Mute mode using Idle line detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
Figure 300. Mute mode using address mark detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
Figure 301. Break detection in LIN mode (11-bit break length - LBDL bit is set) . . . . . . . . . . . . . . . . . 911
Figure 302. Break detection in LIN mode vs. Framing error detection. . . . . . . . . . . . . . . . . . . . . . . . . 912
Figure 303. USART example of synchronous transmission. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
Figure 304. USART data clock timing diagram (M=0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
Figure 305. USART data clock timing diagram (M=1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
Figure 306. RX data setup/hold time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
Figure 307. ISO 7816-3 asynchronous protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
Figure 308. Parity error detection using the 1.5 stop bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
Figure 309. IrDA SIR ENDEC- block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
Figure 310. IrDA data modulation (3/16) -Normal mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
Figure 311. Transmission using DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
Figure 312. Reception using DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
Figure 313. Hardware flow control between 2 USARTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
Figure 314. RTS flow control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
Figure 315. CTS flow control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
Figure 316. USART interrupt mapping diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
Figure 317. SPI block diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938
Figure 318. Full-duplex single master/ single slave application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Figure 319. Half-duplex single master/ single slave application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
Figure 320. Simplex single master/single slave application (master in transmit-only/
slave in receive-only mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
Figure 321. Master and three independent slaves. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942
Figure 322. Multi-master application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
Figure 323. Hardware/software slave select management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944
Figure 324. Data clock timing diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946
Figure 325. TXE/RXNE/BSY behavior in master / full-duplex mode (BIDIMODE=0,
RXONLY=0) in the case of continuous transfers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
Figure 326. TXE/RXNE/BSY behavior in slave / full-duplex mode (BIDIMODE=0,
RXONLY=0) in the case of continuous transfers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
Figure 327. Transmission using DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
Figure 328. Reception using DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953
Figure 329. TI mode transfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
Figure 330. I2S block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959
Figure 331. I2S full-duplex block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960
Figure 332. I2S Philips protocol waveforms (16/32-bit full accuracy, CPOL = 0). . . . . . . . . . . . . . . . . 962
Figure 333. I2S Philips standard waveforms (24-bit frame with CPOL = 0) . . . . . . . . . . . . . . . . . . . . . 962
Figure 334. Transmitting 0x8EAA33 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962
Figure 335. Receiving 0x8EAA33 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
Figure 336. I2S Philips standard (16-bit extended to 32-bit packet frame with CPOL = 0) . . . . . . . . . 963
Figure 337. Example of 16-bit data frame extended to 32-bit channel frame . . . . . . . . . . . . . . . . . . . 963
Figure 338. MSB Justified 16-bit or 32-bit full-accuracy length with CPOL = 0 . . . . . . . . . . . . . . . . . . 964
Figure 339. MSB justified 24-bit frame length with CPOL = 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
Figure 340. MSB justified 16-bit extended to 32-bit packet frame with CPOL = 0 . . . . . . . . . . . . . . . . 964
Figure 341. LSB justified 16-bit or 32-bit full-accuracy with CPOL = 0 . . . . . . . . . . . . . . . . . . . . . . . . 965
Figure 342. LSB justified 24-bit frame length with CPOL = 0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965
Figure 343. Operations required to transmit 0x3478AE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965
Figure 344. Operations required to receive 0x3478AE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966
Figure 345. LSB justified 16-bit extended to 32-bit packet frame with CPOL = 0 . . . . . . . . . . . . . . . . 966
Figure 346. Example of 16-bit data frame extended to 32-bit channel frame . . . . . . . . . . . . . . . . . . . 966
Figure 347. PCM standard waveforms (16-bit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
Figure 348. PCM standard waveforms (16-bit extended to 32-bit packet frame). . . . . . . . . . . . . . . . . 967
Figure 349. Audio sampling frequency definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
Figure 350. I2S clock generator architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
1 Documentation conventions
a. Arm is a registered trademark of Arm Limited (or its subsidiaries) in the US and/or elsewhere.
b. This is an exhaustive list of all abbreviations applicable to STM microcontrollers, some of them may not be
used in the current document.
1.3 Glossary
This section gives a brief definition of acronyms and abbreviations used in this document:
• Word: data of 32-bit length.
• Half-word: data of 16-bit length.
• Byte: data of 8-bit length.
• IAP (in-application programming): IAP is the ability to re-program the Flash memory
of a microcontroller while the user program is running.
• ICP (in-circuit programming): ICP is the ability to program the Flash memory of a
microcontroller using the JTAG protocol, the SWD protocol or the bootloader while the
device is mounted on the user application board.
• Option bytes: product configuration bits stored in the Flash memory.
• AHB: advanced high-performance bus.
$50 *3 *3 $FFHVVWKURXJKUHPDS
&RUWH[0 '0$ '0$
$FFHVVE\DOLDVLQJ
'0$B0(0
'0$B0(0
'0$B3
'0$B3,
'EXV
6EXV
,EXV
6 6 6 6 6 6
0 ,&2'(
$&&(/
)ODVK
8SWR0%
0 '&2'(
65$0
0
.%
0 $+% $3%
SHULSK
$+% $3%
0
SHULSK
)60&H[WHUQDO
0 0HP&WUO
4XDG63,
0 65$0
%XVPDWUL[6 .%
06Y9
2.1.1 I-bus
This bus connects the Instruction bus of the Cortex®-M4 with FPU core to the BusMatrix.
This bus is used by the core to fetch instructions. The target of this bus is a memory
containing code (internal Flash memory/SRAM1/SRAM2).
2.1.2 D-bus
This bus connects the databus of the Cortex®-M4 with FPU to the BusMatrix. This bus is
used by the core for literal load and debug access. The target of this bus is a memory
containing code or data (internal Flash memory/SRAM1/SRAM2).
2.1.3 S-bus
This bus connects the system bus of the Cortex®-M4 with FPU core to a BusMatrix. This
bus is used to access data located in a peripheral or in SRAM1 or in SRAM2. Instructions
may also be fetch on this bus (less efficient than ICode). The targets of this bus are the
internal SRAM1/SRAM2, the AHB1 peripherals including the APB peripherals, the AHB2
peripherals and the external memories through the FSMC and the QUADSPI.
2.1.6 BusMatrix
The BusMatrix manages the access arbitration between masters. The arbitration uses a
round-robin algorithm.
2.2.1 Introduction
Program memory, data memory, registers and I/O ports are organized within the same linear
4-Gbyte address space.
The bytes are coded in memory in Little Endian format. The lowest numbered byte in a word
is considered the word’s least significant byte and the highest numbered byte the most
significant.
The addressable memory space is divided into eight main blocks, of 512 Mbytes each.
The access to some part of the address space is master dependent, see Section 2: Memory
and bus architecture for details.
5HVHUYHG [([))))))))
&RUWH[ą0LQWHUQDO
SHULSKHUDOV [([()))))
5HVHUYHG [$±'))))))
$)))
$+%
[
[)))))))
$+%
[)))))))) [
0E\WH 5HVHUYHG [[)))))))
EORFN [))
LQWHUQDO
SHULSKHUDOV
[(
[')))))))
0E\WH
EORFN
1RWXVHG $+%
[&
[%)))))))
5HVHUYHG
[$
[$)))
[
5HVHUYHG [[))))
[))
)0&
$QG
4XDG63,
$3%
[
[)))))))
0E\WH
EORFN
SHULSKHUDOV
[
[)))))))
0E\WH 5HVHUYHG
EORFNLQF [[)))))))
65$0 .%DOLDVHG [
65$065$0 [[)))) 5HVHUYHG [[))))
E\ELWEDQGLQJ
[ 65$0 .%DOLDVHG [)))
E\ELWEDQGLQJ
[[))))
[)))))))
0E\WH 5HVHUYHG [)))&[)))))))
EORFN 8VHURSWLRQE\WHV [)))&[)))&)
&RGH 5HVHUYHG [)))$[)))%)))
[ 273DUHDORFN [)))[)))$)
6\VWHPPHPRU\ [)))[)))))
5HVHUYHG [[))()))) $3%
65$0 .%DFFHVVHGE\
&38YLD,EXVDQG'EXV [[))))
5HVHUYHG [[)))))))
)ODVKPHPRU\ [[))))
$OLDVHGWR)ODVKV\VWHP
PHPRU\RU65$0
GHSHQGLQJRQWKH%227SLQV [[)))))) [
06Y9
All the memory map areas that are not allocated to on-chip memories and peripherals are
considered “Reserved”. For the detailed mapping of available memory and register areas,
refer to the following table.
The following table gives the boundary addresses of the peripherals available in the
devices.
A mapping formula shows how to reference each word in the alias region to a corresponding
bit in the bit-band region. The mapping formula is:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
where:
– bit_word_addr is the address of the word in the alias memory region that maps to
the targeted bit
– bit_band_base is the starting address of the alias region
– byte_offset is the number of the byte in the bit-band region that contains the
targeted bit
– bit_number is the bit position (0-7) of the targeted bit
Example
The following example shows how to map bit 2 of the byte located at SRAM1 address
0x20000300 to the alias region:
0x22006008 = 0x22000000 + (0x300*32) + (2*4)
Writing to address 0x22006008 has the same effect as a read-modify-write operation on bit
2 of the byte at SRAM1 address 0x20000300.
Reading address 0x22006008 returns the value (0x01 or 0x00) of bit 2 of the byte at SRAM1
address 0x20000300 (0x01: bit set; 0x00: bit reset).
For more information on bit-banding, refer to the Cortex®-M4 with FPU programming
manual (see Related documents on page 1.
x 0 Main Flash memory Main Flash memory is selected as the boot space
0 1 System memory System memory is selected as the boot space
1 1 Embedded SRAM Embedded SRAM is selected as the boot space
The values on the BOOT pins are latched on the 4th rising edge of SYSCLK after a reset. It
is up to the user to set the BOOT1 and BOOT0 pins after reset to select the required boot
mode.
BOOT0 is a dedicated pin while BOOT1 is shared with a GPIO pin. Once BOOT1 has been
sampled, the corresponding GPIO pin is free and can be used for other purposes.
The BOOT pins are also resampled when the device exits the Standby mode. Consequently,
they must be kept in the required Boot mode configuration when the device is in the Standby
mode. After this startup delay is over, the CPU fetches the top-of-stack value from address
0x0000 0000, then starts code execution from the boot memory starting from 0x0000 0004.
Note: When the device boots from SRAM, in the application initialization code, you have to
relocate the vector table in SRAM using the NVIC exception table and the offset register.
Embedded bootloader
The embedded bootloader mode is used to reprogram the Flash memory using one of the
interface described in Table 32. The availability of the interface is package dependent.
UFQFPN48 Y - - Y - Y Y Y - - Y Y
LQFP64 Y - - Y - Y Y Y Y - Y Y
WLCSP81 Y - - Y - Y Y Y Y Y Y Y
LQFP100 Y Y - Y - Y Y Y Y Y Y Y
LQFP144 Y Y Y Y Y Y Y Y Y Y Y Y
UFBGA100 Y Y Y Y - Y Y Y Y Y Y Y
UFBGA144 Y Y Y Y Y Y Y Y Y Y Y Y
The USART peripherals operate at the internal 16 MHz oscillator (HSI) frequency, while the
CAN and USB OTG FS require an external clock (HSE) multiple of 1 MHz (ranging from 4 to
26 MHz).
The embedded bootloader code is located in system memory. It is programmed by ST
during production. For additional information, refer to application note AN2606.
0x2000 0000 - 0x2003 FFFF SRAM (256 KB) SRAM (256KB) SRAM (256KB)
0x1FFF 0000 - 0x1FFF 77FF System memory System memory System memory
0x0802 0000 - 0x1FFE FFFF Reserved Reserved Reserved
0x0800 0000 - 0x080F FFFF Flash memory Flash memory Flash memory
0x0400 000 - 0x07FF FFFF Reserved Reserved Reserved
SRAM1 (256 KB) System memory
0x0000 0000 - 0x0003 FFFF(1) Flash (1M) Aliased
Aliased (30 KB) Aliased
1. Even when aliased in the boot memory space, the related memory is still accessible at its original memory
space.
3.1 Introduction
The Flash memory interface manages CPU AHB I-Code and D-Code accesses to the Flash
memory. It implements the erase and program Flash memory operations and the read and
write protection mechanisms.
The Flash memory interface accelerates code execution with a system of instruction
prefetch and cache lines.
$+%
$+% SHULSK
ELW
'0$ V\VWHPEXV 65$0DQG
([WHUQDO
'0$ PHPRULHV
$+%
SHULSK
$FFHVVWRLQVWUXFWLRQLQ)ODVKPHPRU\
$FFHVVWRGDWDDQGOLWHUDOSRROLQ)ODVKPHPRU\
)/,7)UHJLVWHUDFFHVV
069
3.4.1 Relation between CPU clock frequency and Flash memory read time
To correctly read data from Flash memory, the number of wait states (LATENCY) must be
correctly programmed in the Flash access control register (FLASH_ACR) according to the
frequency of the CPU clock (HCLK) and the supply voltage of the device.
• When VOS[1:0] = 0x01, the maximum value of fHCLK = 64 MHz.
• When VOS[1:0] = 0x10, the maximum value of fHCLK = 84 MHz.
• When VOS[1:0] = 0x11, the maximum value of fHCLK = 100 MHz.
0 WS (1 CPU cycle) 0 < HCLK ≤ 25 0 < HCLK ≤ 20 0 < HCLK ≤ 18 0 < HCLK ≤ 16
1 WS (2 CPU cycles) 25 < HCLK ≤ 50 20 < HCLK ≤ 40 18 < HCLK ≤ 36 16 <HCLK ≤ 32
2 WS (3 CPU cycles) 50 < HCLK ≤ 75 40 < HCLK ≤ 60 36 < HCLK ≤ 54 32 < HCLK ≤ 48
3 WS (4 CPU cycles) 75 < HCLK ≤ 100 60 < HCLK ≤ 80 54 < HCLK ≤ 72 48 < HCLK ≤ 64
4 WS (5 CPU cycles) - 80 < HCLK ≤ 100 72 < HCLK ≤ 90 64 < HCLK ≤ 80
5 WS (6 CPU cycles) - - 90 < HCLK ≤ 100 80 < HCLK ≤ 96
6 WS (7 CPU cycles) - - - 96 < HCLK ≤ 100
After reset, the CPU clock frequency is 16 MHz and 0 wait state (WS) is configured in the
FLASH_ACR register.
It is highly recommended to use the following software sequences to tune the number of
wait states needed to access the Flash memory with the CPU frequency.
Instruction prefetch
Each Flash memory read operation provides 128 bits from either four instructions of 32 bits
or 8 instructions of 16 bits according to the program launched. So, in case of sequential
code, at least four CPU cycles are needed to execute the previous read instruction line.
Prefetch on the I-Code bus can be used to read the next sequential instruction line from the
Flash memory while the current instruction line is being requested by the CPU. Prefetch is
enabled by setting the PRFTEN bit in the FLASH_ACR register. This feature is useful if at
least one wait state is needed to access the Flash memory.
Figure 4 shows the execution of sequential 32-bit instructions with and without prefetch
when 3 WSs are needed to access the Flash memory.
& $ %
7!)4
7ITHOUT PREFETCH
& $ %
& $ %
& $ %
& $ %
7!)4
& $ %
& $
&
!(" PROTOCOL
INS INS INS INS INS INS INS INS
FETCH FETCH FETCH FETCH FETCH FETCH FETCH FETCH ADDRESS REQUESTED
& &ETCH STAGE
$ $ECODE STAGE
2EAD INS 'IVES INS 'IVES INS % %XECUTE STAGE
-36
When the code is not sequential (branch), the instruction may not be present in the currently
used instruction line or in the prefetched instruction line. In this case (miss), the penalty in
terms of number of cycles is at least equal to the number of wait states.
Data management
Literal pools are fetched from Flash memory through the D-Code bus during the execution
stage of the CPU pipeline. The CPU pipeline is consequently stalled until the requested
literal pool is provided. To limit the time lost due to literal pools, accesses through the AHB
databus D-Code have priority over accesses through the AHB instruction bus I-Code.
If some literal pools are frequently used, the data cache memory can be enabled by setting
the data cache enable (DCEN) bit in the FLASH_ACR register. This feature works like the
instruction cache memory, but the retained data size is limited to 8 rows of 128 bits.
Note: Data in user configuration sector are not cacheable.
Note: The FLASH_CR register is not accessible in write mode when the BSY bit in the FLASH_SR
register is set. Any attempt to write to it with the BSY bit set will cause the AHB bus to stall
until the BSY bit is cleared.
Note: Any program or erase operation started with inconsistent program parallelism/voltage range
settings may lead to unpredicted results. Even if a subsequent read operation indicates that
the logical value was effectively written to the memory, this value may not be retained.
To use VPP, an external high-voltage supply (between 8 and 9 V) must be applied to the VPP
pad. The external supply must be able to sustain this voltage range even if the DC
consumption exceeds 10 mA. It is advised to limit the use of VPP to initial programming on
the factory line. The VPP supply must not be applied for more than an hour, otherwise the
Flash memory might be damaged.
3.5.3 Erase
The Flash memory erase operation can be performed at sector level or on the whole Flash
memory (Mass Erase). Mass Erase does not affect the OTP sector or the configuration
sector.
Sector Erase
To erase a sector, follow the procedure below:
1. Check that no Flash memory operation is ongoing by checking the BSY bit in the
FLASH_SR register
2. Set the SER bit and select the sector out of the 16 sectors in the main memory block
you wish to erase (SNB) in the FLASH_CR register
3. Set the STRT bit in the FLASH_CR register
4. Wait for the BSY bit to be cleared
Mass Erase
To perform Mass Erase, the following sequence is recommended:
1. Check that no Flash memory operation is ongoing by checking the BSY bit in the
FLASH_SR register
2. Set the MER bit in the FLASH_CR register
3. Set the STRT bit in the FLASH_CR register
4. Wait for the BSY bit to be cleared
Note: If MERx and SER bits are both set in the FLASH_CR register, mass erase is performed.
If both MERx and SER bits are reset and the STRT bit is set, an unpredictable behavior may
occur without generating any error flag. This condition should be forbidden.
3.5.4 Programming
Standard programming
The Flash memory programming sequence is as follows:
1. Check that no main Flash memory operation is ongoing by checking the BSY bit in the
FLASH_SR register.
2. Set the PG bit in the FLASH_CR register
3. Perform the data write operation(s) to the desired memory address (inside main
memory block or OTP area):
– Byte access in case of x8 parallelism
– Half-word access in case of x16 parallelism
– Word access in case of x32 parallelism
– Double word access in case of x64 parallelism
4. Wait for the BSY bit to be cleared.
Note: Successive write operations are possible without the need of an erase operation when
changing bits from ‘1’ to ‘0’. Writing ‘1’ requires a Flash memory erase operation.
If an erase and a program operation are requested simultaneously, the erase operation is
performed first.
Programming errors
It is not allowed to program data to the Flash memory that would cross the 128-bit row
boundary. In such a case, the write operation is not performed and a program alignment
error flag (PGAERR) is set in the FLASH_SR register.
The write access type (byte, half-word, word or double word) must correspond to the type of
parallelism chosen (x8, x16, x32 or x64). If not, the write operation is not performed and a
program parallelism error flag (PGPERR) is set in the FLASH_SR register.
If the standard programming sequence is not respected (for example, if there is an attempt
to write to a Flash memory address when the PG bit is not set), the operation is aborted and
a program sequence error flag (PGSERR) is set in the FLASH_SR register.
3.5.5 Interrupts
Setting the end of operation interrupt enable bit (EOPIE) in the FLASH_CR register enables
interrupt generation when an erase or program operation ends, that is when the busy bit
(BSY) in the FLASH_SR register is cleared (operation completed, correctly or not). In this
case, the end of operation (EOP) bit in the FLASH_SR register is set.
If an error occurs during a program, an erase, or a read operation request, one of the
following error flags is set in the FLASH_SR register:
• PGAERR, PGPERR, PGSERR (Program error flags)
• WRPERR (Protection error flag)
In this case, if the error interrupt enable bit (ERRIE) is set in the FLASH_CR register, an
interrupt is generated and the operation error bit (OPERR) is set in the FLASH_SR register.
Note: If several successive errors are detected (for example, in case of DMA transfer to the Flash
memory), the error flags cannot be cleared until the end of the successive write requests.
0x1FFF C0000 Reserved ROP & user option bytes (RDP & USER)
0x1FFF C008 Reserved Write protection nWRP bits for sectors 0 to 15
Flash memory are possible in all boot configurations (Flash user boot, debug or boot
from RAM).
• Level 1: read protection enabled
It is the default read protection level after option byte erase. The read protection Level
1 is activated by writing any value (except for 0xAA and 0xCC used to set Level 0 and
Level 2, respectively) into the RDP option byte. When the read protection Level 1 is set:
– No access (read, erase, program) to Flash memory can be performed while the
debug feature is connected or while booting from RAM or system memory
bootloader. A bus error is generated in case of read request.
– When booting from Flash memory, accesses (read, erase, program) to Flash
memory from user code are allowed.
When Level 1 is active, programming the protection option byte (RDP) to Level 0
causes the Flash memory to be mass-erased. As a result the user code area is cleared
before the read protection is removed. The mass erase only erases the user code area.
The other option bytes including write protections remain unchanged from before the
mass-erase operation. The OTP area is not affected by mass erase and remains
unchanged. Mass erase is performed only when Level 1 is active and Level 0
requested. When the protection level is increased (0->1, 1->2, 0->2) there is no mass
erase.
• Level 2: debug/chip read protection disabled
The read protection Level 2 is activated by writing 0xCC to the RDP option byte. When
the read protection Level 2 is set:
– All protections provided by Level 1 are active.
– Booting from RAM or system memory bootloader is no more allowed.
– JTAG, SWV (single-wire viewer), ETM, and boundary scan are disabled.
– User option bytes can no longer be changed.
– When booting from Flash memory, accesses (read, erase and program) to Flash
memory from user code are allowed.
Memory read protection Level 2 is an irreversible operation. When Level 2 is activated,
the level of protection cannot be decreased to Level 0 or Level 1.
Note: The JTAG port is permanently disabled when Level 2 is active (acting as a JTAG fuse). As a
consequence, boundary scan cannot be performed. STMicroelectronics is not able to
perform analysis on defective parts on which the Level 2 protection has been set.
--
,EVEL
2$0 !!H
2$0 ##H
7RITE OPTIONS DEFAULT 7RITE OPTIONS
INCLUDING INCLUDING
2$0 ##H 7RITE OPTIONSINCLUDING 2$0 !!H
2$0 ##H !!H
, EV E L , EV E L
2$0 ##H 2$0 !! H
7RITE OPTIONS
INCLUDING
2$0 ##H
/PTIONS WRITE 2$0 LEVEL DECREASE INCLUDES /PTIONS WRITE 2$0 LEVEL IDENTICAL INCLUDES
-ASS ERASE /PTIONS ERASE
/PTIONS ERASE .EW OPTIONS PROGRAM
.EW OPTIONS PROGRAM
AI
7RITE OPTIONS
30-/$ ACTIVE
AND VALID N720I
,EVEL
2$0 X!!
2$0 X##
7RITE OPTIONS DEFAULT 7RITE OPTIONS .O RESTRICTION ON
30-/$ ACTIVE 30-/$ ACTIVE 7RITE OPTIONS
AND VALID N720I AND VALID N720I
,EVEL ,EVEL
2$0 X## 2$0 X!!
7RITE OPTIONS
30-/$ ACTIVE
7RITE OPTIONS
AND VALID N720I
30-/$ ACTIVE
5SER OPTION SECTOR ERASE AND VALID N720I
0ROGRAM NEW OPTIONS
The deactivation of the SPRMOD and/or the unprotection of PCROPed user sectors can
only occur when, at the same time, the RDP level changes from 1 to 0. If this condition is not
respected, the user option byte modification is canceled and the write error WRPERR flag is
set. The modification of the users option bytes (BOR_LEV, RST_STDBY, ..) is allowed since
none of the active nWRPi bits is reset and SPRMOD is kept active.
Note: The active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1).
The OTP area is divided into 16 OTP data blocks of 32 bytes and one lock OTP block of 16
bytes. The OTP data and lock blocks cannot be erased. The lock block contains 16 bytes
LOCKBi (0 ≤ i ≤ 15) to lock the corresponding OTP data block (blocks 0 to 15). Each OTP
data block can be programmed until the value 0x00 is programmed in the corresponding
OTP lock byte. The lock bytes must only contain 0x00 and 0xFF values, otherwise the OTP
bytes might not be taken into account correctly.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. DCRST ICRST DCEN ICEN PRFTEN Res. Res. Res. Res. LATENCY
rw w rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[31:16]
w w w w w w w w w w w w w w w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[15:0]
w w w w w w w w w w w w w w w w
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
OPTKEYR[31:16
w w w w w w w w w w w w w w w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OPTKEYR[15:0]
w w w w w w w w w w w w w w w w
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. BSY
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. RDERR PGSERR PGPERR PGAERR WRPERR Res. Res. OPERR EOP
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LOCK Res. Res. Res. Res. Res. ERRIE EOPIE Res. Res. Res. Res. Res. Res. Res. STRT
rs rw rw rs
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. PSIZE[1:0] Res. SNB[3:0] MER SER PG
rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SPR nWRP
nWRP[13:0]
MOD 14_15
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
nRST_ nRST_ WDG_ OPT OPT
RDP[7:0] Res. BOR_LEV
STDBY STOP SW STRT LOCK
rw rw rw rw rw rw rw rw rw rw rw rw rw rs rs
Offset Register 31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
PRFTEN
DCRST
ICRST
DCEN
ICEN
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FLASH_ACR LATENCY
0x00
Reset value 0 0 0 0 0 0 0 0 0
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FLASH_
OPTKEYR[31:16] OPTKEYR[15:0]
0x08 OPTKEYR
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
WRPERR
PGSERR
PGPERR
PGAERR
RDERR
OPERR
EOP
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
BSY
FLASH_SR
0x0C
Reset value 0 0 0 0 0 0 0 0
PSIZE[1:0]
ERRIE
EOPIE
LOCK
STRT
MER
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
SER
PG
FLASH_CR SNB[3:0]
0x10
Reset value 1 0 0 0 0 0 0 0 0 0 0 0 0
nRST_STDBY
nRST_STOP
nWRP14_15
OPTLOCK
OPTSTRT
WDG_SW
BOR_LEV
SPRMOD
Res.
FLASH_OPTCR nWRP[13:0] RDP[7:0]
0x14
Reset value 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1
$+%EXV
ELW UHDGDFFHVV
'DWDUHJLVWHU RXWSXW
&5&FRPSXWDWLRQ SRO\QRPLDO[&'%
ELW ZULWHDFFHVV
'DWDUHJLVWHU LQSXW
DL
Each write operation into the data register creates a combination of the previous CRC value
and the new one (CRC computation is done on the whole 32-bit data word, and not byte per
byte).
The write operation is stalled until the end of the CRC computation, thus allowing back-to-
back write accesses or consecutive write and read accesses.
The CRC calculator can be reset to 0xFFFF FFFF with the RESET control bit in the
CRC_CR register. This operation does not affect the contents of the CRC_IDR register.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DR [31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DR [15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. IDR[7:0]
rw rw rw rw rw rw rw rw
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. RESET
Offset
RM0430
CRC_CR
CRC_DR
CRC_IDR
Register
Reset value
Reset value
Reset value
Res. Res. 31
Res. Res. 30
Res. Res. 29
Res. Res. 28
Res. Res. 27
CRC register map
Res. Res. 26
Res. Res. 25
Res. Res. 24
Res. Res. 23
Res. Res. 22
Res. Res. 21
Res. Res. 20
Res. Res. 19
Res. Res. 18
RM0430 Rev 8
Res. Res. 17
Res. Res. 16
Res. Res. 15
Data register
0xFFFF FFFF
Res. Res. 14
Res. Res. 13
Res. Res. 12
Res. Res. 11
Res. Res. 10
Res. Res. 9
Res. Res. 8
Table 14. CRC calculation unit register map and reset values
Res. 7
Res. 6
Res. 5
Res. 4
Res. 3
0x0000
Res. 2
Res. 1
Independent data register
93/1324
CRC calculation unit
RESET 0
93
Power controller (PWR) RM0430
9%$7
%DFNXSFLUFXLWU\
9%$7 3RZHU 26&.57&
WR9 VZLWFK :DNHXSORJLF
%DFNXSUHJLVWHUV
287
/HYHOVKLIWHU
,2
*3,2V
,1 /RJLF
9&$3B .HUQHOORJLF
î) 9&$3B &38GLJLWDO
5$0
9'' 9''
9ROWDJH
îQ) 966 UHJXODWRU
î)
06Y9
To allow the RTC to operate even when the main digital supply (VDD) is turned off, the VBAT
pin powers the following blocks:
• The RTC
• The LSE oscillator
• PC13 to PC15 I/Os
The switch to the VBAT supply is controlled by the power-down reset embedded in the Reset
block.
If no external battery is used in the application, it is recommended to connect the VBAT pin to
VDD with a 100 nF external decoupling ceramic capacitor in parallel.
When the backup domain is supplied by VDD (analog switch connected to VDD), the
following functions are available:
• PC14 and PC15 can be used as either GPIO or LSE pins
• PC13 can be used as a GPIO or additional functions can be configured (refer to
Table 27: RTC additional functions for more details about this pin configuration)
Note: Due to the fact that the switch only sinks a limited amount of current (3 mA), the use of
PC13 to PC15 GPIOs in output mode is restricted: the speed has to be limited to 2 MHz with
a maximum load of 30 pF and these I/Os must not be used as a current source (e.g. to drive
an LED).
When the backup domain is supplied by VBAT (analog switch connected to VBAT because
VDD is not present), the following functions are available:
• PC14 and PC15 can be used as LSE pins only
• PC13 can be used as the RTC additional function pin (refer to Table 27: RTC additional
functions for more details about this pin configuration)
Note: For more details, refer to the voltage regulator section in the STM32F413/423 datasheet.
0$2
M6
HYSTERESIS 0$2
4EMPORIZATION
T2344%-0/
2ESET
-36
When the supply voltage (VDD) drops below the selected VBOR threshold, a device reset is
generated.
The BOR can be disabled by programming the device option bytes. In this case, the
power-on and power-down is then monitored by the POR/ PDR or by an external power
supervisor if the PDR is switched off through the PDR_ON pin (see Section 5.2.1: Power-on
reset (POR)/power-down reset (PDR)).
The BOR threshold hysteresis is ~100 mV (between the rising and the falling edge of the
supply voltage).
2ESET
-36
39'WKUHVKROG P9
K\VWHUHVLV
39'RXWSXW
069
Only enabled NVIC interrupts with sufficient priority will wakeup and interrupt the MCU.
Main regulator or
Low-Power
SLEEPDEEP bit Any EXTI line (configured
regulator (depends
Stop + WFI, Return in the EXTI registers,
on PWR power
from ISR or WFE internal and external lines)
control register
HSI and (PWR_CR)
All 1.2 V domain HSE
WKUP pin rising edge, clocks OFF oscillator
RTC alarm (Alarm A or s OFF
PDDS bit +
Alarm B), RTC Wakeup
SLEEPDEEP bit
Standby event, RTC tamper OFF
+ WFI, Return
events, RTC time stamp
from ISR or WFE
event, external reset in
NRST pin, IWDG reset
1. Refer to Section 5.3.4: Batch acquisition mode for specific BAM entry and exit requirements.
Mode exit Interrupt: refer to Table 40: Vector table for STM32F413/423
Wakeup latency None
Exiting BAM
The BAM is exited according to Section : Exiting low-power mode.
Refer to Table 18 and Table 19 for more details on how to exit Sleep mode.
After waking up from BAM, the Flash memory must first to be waked up if code execution
restarts from Flash memory.
This wakeup time must be managed by software running from the internal SRAM.
Note: The BAM has been enhanced by adding SRAM2 that allows SRAM code to be executed
through the Ibus and Dbus, thus improving code execution performance.
Debug mode
By default, the debug connection is lost if the application puts the MCU in Stop or Standby
mode while the debug features are used. This is due to the fact that the Cortex®-M4 with
FPU core is no longer clocked.
However, by setting some configuration bits in the DBGMCU_CR register, the software can
be debugged even when using the low-power modes extensively. For more details, refer to
Section 34.16.1: Debug support for low-power modes.
5.3.7 Programming the RTC alternate functions to wake up the device from
the Stop and Standby modes
The MCU can be woken up from a low-power mode by an RTC alternate function.
The RTC alternate functions are the RTC alarms (Alarm A and Alarm B), RTC wakeup, RTC
tamper event detection and RTC time stamp event detection.
These RTC alternate functions can wake up the system from the Stop and Standby low-
power modes.
The system can also wake up from low-power modes without depending on an external
interrupt (Auto-wakeup mode), by using the RTC alarm or the RTC wakeup events.
The RTC provides a programmable time base for waking up from the Stop or Standby mode
at regular intervals.
For this purpose, two of the three alternate RTC clock sources can be selected by
programming the RTCSEL[1:0] bits in the Section 6.3.23: RCC Backup domain control
register (RCC_BDCR):
• Low-power 32.768 kHz external crystal oscillator (LSE OSC)
This clock source provides a precise time base with a very low-power consumption
(additional consumption of less than 1 µA under typical conditions)
• Low-power internal RC oscillator (LSI RC)
This clock source has the advantage of saving the cost of the 32.768 kHz crystal. This
internal RC oscillator is designed to use minimum power.
RTC alternate functions to wake up the device from the Stop mode
• To wake up the device from the Stop mode with an RTC alarm event, it is necessary to:
a) Configure the EXTI Line 17 to be sensitive to rising edges (Interrupt or Event
modes)
b) Enable the RTC Alarm Interrupt in the RTC_CR register
c) Configure the RTC to generate the RTC alarm
• To wake up the device from the Stop mode with an RTC tamper or time stamp event, it
is necessary to:
a) Configure the EXTI Line 21 to be sensitive to rising edges (Interrupt or Event
modes)
b) Enable the RTC time stamp Interrupt in the RTC_CR register or the RTC tamper
interrupt in the RTC_TAFCR register
c) Configure the RTC to detect the tamper or time stamp event
• To wake up the device from the Stop mode with an RTC wakeup event, it is necessary
to:
a) Configure the EXTI Line 22 to be sensitive to rising edges (Interrupt or Event
modes)
b) Enable the RTC wakeup interrupt in the RTC_CR register
c) Configure the RTC to generate the RTC Wakeup event
RTC alternate functions to wake up the device from the Standby mode
• To wake up the device from the Standby mode with an RTC alarm event, it is necessary
to:
a) Enable the RTC alarm interrupt in the RTC_CR register
b) Configure the RTC to generate the RTC alarm
• To wake up the device from the Standby mode with an RTC tamper or time stamp
event, it is necessary to:
a) Enable the RTC time stamp interrupt in the RTC_CR register or the RTC tamper
interrupt in the RTC_TAFCR register
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. FISSR FMSSR Res. Res. Res. Res.
rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MRLV LPLV
VOS ADCDC1 Res. FPDS DBP PLS[2:0] PVDE CSBF CWUF PDDS LPDS
DS DS
rw rw rw rw rw rw rw rw rw rw rw w w rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
VOS EWUP EWUP EWUP
Res. Res. Res. Res. Res. BRE Res. Res. BRR PVDO SBF WUF
RDY 1 2 3
r rw rw rw rw r r r r
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
ADCDC1
MRLVDS
VOS[1:0]
LPLVDS
FMSSR
CWUF
FISSR
PDDS
PVDE
FPDS
CSBF
LPDS
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
DBP
PWR_CR PLS[2:0]
0x000
Reset value 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
VOSRDY
EWUP1
EWUP2
EWUP3
PVDO
WUF
BRR
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
BRE
SBF
PWR_CSR
0x004
Reset value 0 0 0 0 0 0 0 0 0
6.1 Reset
There are three types of reset, defined as system Reset, power Reset and backup domain
Reset.
Software reset
The reset source can be identified by checking the reset flags in the RCC clock control &
status register (RCC_CSR).
The SYSRESETREQ bit in Cortex®-M4 with FPU Application Interrupt and Reset Control
Register must be set to force a software reset on the device. Refer to the Cortex®-M4 with
FPU technical reference manual for more details.
9''9''$
538
([WHUQDO 6\VWHPUHVHW
UHVHW )LOWHU
1567
::'*UHVHW
3XOVH
,:'*UHVHW
JHQHUDWRU
3RZHUUHVHW
PLQV
6RIWZDUHUHVHW
/RZSRZHUPDQDJHPHQWUHVHW
DLF
6.2 Clocks
Three different clock sources can be used to drive the system clock (SYSCLK):
• HSI oscillator clock
• HSE oscillator clock
• Main PLL (PLL) clock
The devices have the two following secondary clock sources:
• 32 kHz low-speed internal RC (LSI RC) which drives the independent watchdog and,
optionally, the RTC used for Auto-wakeup from the Stop/Standby mode.
• 32.768 kHz low-speed external crystal (LSE crystal) which optionally drives the RTC
clock (RTCCLK)
Each clock source can be switched on or off independently when it is not used, to optimize
power consumption.
&.')6'0$6(/ ')6'0
,665& ,SHQDEOH
FNBSOOLVBH[W
')6'0
,&6(/ FORFNV
+6BFN 6$,$65& FNBKVL ,SHQDEOH
3//',95
,SHQDEOH FNBV\V
5 ,&
GLYWR FNBDSE ,SHQDEOH FORFNV
,6B&.,1
6$,B$
6$,%65& FORFNV
3//,6',95 ,SHQDEOH
,SHQDEOH
GLYWR 5 6$,B%
#9 #9 GLVDEOHBGHEXJ FORFNV
/ FNBMWFN
6 -7$*
3$' FORFNV 06Y9
1. For full details about the internal and external clock source characteristics, refer to the Electrical characteristics section in
the device datasheet.
The clock controller provides a high degree of flexibility to the application in the choice of the
external crystal or the oscillator to run the core and peripherals at the highest frequency
and, guarantee the appropriate frequency for peripherals that need a specific clock like USB
OTG FS, I2S and SDIO.
Several prescalers are used to configure the AHB frequency, the high-speed APB (APB2)
and the low-speed APB (APB1) domains. The maximum frequency of the AHB domain is
100 MHz. The maximum allowed frequency of the high-speed APB2 domain is 100 MHz.
The maximum allowed frequency of the low-speed APB1 domain is 50 MHz
All peripheral clocks are derived from the system clock (SYSCLK) except for:
• The USB OTG FS clock (48 MHz) and the SDIO clock (≤ 48 MHz) which are coming
from a specific output of PLL (PLL48CLK)
• The I2S clock
To achieve high-quality audio performance, the I2S clock can be derived either from a
specific PLL (PLLI2S) or from an external clock mapped on the I2S_CKIN pin. For
more information about I2S clock frequency and precision, refer to Section 29.6.4:
Clock generator.
• I2CFMP1 clock which can also be generated from HSI, SYSCLK or APB1 clock.
The RCC feeds the external clock of the Cortex System Timer (SysTick) with the AHB clock
(HCLK) divided by 8. The SysTick can work either with this clock or with the Cortex clock
(HCLK), configurable in the SysTick control and status register.
The timer clock frequencies are automatically set by hardware. There are two cases
depending on the value of TIMPRE bit in RCC_DCKCFGR register:
• If TIMPRE bit is reset:
If the APB prescaler is configured to a division factor of 1, the timer clock frequencies
(TIMxCLK) are set to HCLK. Otherwise, the timer clock frequencies are twice the
frequency of the APB domain to which the timers are connected: TIMxCLK = 2xPCLKx.
• If TIMPRE bit is set:
If the APB prescaler is configured to a division factor of 1 or 2, the timer clock
frequencies (TIMxCLK) are set to HCLK. Otherwise, the timer clock frequencies is four
times the frequency of the APB domain to which the timers are connected: TIMxCLK =
4xPCLKx.
FCLK acts as Cortex®-M4 with FPU free-running clock. For more details, refer to the
Cortex®-M4 with FPU technical reference manual.
OSC_OUT
External clock
(HI-Z)
External
source
OSC_IN OSC_OUT
Crystal/ceramic
resonators
CL1 CL2
Load
capacitors
Calibration
RC oscillator frequencies can vary from one chip to another due to manufacturing process
variations, this is why each device is factory calibrated by ST for 1% accuracy at TA= 25 °C.
After reset, the factory calibration value is loaded in the HSICAL[7:0] bits in the RCC clock
control register (RCC_CR).
If the application is subject to voltage or temperature variations this may affect the RC
oscillator speed. You can trim the HSI frequency in the application using the HSITRIM[4:0]
bits in the RCC clock control register (RCC_CR).
The HSIRDY flag in the RCC clock control register (RCC_CR) indicates if the HSI RC is
stable or not. At startup, the HSI RC output clock is not released until this bit is set by
hardware.
The HSI RC can be switched on and off using the HSION bit in the RCC clock control
register (RCC_CR).
The HSI signal can also be used as a backup source (Auxiliary clock) if the HSE crystal
oscillator fails. Refer to Section 6.2.7: Clock security system (CSS) on page 124.
The LSE oscillator is switched on and off using the LSEON bit in RCC Backup domain
control register (RCC_BDCR).
The LSERDY flag in the RCC Backup domain control register (RCC_BDCR) indicates if the
LSE crystal is stable or not. At startup, the LSE crystal output clock signal is not released
until this bit is set by hardware. An interrupt can be generated if enabled in the RCC clock
interrupt register (RCC_CIR).
CSS interrupt in the NMI ISR by setting the CSSC bit in the Clock interrupt register
(RCC_CIR).
If the HSE oscillator is used directly or indirectly as the system clock (indirectly meaning that
it is directly used as PLL input clock, and that PLL clock is the system clock) and a failure is
detected, then the system clock switches to the HSI oscillator and the HSE oscillator is
disabled.
If the HSE oscillator clock was the clock source of PLL used as the system clock when the
failure occurred, PLL is also disabled. In this case, if the PLLI2S was enabled, it is also
disabled when the HSE fails.
The basic concept consists in providing a relative measurement (e.g. HSI/LSE ratio): the
precision is therefore tightly linked to the ratio between the two clock sources. The greater
the ratio, the better the measurement.
It is also possible to measure the LSI frequency: this is useful for applications that do not
have a crystal. The ultralow-power LSI oscillator has a large manufacturing process
deviation: by measuring it versus the HSI clock source, it is possible to determine its
frequency with the precision of the HSI. The measured value can be used to have more
accurate RTC time base timeouts (when LSI is used as the RTC clock source) and/or an
IWDG timeout with an acceptable accuracy.
Use the following procedure to measure the LSI frequency:
1. Enable the TIM5 timer and configure channel4 in Input capture mode.
2. Set the TI4_RMP bits in the TIM5_OR register to 0x01 to connect the LSI clock
internally to TIM5 channel4 input capture for calibration purposes.
3. Measure the LSI clock frequency using the TIM5 capture/compare 4 event or interrupt.
4. Use the measured LSI frequency to update the prescaler of the RTC depending on the
desired time base and/or to compute the IWDG timeout.
4)-
4)?2-0;=
'0)/
24#?7AKE5P?)4 4)
,3%
,3)
AI6
4)-
4)?2-0;=
'0)/
4)
(3%?24# -(Z
AI
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLLI2S PLLI2S CSS HSE HSE
Res. Res. Res. Res. PLLRDY PLLON Res. Res. Res. Res. HSE ON
RDY ON ON BYP RDY
r rw r rw rw rw r rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HSI
HSICAL[7:0] HSITRIM[4:0] Res. HSION
RDY
r r r r r r r r rw rw rw rw rw r rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. PLLR[2:0] PLLQ[3:0] Res. PLLSRC Res. Res. Res. Res. PLLP[1:0]
rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. PLLN[8:0] PLLM[5:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Bit 22 PLLSRC: Main PLL(PLL) and audio PLL (PLLI2S) entry clock source
Set and cleared by software to select PLL and PLLI2S clock source. This bit can be written
only when PLL and PLLI2S are disabled.
0: HSI clock selected as PLL and PLLI2S clock entry
1: HSE oscillator clock selected as PLL and PLLI2S clock entry
Bits 21:18 Reserved, must be kept at reset value.
Bits 17:16 PLLP[1:0]: Main PLL (PLL) division factor for main system clock
Set and cleared by software to control the frequency of the general PLL output clock. These
bits can be written only if PLL is disabled.
Caution: The software has to set these bits correctly not to exceed 100 MHz on this domain.
PLL output clock frequency = VCO frequency / PLLP with PLLP = 2, 4, 6, or 8
00: PLLP = 2
01: PLLP = 4
10: PLLP = 6
11: PLLP = 8
Bits 14:6 PLLN[8:0]: Main PLL (PLL) multiplication factor for VCO
Set and cleared by software to control the multiplication factor of the VCO. These bits can
be written only when PLL is disabled. Only half-word and word accesses are allowed to
write these bits.
Caution: The software has to set these bits correctly to ensure that the VCO output
frequency is between 100 and 432 MHz. (check also Section 6.3.26: RCC PLLI2S
configuration register (RCC_PLLI2SCFGR))
VCO output frequency = VCO input frequency × PLLN with 50 ≤ PLLN ≤ 432
000000000: PLLN = 0, wrong configuration
000000001: PLLN = 1, wrong configuration
...
000110010: PLLN = 50
...
001100011: PLLN = 99
001100100: PLLN = 100
...
110110000: PLLN = 432
110110001: PLLN = 433, wrong configuration
...
111111111: PLLN = 511, wrong configuration
Note: Multiplication factors possible for VCO input frequency higher than 1 MHz but care
must be taken to fulfill the VCO output frequency range as specified above.
Bits 5:0 PLLM[5:0]: Division factor for the main PLL (PLL) input clock
Set and cleared by software to divide the PLL and PLLI2S input clock before the VCO.
These bits can be written only when the PLL and PLLI2S are disabled.
Caution: The software has to set these bits correctly to ensure that the VCO input frequency
ranges from 1 to 2 MHz. It is recommended to select a frequency of 2 MHz to limit
PLL jitter.
VCO input frequency = PLL input clock frequency / PLLM with 2 ≤ PLLM ≤ 63
000000: PLLM = 0, wrong configuration
000001: PLLM = 1, wrong configuration
000010: PLLM = 2
000011: PLLM = 3
000100: PLLM = 4
...
111110: PLLM = 62
111111: PLLM = 63
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw r r rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
w w w w w w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLLI2S PLL HSE HSI LSE LSI PLLI2S PLL HSE HSI LSE LSI
Res. Res. CSSF Res.
RDYIE RDYIE RDYIE RDYIE RDYIE RDYIE RDYF RDYF RDYF RDYF RDYF RDYF
rw rw rw rw rw rw r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DMA2 DMA1
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
RST RST
rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPIOH GPIOG GPIOF GPIOE GPIOD GPIOC GPIOB GPIOA
Res. Res. Res. CRCRST Res. Res. Res. Res.
RST RST RST RST RST RST RST RST
rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OTGFS RNG
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
RST RST
rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OTGFS RNG CRYP
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
RST RST RST
rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FSMC
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. QSPIRST
RST
rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
UART8 UART7 DAC PWR CAN3 CAN2 CAN1 I2C4 I2C3 I2C2 I2C1 UART5 UART4 USART3 USART2
Res.
RST RST RST RST RST RST RST RST RST RST RST RST RST RST RST
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SPI3 SPI2 WWDG LPTIMER1 TIM14 TIM13 TIM12 TIM7 TIM6 TIM5 TIM4 TIM3 TIM2
Res. Res. Res.
RST RST RST RST RST RST RST RST RST RST RST RST RST
rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DFSDM2 DFSDM1 SAI1 SPI5 TIM11 TIM10 TIM9
Res. Res. Res. Res. Res. Res. Res. Res. Res.
RST RST RST RST RST RST RST
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SYSCFG SPI4 SPI1 SDIO ADC UART10 UART9 USART6 USART1 TIM8 TIM1
Res. Res. Res. Res. Res.
RST RST RST RST RST RST RST RST RST RST RST
rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. DMA2EN DMA1EN Res. Res. Res. Res. Res.
rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPIOH GPIOG GPIOF GPIOE GPIOD GPIOC GPIOB GPIOA
Res. Res. Res. CRCEN Res. Res. Res. Res.
EN EN EN EN EN EN EN EN
rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OTGFS RNG
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
EN EN
rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OTGFS CRYP
Res. Res. Res. Res. Res. Res. Res. Res. MGEN Res. Res. Res. Res. Res.
EN EN
rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
QSPI FSMC
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
EN EN
rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
UART8 UART7 DAC PWR CAN3 CAN2 CAN1 I2CFMP1 I2C3 I2C2 I2C1 UART4 UART4 USART3 USART2
Res.
EN EN EN EN EN EN EN EN EN EN EN EN EN EN EN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SPI3 SPI2 WWDG RTCAPB LPTIMER1 TIM14 TIM13 TIM12 TIM7 TIM6 TIM5 TIM4 TIM3 TIM2
Res. Res.
EN EN EN EN EN EN EN EN EN EN EN EN EN EN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DFSDM2 DFSDM1 SAI1 SPI5 TIM11 TIM10 TIM9
Res. Res. Res. Res. Res. Res. Res. Res. Res.
EN EN EN EN EN EN EN
rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTIT SYSCFG SPI1 SDIO ADC1 UART10 UART9 USART6 USART1 TIM8 TIM1
SPI4EN Res. Res. Res. Res.
EN EN EN EN EN EN EN EN EN EN EN
rw rw rw rw rw rw rw rw rw rw rw rw
6.3.17 RCC AHB1 peripheral clock enable in low power mode register
(RCC_AHB1LPENR)
Address offset: 0x50
Reset value: 0x0063 90FF
Access: no wait state, word, half-word and byte access.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DMA2 DMA1 SRAM2 SRAM1
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
LPEN LPEN LPEN LPEN
rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FLITF CRC GPIOH GPIOG GPIOF GPIOE GPIOD GPIOC GPIOB GPIOA
Res. Res. Res. Res. Res. Res.
LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN
rw rw rw rw rw rw rw rw rw rw
6.3.18 RCC AHB2 peripheral clock enable in low power mode register
(RCC_AHB2LPENR) for STM32F413xx
Address offset: 0x54
Reset value: 0x0000 00C0
Access: no wait state, word, half-word and byte access.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OTGFS RNG
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
LPEN LPEN
rw rw
6.3.19 RCC AHB2 peripheral clock enable in low power mode register
(RCC_AHB2LPENR) for STM32F423xx
Address offset: 0x54
Reset value: 0x0000 00D0
Access: no wait state, word, half-word and byte access.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OTGFS RNG CRYP
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
LPEN LPEN LPEN
rw rw rw
6.3.20 RCC AHB3 peripheral clock enable in low power mode register
(RCC_AHB3LPENR)
Address offset: 0x58
Reset value: 0x0000 0003
Access: no wait state, word, half-word and byte access.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
QSPI FSMC
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
LPEN LPEN
rw rw
6.3.21 RCC APB1 peripheral clock enable in low power mode register
(RCC_APB1LPENR)
Address offset: 0x60
Reset value: 0xFFFF CFFF
Access: no wait state, word, half-word and byte access.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
UART8 UART7 DACLP PWR CAN3 CAN2 CAN1 I2C4 I2C3 I2C2 I2C1 UART5 UART4 USART3 USART2
Res.
LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN
rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SPI3 SPI2 WWDG RTCAPB IPTIMER1 TIM14 TIM13 TIM12 TIM7 TIM6 TIM5 TIM4 TIM3 TIM2
Res. Res.
LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
6.3.22 RCC APB2 peripheral clock enabled in low power mode register
(RCC_APB2LPENR)
Address offset: 0x64
Reset value: 0x0317 F9F3h
Access: no wait state, word, half-word and byte access.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DFSDM2 DFSDM1 SAI1 SPI5 TIM11 TIM10 TIM9
Res. Res. Res. Res. Res. Res. Res. Res. Res.
LPEN LPEN IPEN LPEN LPEN LPEN LPEN
rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SYSC
EXTIT SPI4LP SPI1 SDIO ADC1 UART10 UART9 USART6 USART1 TIM8 TIM1
FG Res. Res. Res. Res.
LPEN EN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN LPEN
LPEN
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. BDRST
rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RTCEN Res. Res. Res. Res. Res. RTCSEL[1:0] Res. Res. Res. Res. LSEMOD LSEBYP LSERDY LSEON
rw rw rw rw rw r rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LPWR WWDG IWDG SFT POR PIN BORRS
RMVF Res. Res. Res. Res. Res. Res. Res. Res.
RSTF RSTF RSTF RSTF RSTF RSTF TF
r r r r r r r rt_w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. LSIRDY LSION
r rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SSCG SPREAD
Res. Res. INCSTEP[14:3]
EN SEL
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
INCSTEP[2:0] MODPER[11:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res Res Res Res
Res. PLLI2SR[2:0] PLLI2SQ[3:0] Res. PLLI2SSRC Res. Res.
. . . .
rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. PLLI2SN[8:0] PLLI2SM[5:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CKDFSD
Res. Res. I2S2RC[1:0] I2S1RC[1:0] TIMPRE SAI1BSRC SAI1ASRC Res. Res. Res. Res.
M1SEL
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CKDFSD CKDFSD
PLLDIVR Res. Res. Res. Res. PLL2SDIVR
M1ASEL M2ASEL
rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EVTCL RCC FLITF SRAM SPARE CM4DBG AHB2APB2 AHB2APB1
Res. Res. Res. Res. Res. Res. Res. Res.
_CKEN _CKEN _CKEN _CKEN _CKEN _CKEN _CKEN _CKEN
rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LPTIMER1 SDIO CK48M I2CFMP1
Res. Res. Res. Res. Res. Res. Res. Res.
SEL SEL SEL SEL[1:0]
rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
0x2C
0x1C
0x0C
Addr.
offset
6.3.30
RM0430
CR
CIR
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
CFGR
name
PLLCFGR
AHB2ENR
AHB1ENR
Register
APB2RSTR
APB1RSTR
AHB3RSTR
AHB2RSTR
AHB1RSTR
Res. Res. Res. UART8RST Res. Res. Res. Res. Res. Res. 31
MCO2[1:0]
Res. Res. Res. UART7RST Res. Res. Res. Res. Res. 30
Res. Res. Res. DACRST Res. Res. Res. Res. Res. 29
Res. Res. Res. PWRRST Res. Res. Res. Res. MCO2PRE[2:0] Res.
PLLR[2:0]
28
Res. Res. Res. CAN3RST Res. Res. Res. Res. PLL I2SRDY 27
Res. Res. Res. CAN2RST Res. Res. Res. Res. PLL I2SON 26
RCC register map
Res. Res. DFSDM2RST CAN1RST Res. Res. Res. Res. MCO1PRE[2:0] PLL RDY 25
PLLQ[3:0]
Res. Res. DFSDM1RST I2CFMP1RST Res. Res. Res. Res. PLL ON 24
Res. Res. Res. I2C3RST Res. Res. Res. CSSC Res. Res. Res. 23
Res. DMA2EN SAI1RST I2C2RST Res. Res. DMA2RST Res. PLLSRC Res. 22
MCO1[1:0]
Res. DMA1EN Res. I2C1RST Res. Res. DMA1RST PLLI2SRDYC Res. Res. 21
Res. Res. SPI5RST UART5RST Res. Res. Res. PLLRDYC Res. Res. 20
Res. Res. Res. UART4 RST Res. Res. Res. HSERDYC Res. CSSON 19
Res. Res. TIM11RST USART3RST Res. Res. Res. HSIRDYC Res. HSEBYP 18
Res. Res. TIM10RST USART2RST Res. Res. Res. LSERDYC HSERDY 17
RM0430 Rev 8
PLLP[1:0]
Reserved
Reserved
Reserved
RTCPRE[4:0]
Res. Res. TIM9RST Res. Res. Res. Res. LSIRDYC HSEON 16
Table 24 gives the register map and reset values
9
Res. Res. ADCRST TIM14RST Res. Res. Res. LSIRDYIE Res. 8
OTGFSEN GPIOHEN UART10RST TIM13RST Res. OTGFSRST GPIOHRST CSSF 7
Table 24. RCC register map and reset values for STM32F413/423
181/1324
183
0x78
0x74
0x70
0x68
0x64
0x60
0x58
0x54
0x50
0x48
0x44
0x40
0x38
0x7C
0x6C
0x5C
0x4C
0x3C
Addr.
offset
182/1324
CSR
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
RCC_
BDCR
name
APB2ENR
APB1ENR
AHB3ENR
Register
APB2LPENR
APB1LPENR
AHB3LPENR
AHB2LPENR
AHB1LPENR
LPWRRSTF Res. Res. UART8LPEN Res. Res. Res. Res. UART8EN Res. 31
WWDGRSTF Res. Res. UART7LPEN Res. Res. Res. Res. UART7EN Res. 30
WDGRSTF Res. Res. DACLPEN Res. Res. Res. Res. DACEN Res. 29
SFTRSTF Res. Res. PWRLPEN Res. Res. Res. Res. PWREN Res. 28
PORRSTF Res. Res. CAN3LPEN Res. Res. Res. Res. CAN3EN Res. 27
PADRSTF Res. Res. CAN2LPEN Res. Res. Res. Res. CAN2EN Res. 26
BORRSTF Res. DFSDM2LPEN CAN1LPEN Res. Res. Res. DFSDM2EN CAN1EN Res. 25
RMVF Res. DFSDM1LPEN I2CFMP1LPEN Res. Res. Res. DFSDM1EN I2CFMP1EN Res. 24
Res. Res. Res. I2C3LPEN Res. Res. Res. Res. I2C3EN Res. 23
Res. Res. Res. I2C2LPEN Res. Res. DMA2LPEN SAI1EN I2C2EN Res. 22
Res. Res. SAI1LPEN I2C1LPEN Res. Res. DMA1LPEN Res. I2C1EN Res. 21
Res. Res. SPI5LPEN UART5LPEN Res. Res. Res. SPI5EN UART5EN Res. 20
Res. Res. Res. UART4 LPEN Res. Res. Res. Res. UART4 EN Res. 19
Reset and clock control (RCC) for STM32F413/423
Res. Res. TIM11LPEN USART3LPEN Res. Res. Res. TIM11EN USART3EN Res. 18
Res. Res. TIM10LPEN USART2LPEN Res. Res. SRAM2LPEN TIM10EN USART2EN Res. 17
RM0430 Rev 8
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Res. BDRST TIM9LPEN Res. Res. Res. SRAM1LPEN TIM9EN Res. Res. 16
Res. RTCEN EXTITEN SPI3LPEN Res. Res. FLITFLPEN Res. SPI3EN Res. 15
Res. Res. SYSCFGLPEN SPI2LPEN Res. Res. Res. SYSCFGEN SPI2EN Res. 14
Res. Res. SPI4LPEN Res. Res. Res. Res. SPI4EN Res. Res. 13
Res. Res. SPI1LPEN Res. Res. Res. CRCLPEN SPI1EN Res. Res. 12
Res. Res. SDIOLPEN WWDGLPEN Res. Res. Res. SDIOEN WWDGEN Res. 11
Res. Res. Res. Res. Res. Res. Res. Res. RTCAPBEN Res. 10
Res. Res. LPTIMER1EN Res. Res. Res. Res. LPTIMER1EN Res. 9
RTCSEL[1:0]
Res. ADC1LPEN TIM14LPEN Res. Res. Res. ADC1EN TIM14EN Res. 8
Res. Res. UART10LPEN TIM13LPEN Res. OTGFSLPEN GPIOHLPEN UART10EN TIM13EN Res. 7
Res. Res. UART9LPEN TIM12LPEN Res. RNGLPEN GPIOGLPEN UART9EN TIM12EN Res. 6
Res. Res. USART6LPEN TIM7LPEN Res. Res. GPIOFLPEN USART6EN TIM7EN Res. 5
Res. Res. USART1LPEN TIM6LPEN Res. (1) GPIOELPEN USART1EN TIM6EN Res.
CRYPLPEN
Table 24. RCC register map and reset values for STM32F413/423 (continued)
4
Res. LSEMOD Res. TIM5LPEN Res. Res. GPIODLPEN Res. TIM5EN Res. 3
Res. LSEBYP Res. TIM4LPEN Res. Res. GPIOCLPEN Res. TIM4EN Res. 2
LSIRDY LSERDY TIM8LPEN TIM3LPEN QSPILPEN Res. GPIOBLPEN TIM8EN TIM3EN QSPIEN 1
LSION LSEON TIM1LPEN TIM2LPEN FSMCLPEN Res. GPIOALPEN TIM1EN TIM2EN FSMCEN 0
RM0430
0x94
0x90
0x88
0x84
0x80
0x8C
Addr.
offset
RM0430
RCC_
RCC_
RCC_
RCC_
name
SSCGR
DCKCFGR
Register
DCKCFGR2
CKGATENR
PLLI2SCFGR
LPTIMER1SEL1 CKDFSDM1SEL Res. SSCGEN 31
LPTIMER1SEL0 Res. SPREADSEL 30
Res. Res. PLLI2SR[2:0] Res. 29
SDIOSEL Res. 28
I2S2SRC[1:0]
RM0430 Rev 8
Reserved
PLLDIVR[4:0]]
Res. 8
Res. EVTCL_CKEN Res. 7
Res. RCC_CKEN Res. 6
Res. FLITF_CKEN Res. 5
MODPER[11:0]
Res. SRAM12_CKGA_BPEN
Table 24. RCC register map and reset values for STM32F413/423 (continued)
4
Res. SPARE _CKEN 3
Res. CM4DBG_CKEN 2
Res. AHB2APB2_CKEN
PLLI2SM[5:0]
1
Res. AHB2APB1_CKEN
PLLI2SDIVR[4:0]]
0
Reset and clock control (RCC) for STM32F413/423
183/1324
183
General-purpose I/Os (GPIO) RM0430
Figure 17 show the basic structure of a 5 V tolerant I/O port bit. Table 25 gives the possible
port bit configurations.
4O ON CHIP !NALOG
PERIPHERAL
!LTERNATE FUNCTION INPUT
ONOFF
44, 3CHMITT
"IT SETRESET REGISTERS
0ROTECTION
TRIGGER ONOFF
0ULL DIODE
UP
)NPUT DRIVER )/ PIN
7RITE
/UTPUT DATA REGISTER
1. VDD_FT is a potential specific to five-volt tolerant I/Os and different from VDD.
0 0 0 GP output PP
0 0 1 GP output PP + PU
0 1 0 GP output PP + PD
0 SPEED 1 1 Reserved
01
1 [B:A] 0 0 GP output OD
1 0 1 GP output OD + PU
1 1 0 GP output OD + PD
1 1 1 Reserved (GP output OD)
0 0 0 AF PP
0 0 1 AF PP + PU
0 1 0 AF PP + PD
0 SPEED 1 1 Reserved
10
1 [B:A] 0 0 AF OD
1 0 1 AF OD + PU
1 1 0 AF OD + PD
1 1 1 Reserved
x x x 0 0 Input Floating
x x x 0 1 Input PU
00
x x x 1 0 Input PD
x x x 1 1 Reserved (input floating)
x x x 0 0 Input/output Analog
x x x 0 1
11
x x x 1 0 Reserved
x x x 1 1
1. GP = general-purpose, PP = push-pull, PU = pull-up, PD = pull-down, OD = open-drain, AF = alternate
function.
• GPIO
Configure the desired I/O as output or input in the GPIOx_MODER register.
• Peripheral alternate function
For the ADC, configure the desired I/O as analog in the GPIOx_MODER register.
For other peripherals:
– Configure the desired I/O as an alternate function in the GPIOx_MODER register
– Select the type, pull-up/pull-down and output speed via the GPIOx_OTYPER,
GPIOx_PUPDR and GPIOx_OSPEEDR registers, respectively
– Connect the I/O to the desired AFx in the GPIOx_AFRL or GPIOx_AFRH register
• EVENTOUT
Configure the I/O pin used to output the Cortex®-M4 with FPU EVENTOUT signal by
connecting it to AF15
Note: Please refer to the “Alternate function mapping” table in the datasheets for the detailed
mapping of the system and peripherals’ alternate function I/O pins.
)RUSLQVWRWKH*3,2[B$)5/>@UHJLVWHUVHOHFWVWKHGHGLFDWHGDOWHUQDWHIXQFWLRQ
$) V\VWHP
$) 7,07,0
$) 7,0
$) 7,0
$) ,&,&)03
$) 63,
$) 63,')6'0 3LQ[ [
$) 63,86$57
$) ')6'086$57&$1
$) ,&,&)03&$17,048$'63,
$) ')6'0)60&48$'63,27*B)6
$)
$) )0&6',2
$)
$)
$) (9(17287
$)5/>@
)RUSLQVWRWKH*3,2[B$)5+>@UHJLVWHUVHOHFWVWKHGHGLFDWHGDOWHUQDWHIXQFWLRQ
$) V\VWHP
$) 7,07,0
$) 7,0
$) 7,0
$) ,&,&)03
$) 63,
$) 63,')6'0 3LQ[ [
$) 63,86$57
$) ')6'086$57&$1
$) ,&,&)03&$17,048$'63,
$) ')6'0)60&48$'63,27*B)6
$)
$) )0&6',2
$)
$)
$) (9(17287
$)5+>@
06Y9
The LOCK sequence (refer to Section 7.4.8: GPIO port configuration lock register
(GPIOx_LCKR) (x = A...H)) can only be performed using a word (32-bit long) access to the
GPIOx_LCKR register due to the fact that GPIOx_LCKR bit 16 has to be set at the same
time as the [15:0] bits.
For more details please refer to LCKR register description in Section 7.4.8: GPIO port
configuration lock register (GPIOx_LCKR) (x = A...H).
AIB
AIB
2EAD
6$$ 6$$
44, 3CHMITT ONOFF
"IT SETRESET REGISTERS
TRIGGER PROTECTION
0ULL DIODE
)NPUT DRIVER UP
7RITE
/UTPUT DATA REGISTER
)/ PIN
/UTPUT DRIVER 6$$ ONOFF
0ULL PROTECTION
0 -/3 DOWN DIODE
/UTPUT
CONTROL 633 633
. -/3
2EADWRITE
633 PUSH PULL OR
OPEN DRAIN
&ROM ON CHIP
PERIPHERAL !LTERNATE FUNCTION OUTPUT
AIB
!NALOG
4O ON CHIP
PERIPHERAL
)NPUT DATA REGISTER
2EAD OFF
6$$
"IT SETRESET REGISTERS
44, 3CHMITT
TRIGGER PROTECTION
7RITE DIODE
/UTPUT DATA REGISTER
)NPUT DRIVER
)/ PIN
PROTECTION
DIODE
2EADWRITE 633
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OT15 OT14 OT13 OT12 OT11 OT10 OT9 OT8 OT7 OT6 OT5 OT4 OT3 OT2 OT1 OT0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
OSPEEDR15 OSPEEDR14 OSPEEDR13 OSPEEDR12 OSPEEDR11 OSPEEDR10 OSPEEDR9 OSPEEDR8
[1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OSPEEDR1 OSPEEDR0
OSPEEDR7[1:0] OSPEEDR6[1:0] OSPEEDR5[1:0] OSPEEDR4[1:0] OSPEEDR3[1:0] OSPEEDR2[1:0]
[1:0] 1:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PUPDR15[1:0] PUPDR14[1:0] PUPDR13[1:0] PUPDR12[1:0] PUPDR11[1:0] PUPDR10[1:0] PUPDR9[1:0] PUPDR8[1:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PUPDR7[1:0] PUPDR6[1:0] PUPDR5[1:0] PUPDR4[1:0] PUPDR3[1:0] PUPDR2[1:0] PUPDR1[1:0] PUPDR0[1:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IDR15 IDR14 IDR13 IDR12 IDR11 IDR10 IDR9 IDR8 IDR7 IDR6 IDR5 IDR4 IDR3 IDR2 IDR1 IDR0
r r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ODR15 ODR14 ODR13 ODR12 ODR11 ODR10 ODR9 ODR8 ODR7 ODR6 ODR5 ODR4 ODR3 ODR2 ODR1 ODR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BR15 BR14 BR13 BR12 BR11 BR10 BR9 BR8 BR7 BR6 BR5 BR4 BR3 BR2 BR1 BR0
w w w w w w w w w w w w w w w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BS15 BS14 BS13 BS12 BS11 BS10 BS9 BS8 BS7 BS6 BS5 BS4 BS3 BS2 BS1 BS0
w w w w w w w w w w w w w w w w
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. LCKK
rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
LCK15 LCK14 LCK13 LCK12 LCK11 LCK10 LCK9 LCK8 LCK7 LCK6 LCK5 LCK4 LCK3 LCK2 LCK1 LCK0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
AFRL7[3:0] AFRL6[3:0] AFRL5[3:0] AFRL4[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AFRL3[3:0] AFRL2[3:0] AFRL1[3:0] AFRL0[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Bits 31:0 AFRLy: Alternate function selection for port x bit y (y = 0..7)
These bits are written by software to configure alternate function I/Os
AFRLy selection:
0000: AF0 1000: AF8
0001: AF1 1001: AF9
0010: AF2 1010: AF10
0011: AF3 1011: AF11
0100: AF4 1100: AF12
0101: AF5 1101: AF13
0110: AF6 1110: AF14
0111: AF7 1111: AF15
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
AFRH15[3:0] AFRH14[3:0] AFRH13[3:0] AFRH12[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AFRH11[3:0] AFRH10[3:0] AFRH9[3:0] AFRH8[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Bits 31:0 AFRHy: Alternate function selection for port x bit y (y = 8..15)
These bits are written by software to configure alternate function I/Os
AFRHy selection:
0000: AF0 1000: AF8
0001: AF1 1001: AF9
0010: AF2 1010: AF10
0011: AF3 1011: AF11
0100: AF4 1100: AF12
0101: AF5 1101: AF13
0110: AF6 1110: AF14
0111: AF7 1111: AF15
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
MODER15[1:0]
MODER14[1:0]
MODER13[1:0]
MODER12[1:0]
MODER10[1:0]
MODER11[1:0]
MODER9[1:0]
MODER8[1:0]
MODER7[1:0]
MODER6[1:0]
MODER5[1:0]
MODER4[1:0]
MODER3[1:0]
MODER2[1:0]
MODER1[1:0]
MODER0[1:0]
GPIOA_
0x00 MODER
Reset value 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
MODER15[1:0]
MODER14[1:0]
MODER13[1:0]
MODER12[1:0]
MODER10[1:0]
MODER11[1:0]
MODER9[1:0]
MODER8[1:0]
MODER7[1:0]
MODER6[1:0]
MODER5[1:0]
MODER4[1:0]
MODER3[1:0]
MODER2[1:0]
MODER1[1:0]
MODER0[1:0]
GPIOB_
0x00 MODER
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
MODER15[1:0]
MODER14[1:0]
MODER13[1:0]
MODER12[1:0]
MODER10[1:0]
MODER11[1:0]
MODER9[1:0]
MODER8[1:0]
MODER7[1:0]
MODER6[1:0]
MODER5[1:0]
MODER4[1:0]
MODER3[1:0]
MODER2[1:0]
MODER1[1:0]
MODER0[1:0]
GPIOx_MODER
(where x =
0x00 C...H)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x0C
0x0C
0x0C
Offset
202/1324
C...H)
C...H)
GPIOx_
GPIOx_
GPIOB_
GPIOA_
OTYPER
(where x =
(where x =
OSPEEDR
OSPEEDR
Register
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
GPIOx_IDR
OSPEEDER
GPIOx_ODR
GPIOx_BSRR
GPIOx_PUPDR
GPIOB_PUPDR
GPIOA_PUPDR
(where x = A...H)
(where x = A...H)
(where x = A...H)
(where x = A...H)
0
0
0
0
0
0
0
BR15 Res. Res. Res. 31
PUPDR15[1:0] PUPDR15[1:0] PUPDR15[1:0] OSPEEDR15[1:0] OSPEEDR15[1:0] OSPEEDR15[1:0]
0
0
0
1
0
0
0
BR14 Res. Res. Res. 30
0
0
0
1
0
0
0
BR13 Res. Res. Res. 29
PUPDR14[1:0] PUPDR14[1:0] PUPDR14[1:0] OSPEEDR14[1:0] OSPEEDR14[1:0] OSPEEDR14[1:0]
0
0
0
0
0
0
0
BR12 Res. Res. Res.
General-purpose I/Os (GPIO)
28
0
0
0
0
0
1
0
BR11 Res. Res. Res. 27
PUPDR13[1:0] PUPDR13[1:0] PUPDR13[1:0] OSPEEDR13[1:0] OSPEEDR13[1:0] OSPEEDR13[1:0]
0
0
0
1
0
1
0
BR10 Res. Res. Res. 26
0
0
0
0
0
0
0
BR9 Res. Res. Res. 25
PUPDR12[1:0] PUPDR12[1:0] PUPDR12[1:0] OSPEEDR12[1:0] OSPEEDR12[1:0] OSPEEDR12[1:0]
0
0
0
0
0
0
0
BR8 Res. Res. Res. 24
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
RM0430 Rev 8
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
RM0430 General-purpose I/Os (GPIO)
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
LCK15
LCK14
LCK13
LCK12
LCK10
LCK11
LCKK
GPIOx_LCKR
LCK9
LCK8
LCK7
LCK6
LCK5
LCK4
LCK3
LCK2
LCK1
LCK0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x1C (where x = A...H)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GPIOx_AFRL
AFRL7[3:0] AFRL6[3:0] AFRL5[3:0] AFRL4[3:0] AFRL3[3:0] AFRL2[3:0] AFRL1[3:0] AFRL0[3:0]
0x20 (where x = A...H)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GPIOx_AFRH
AFRH15[3:0] AFRH14[3:0] AFRH13[3:0] AFRH12[3:0] AFRH11[3:0] AFRH10[3:0] AFRH9[3:0] AFRH8[3:0]
0x24 (where x = A...H)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The system configuration controller is mainly used to remap the memory accessible in the
code area and manage the external interrupt line connection to the GPIOs.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. MEM_MODE
rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ADC1D
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
C2
rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI3[3:0] EXTI2[3:0] EXTI1[3:0] EXTI0[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI7[3:0] EXTI6[3:0] EXTI5[3:0] EXTI4[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI11[3:0] EXTI10[3:0] EXTI9[3:0] EXTI8[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI15[3:0] EXTI14[3:0] EXTI13[3:0] EXTI12[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. PVDL Res. CLL
rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. READY Res. Res. Res. Res. Res. Res. Res. CMP_PD
r rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. I2CFMP1_SDA I2CFMP1_SCL
rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DFSDM2 DFSDM
DFSDM2
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. _CKO 2_CK37
_CFG
SEL SEL
r r r r r r r r r r r r r rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DFSDM2 DFSDM2 DFSDM2 DFSDM2 DFSDM2 DFSDM DFSDM DFSDM1 DFSDM1 DFSDM DFSDM1 DFSDM1
MCHDL DFSDM1 MCHDL BSCK
_CK26 _CK15 _CK04 _D6 _D4 2_D2 2_D0 _CKO _CK13 1_CK02 _D2 _D0
YEN2 _CFG YEN1 SEL
SEL SEL SEL SEL SEL SEL SEL SEL SEL SEL SEL SEL
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Bit 16 DFSDM2_CK37SEL: Distribution of the DFSDM2 bitstream clock gated by TIM3 OC1
(DM3 demultiplexer on Figure 81: Multi-channel delay block for pulse skipping)
0: The gated clock is distributed to CkIn3 (DM3 = 0)
1: The gated clock is distributed to CkIn7 (DM3 = 1)
Bit 15 DFSDM2_CK26SEL: Distribution of the DFSDM2 bitstream clock gated by TIM3 OC2
(DM4 demultiplexer on Figure 81: Multi-channel delay block for pulse skipping)
0: The gated clock is distributed to CkIn2 (DM4 = 0)
1: The gated clock is distributed to CkIn6 (DM4 = 1)
Bit14 DFSDM2_CK15SEL: Distribution of the DFSDM2 bitstream clock gated by TIM3 OC3
(DM5 demultiplexer on Figure 81: Multi-channel delay block for pulse skipping)
0: The gated clock is distributed to CkIn1 (DM5 = 0)
1: The gated clock is distributed to CkIn5 (DM5 = 1)
Bit 13 DFSDM2_CK04SEL: Distribution of the DFSDM2 bitstream clock gated by TIM3 OC4
(DM6 demultiplexer on Figure 81: Multi-channel delay block for pulse skipping)
0: The gated clock is distributed to CkIn0 (DM6 = 0)
1: The gated clock is distributed to CkIn4 (DM6 = 1)
Bit 12 DFSDM2_D6SEL: Source selection for DatIn6 of DFSDM2 (M20 multiplexer on
Figure 81: Multi-channel delay block for pulse skipping)
0: The source for DatIn6 is from the DFSDM2_DATIN6 pin (M20 = 0)
1: DatIn6 is sharing the same data than DatIn7 (M20 = 1)
Bit 11 DFSDM2_D4SEL: Source selection for DatIn4 of DFSDM2 (M19 multiplexer on
Figure 81: Multi-channel delay block for pulse skipping)
0: The source for DatIn4 is from the DFSDM2_DATIN4 pin (M19 = 0)
1: DatIn4 is sharing the same data than DatIn5 (M19 = 1)
Bit 10 DFSDM2_D2SEL: Source selection for DatIn2 of DFSDM2 (M18 multiplexer on
Figure 81: Multi-channel delay block for pulse skipping)
0: The source for DatIn2 is from the DFSDM2_DATIN2 pin (M18 = 0)
1: DatIn2 is sharing the same data than DatIn3 (M18 = 1)
Bit 9 DFSDM2_D0SEL: Source selection for DatIn0 of DFSDM2 (M17 multiplexer on
Figure 81: Multi-channel delay block for pulse skipping)
0: The source for DatIn0 is from the DFSDM2_DATIN0 pin (M17 = 0)
1: DatIn0 is sharing the same data than DatIn1 (M17 = 1)
Bit 8 MCHDLYEN2: MCHDLY clock enable for DFSDM2 (G3,G4,G5,G6 gating signal on
Figure 81: Multi-channel delay block for pulse skipping)
0: Delay clock for DFSDM2 is disabled (G[6:3] = 0)
1: Delay clock for DFSDM2 is enabled (G[6:3] = 1)
Bit 7 DFSDM1_CKOSEL: Source selection for DFSDM1_CKOUT (M1 multiplexer on
Figure 81: Multi-channel delay block for pulse skipping)
0: The source for DFSDM1_CKOUT is the CkOut generated by the DFSDM1 (M1=0)
1: The source for DFSDM1_CKOUT is the output of M27 (M1=1)
Bit 6 DFSDM1_CFG: CkIn source selection for DFSDM1 (M3,M4,M5,M6 multiplexer on
Figure 1)
0: The source for CkIn[3:0] signals are the pins DFSDM1_CKINy (M[6:3] = 0)
1: The source for CkIn[3:0] signals are provided by the outputs of DM[2:1] (M[6:3] = 1)
Bit 5 DFSDM1_CK13SEL: Distribution of the DFSDM1 bitstream clock gated by TIM4 OC1
(DM1 demultiplexer on Figure 81: Multi-channel delay block for pulse skipping)
0: The gated clock is distributed to CkIn1 (DM1 = 0)
1: The gated clock is distributed to CkIn3 (DM1 = 1)
Bit 4 DFSDM1_CK02SEL: Distribution of the DFSDM1 bitstream clock gated by TIM4 OC2
(DM2 demultiplexer on Figure 81: Multi-channel delay block for pulse skipping)
0: The gated clock is distributed to CkIn0 (DM2 = 0)
1: The gated clock is distributed to CkIn2 (DM2 = 1)
Bit 3 DFSDM1_D2SEL: Source selection for DatIn2 of DFSDM1 (M8 multiplexer on
Figure 81: Multi-channel delay block for pulse skipping)
0: The source for DatIn2 is from the DFSDM1_DATIN2 pin (M8 = 0)
1: DatIn2 is sharing the same data than DatIn3 (M8 = 1)
Bit 2 DFSDM1_D0SEL: Source selection for DatIn0 of DFSDM1 (M7 multiplexer on
Figure 81: Multi-channel delay block for pulse skipping)
0: The source for DatIn0 is from the DFSDM1_DATIN0 pin (M7 = 0)
1: DatIn0 is sharing the same data than DatIn1 (M7 = 1)
Bit 1 MCHDLYEN1: MCHDLY clock enable for DFSDM1 (G1,G2 gating signal on
Figure 81: Multi-channel delay block for pulse skipping)
0: Delay clock for DFSDM1 is disabled (G[2:1] = 0)
1: Delay clock for DFSDM1 is enabled (G[2:1] = 1)
Bit 0 BSCKSEL: Bitstream clock source selection (M27, M28, M29 multiplexers on
Figure 81: Multi-channel delay block for pulse skipping)
0: The clock source is stopped for the bitstream clock (M[29:27] = 0)
1: The DFSDM2 is selected as clock source for the bitstream clock (M[29:27] = 1)
0x2C
0x1C
0x0C
Offset
8.2.11
RM0430
MEMRMP
SYSCFG_
Register
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
SYSCFG_PMC
SYSCFG_CFGR
SYSCFG_CFGR2
SYSCFG_CMPCR
SYSCFG_EXTICR4
SYSCFG_EXTICR3
SYSCFG_EXTICR2
SYSCFG_EXTICR1
SYSCFG_MCHDLYCR
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 31
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 30
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 29
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 28
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 27
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 26
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
SYSCFG register map
25
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 24
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 23
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 22
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 21
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 20
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 19
0
DFSDM2_CKOSEL Res. Res. Res. Res. Res. Res. Res. Res. Res.
RM0430 Rev 8
18
0
DFSDM2_CFG Res. Res. Res. Res. Res. Res. Res. Res. Res. 17
0
0
DFSDM2_CK37SEL Res. Res. Res. Res. Res. Res. Res. ADC1DC2 Res. 16
0
0
0
0
0
DFSDM2_CK26SEL Res. Res. Res. Res. Res. 15
0
0
0
0
0
0
0
0
0
0
EXTI11[3:0]
EXTI15[3:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
EXTI10[3:0]
EXTI14[3:0]
0
0
0
0
0
0
0
0
0
0
0
0
DFSDM1_CKOSEL READY READY
The following table gives the SYSCFG register map and the reset values.
0
0
0
0
0
0
0
0
0
0
EXTI13[3:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
MCHDLYEN1 I2CFMP1_SDA Res. Res. Res. 1
MEM_MODE
EXTI8[3:0]
EXTI4[3:0]
EXTI0[3:0]
x
EXTI12[3:0]
0
0
0
0
0
0
0
0
213/1324
213
Direct memory access controller (DMA) RM0430
'0$FRQWUROOHU
5(4B675B&+
$+%PDVWHU
5(4B675B&+ 0HPRU\SRUW
5(4B675B&+
5(4B675B&+
675($0
675($0
675($0
675($0
675($0
675($0
675($0
675($0
5(4B675B&+
5(4B675($0
5(4B675($0
5(4B675B&+ 5(4B675($0
5(4B675($0
),)2
),)2
),)2
),)2
),)2
),)2
),)2
),)2
5(4B675($0 $UELWHU
5(4B675($0
5(4B675($0
5(4B675($0
675($0
675($0
675($0
675($0
675($0
675($0
675($0
675($0
5(4B675B&+
5(4B675B&+
$+%PDVWHU
5(4B675B&+ 3HULSKHUDOSRUW
&KDQQHO
VHOHFWLRQ
$+%VODYH
SURJUDPPLQJ 3URJUDPPLQJSRUW
LQWHUIDFH
06Y9
5(4B675($0[
5(4B675[B&+
5(4B675[B&+
5(4B675[B&+
5(4B675[B&+
'0$B6[&5 &+6(/>@
D^ǀϯϵϲϮϵsϭ
The 16 requests from the peripherals (such as TIM, ADC, SPI, I2C) are independently
connected to each channel and their connection depends on the product implementation.
Table 30 and Table 31 give examples of DMA request mappings.
TIM3_UP TIM3_CH1
Channel 5 UART8_RX UART7_TX UART7_RX TIM3_CH2 UART8_RX TIM3_CH3
TIM3_CH4 TIM3_TRIG
Channel 8 - - - - - - - UART5_TX
TIM8_CH1 TIM1_CH1
Channel 0 ADC1 SAI1_A TIM8_CH2 SAI1_A ADC1 SAI1_B TIM1_CH2 UART9_RX
TIM8_CH3 TIM1_CH3
TIM1_CH4
Channel 6 TIM1_TRIG TIM1_CH1 TIM1_CH2 TIM1_CH1 TIM1_TRIG TIM1_UP TIM1_CH3 UART10_TX
TIM1_COM
TIM8_CH4
DFSDM1_
Channel 7 TIM8_UP TIM8_CH1 TIM8_CH2 TIM8_CH3 SPI5_RX SPI5_TX TIM8_TRIG
FLT0
TIM8_COM
9.3.5 Arbiter
An arbiter manages the 8 DMA stream requests based on their priority for each of the two
AHB master ports (memory and peripheral ports) and launches the peripheral/memory
access sequences.
Priorities are managed in two stages:
• Software: each stream priority can be configured in the DMA_SxCR register. There are
four levels:
– Very high priority
– High priority
– Medium priority
– Low priority
• Hardware: If two requests have the same software priority level, the stream with the
lower number takes priority over the stream with the higher number. For example,
stream 2 takes priority over stream 4.
When the data width (programmed in the PSIZE or MSIZE bits in the DMA_SxCR register)
is a half-word or a word, respectively, the peripheral or memory address written into the
DMA_SxPAR or DMA_SxM0AR/M1AR registers has to be aligned on a word or half-word
address boundary, respectively.
Peripheral-to-memory mode
Figure 25 describes this mode.
When this mode is enabled (by setting the bit EN in the DMA_SxCR register), each time a
peripheral request occurs, the stream initiates a transfer from the source to fill the FIFO.
When the threshold level of the FIFO is reached, the contents of the FIFO are drained and
stored into the destination.
The transfer stops once the DMA_SxNDTR register reaches zero, when the peripheral
requests the end of transfers (in case of a peripheral flow controller) or when the EN bit in
the DMA_SxCR register is cleared by software.
In direct mode (when the DMDIS value in the DMA_SxFCR register is ‘0’), the threshold
level of the FIFO is not used: after each single data transfer from the peripheral to the FIFO,
the corresponding data are immediately drained and stored into the destination.
The stream has access to the AHB source or destination port only if the arbitration of the
corresponding stream is won. This arbitration is performed using the priority defined for
each stream using the PL[1:0] bits in the DMA_SxCR register.
$-!?3X-!2
-EMORY
DESTINATION
&)&/
!RBITER LEVEL
2%1?342%!-X &)&/
PERIPHERAL
$-!?3X0!2 SOURCE
Memory-to-peripheral mode
Figure 26 describes this mode.
When this mode is enabled (by setting the EN bit in the DMA_SxCR register), the stream
immediately initiates transfers from the source to entirely fill the FIFO.
Each time a peripheral request occurs, the contents of the FIFO are drained and stored into
the destination. When the level of the FIFO is lower than or equal to the predefined
threshold level, the FIFO is fully reloaded with data from the memory.
The transfer stops once the DMA_SxNDTR register reaches zero, when the peripheral
requests the end of transfers (in case of a peripheral flow controller) or when the EN bit in
the DMA_SxCR register is cleared by software.
In direct mode (when the DMDIS value in the DMA_SxFCR register is '0'), the threshold
level of the FIFO is not used. Once the stream is enabled, the DMA preloads the first data to
transfer into an internal FIFO. As soon as the peripheral requests a data transfer, the DMA
transfers the preloaded value into the configured destination. It then reloads again the
empty internal FIFO with the next data to be transfer. The preloaded data size corresponds
to the value of the PSIZE bitfield in the DMA_SxCR register.
The stream has access to the AHB source or destination port only if the arbitration of the
corresponding stream is won. This arbitration is performed using the priority defined for
each stream using the PL[1:0] bits in the DMA_SxCR register.
$-!?3X-!2
-EMORY BUS
!(" MEMORY
PORT
-EMORY
SOURCE
&)&/
!RBITER
2%1?342%!-X LEVEL &)&/
0ERIPHERAL
$-!?3X0!2 DESTINATION
AI
Memory-to-memory mode
The DMA channels can also work without being triggered by a request from a peripheral.
This is the memory-to-memory mode, described in Figure 27.
When the stream is enabled by setting the Enable bit (EN) in the DMA_SxCR register, the
stream immediately starts to fill the FIFO up to the threshold level. When the threshold level
is reached, the FIFO contents are drained and stored into the destination.
The transfer stops once the DMA_SxNDTR register reaches zero or when the EN bit in the
DMA_SxCR register is cleared by software.
The stream has access to the AHB source or destination port only if the arbitration of the
corresponding stream is won. This arbitration is performed using the priority defined for
each stream using the PL[1:0] bits in the DMA_SxCR register.
Note: When memory-to-memory mode is used, the circular and direct modes are not allowed.
$-!?3X-!2
-EMORY
DESTINATION
!RBITER &)&/
3TREAM ENABLE LEVEL &)&/
-EMORY
$-!?3X0!2 SOURCE
AI
Table 33. Source and destination address registers in double-buffer mode (DBM = 1)
Bits DIR[1:0] of the
Direction Source address Destination address
DMA_SxCR register
1 1 0x0 / 0x0 /
0x0 / B0[7:0]
2 B3|B2|B1|B0[31:0] B3|B2|B1|B0[31:0]
0x1 / B1[7:0]
8 32 1 -3 0x2 / B2[7:0]
4 0x3 / B3[7:0]
1 0x0 / 0x0 /
0x0 / B1|B0[15:0] 1
16 32 1 -2 0x2 / B3|B2[15:0]
B3|B2|B1|B0[31:0] B3|B2|B1|B0[31:0]
Note: Peripheral port may be the source or the destination (it could also be the memory source in
the case of memory-to-memory transfer).
PSIZE, MSIZE and NDT[15:0] have to be configured so as to ensure that the last transfer
will not be incomplete. This can occur when the data width of the peripheral port (PSIZE
bits) is lower than the data width of the memory port (MSIZE bits). This constraint is
summarized in Table 35.
9.3.13 FIFO
FIFO structure
The FIFO is used to temporarily store data coming from the source before transmitting them
to the destination.
Each stream has an independent 4-word FIFO and the threshold level is software-
configurable between 1/4, 1/2, 3/4 or full.
To enable the use of the FIFO threshold level, the direct mode must be disabled by setting
the DMDIS bit in the DMA_SxFCR register.
The structure of the FIFO differs depending on the source and destination data widths, and
is described in Figure 28: FIFO structure.
WORDS
WORDS
WORDS
AI
1/4 Forbidden
1/2 1 burst of 4 beats Forbidden
Half-word
3/4 Forbidden
Full 2 bursts of 4 beats 1 burst of 8 beats
Forbidden
1/4
1/2 Forbidden
Word Forbidden
3/4
Full 1 burst of 4 beats
In all cases, the burst size multiplied by the data size must not exceed the FIFO size (data
size can be: 1 (byte), 2 (half-word) or 4 (word)).
Incomplete burst transfer at the end of a DMA transfer may happen if one of the following
conditions occurs:
• For the AHB peripheral port configuration: the total number of data items (set in the
DMA_SxNDTR register) is not a multiple of the burst size multiplied by the data size.
• For the AHB memory port configuration: the number of remaining data items in the
FIFO to be transferred to the memory is not a multiple of the burst size multiplied by the
data size.
In such cases, the remaining data to be transferred is managed in single mode by the DMA,
even if a burst transaction is requested during the DMA stream configuration.
Note: When burst transfers are requested on the peripheral AHB port and the FIFO is used
(DMDIS = 1 in the DMA_SxCR register), it is mandatory to respect the following rule to
avoid permanent underrun or overrun conditions, depending on the DMA stream direction:
If (PBURST × PSIZE) = FIFO_SIZE (4 words), FIFO_Threshold = 3/4 is forbidden with
PSIZE = 1, 2 or 4 and PBURST = 4, 8 or 16.
This rule ensures that enough FIFO space at a time is free to serve the request from the
peripheral.
FIFO flush
The FIFO can be flushed when the stream is disabled by resetting the EN bit in the
DMA_SxCR register and when the stream is configured to manage peripheral-to-memory or
memory-to-memory transfers. If some data are still present in the FIFO when the stream is
disabled, the DMA controller continues transferring the remaining data to the destination
(even though stream is effectively disabled). When this flush is completed, the transfer
complete status bit (TCIFx) in the DMA_LISR or DMA_HISR register is set.
The remaining data counter DMA_SxNDTR keeps the value in this case to indicate how
many data items are currently available in the destination memory.
Note that during the FIFO flush operation, if the number of remaining data items in the FIFO
to be transferred to memory (in bytes) is less than the memory data width (for example 2
bytes in FIFO while MSIZE is configured to word), data is sent with the data width set in the
MSIZE bit in the DMA_SxCR register. This means that memory is written with an undesired
value. The software may read the DMA_SxNDTR register to determine the memory area
that contains the good data (start address and last address).
If the number of remaining data items in the FIFO is lower than a burst size (if the MBURST
bits in DMA_SxCR register are set to configure the stream to manage burst on the AHB
memory port), single transactions are generated to complete the FIFO flush.
Direct mode
By default, the FIFO operates in direct mode (DMDIS bit in the DMA_SxFCR is reset) and
the FIFO threshold level is not used. This mode is useful when the system requires an
immediate and single transfer to or from the memory after each DMA request.
When the DMA is configured in direct mode (FIFO disabled), to transfer data in memory-to-
peripheral mode, the DMA preloads one data from the memory to the internal FIFO to
ensure an immediate data transfer as soon as a DMA request is triggered by a peripheral.
To avoid saturating the FIFO, it is recommended to configure the corresponding stream with
a high priority.
This mode is restricted to transfers where:
• the source and destination transfer widths are equal and both defined by the
PSIZE[1:0] bits in DMA_SxCR (MSIZE[1:0] bits are not relevant)
• burst transfers are not possible (PBURST[1:0] and MBURST[1:0] bits in DMA_SxCR
are don’t care)
Direct mode must not be used when implementing memory-to-memory transfers.
triggered in the case of a peripheral-to-memory DMA transfer. The TCIFx flag of the
corresponding stream is set in the status register to indicate the DMA completion. To
know the number of data items transferred during the DMA transfer, read the
DMA_SxNDTR register and apply the following formula:
– Number_of_data_transferred = 0xFFFF – DMA_SxNDTR
• Normal stream interruption due to the reception of a last data hardware signal: the
stream is automatically interrupted when the peripheral requests the last transfer
(single or burst) and when this transfer is complete. the TCIFx flag of the corresponding
stream is set in the status register to indicate the DMA transfer completion. To know the
number of data items transferred, read the DMA_SxNDTR register and apply the same
formula as above.
• The DMA_SxNDTR register reaches 0: the TCIFx flag of the corresponding stream is
set in the status register to indicate the forced DMA transfer completion. The stream is
automatically switched off even though the last data hardware signal (single or burst)
has not been yet asserted. The already transferred data is not lost. This means that a
maximum of 65535 data items can be managed by the DMA in a single transaction,
even in peripheral flow control mode.
Note: When configured in memory-to-memory mode, the DMA is always the flow controller and
the PFCTRL bit is forced to 0 by hardware.
The circular mode is forbidden in the peripheral flow controller mode.
single Possible
DMA Possible Possible
Peripheral-to- AHB AHB burst Forbidden
memory peripheral port memory port single Possible
Peripheral Forbidden Forbidden
burst Forbidden
single Possible
DMA Possible Possible
Memory-to- AHB AHB burst Forbidden
peripheral memory port peripheral port single Possible
Peripheral Forbidden Forbidden
burst Forbidden
Note: Before setting an enable control bit EN = 1, the corresponding event flag must be cleared,
otherwise an interrupt is immediately generated.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. TCIF3 HTIF3 TEIF3 DMEIF3 Res. FEIF3 TCIF2 HTIF2 TEIF2 DMEIF2 Res. FEIF2
r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. TCIF1 HTIF1 TEIF1 DMEIF1 Res. FEIF1 TCIF0 HTIF0 TEIF0 DMEIF0 Res. FEIF0
r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. TCIF7 HTIF7 TEIF7 DMEIF7 Res. FEIF7 TCIF6 HTIF6 TEIF6 DMEIF6 Res. FEIF6
r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. TCIF5 HTIF5 TEIF5 DMEIF5 Res. FEIF5 TCIF4 HTIF4 TEIF4 DMEIF4 Res. FEIF4
r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. CTCIF3 CHTIF3 CTEIF3 CDMEIF3 Res. CFEIF3 CTCIF2 CHTIF2 CTEIF2 CDMEIF2 Res. CFEIF2
w w w w w w w w w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. CTCIF1 CHTIF1 CTEIF1 CDMEIF1 Res. CFEIF1 CTCIF0 CHTIF0 CTEIF0 CDMEIF0 Res. CFEIF0
w w w w w w w w w w
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. CTCIF7 CHTIF7 CTEIF7 CDMEIF7 Res. CFEIF7 CTCIF6 CHTIF6 CTEIF6 CDMEIF6 Res. CFEIF6
w w w w w w w w w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. CTCIF5 CHTIF5 CTEIF5 CDMEIF5 Res. CFEIF5 CTCIF4 CHTIF4 CTEIF4 CDMEIF4 Res. CFEIF4
w w w w w w w w w w
Bits 24, 18, 8, 2 CDMEIF[7:4]: stream x clear direct mode error interrupt flag (x = 7..4)
Writing 1 to this bit clears the corresponding DMEIFx flag in the DMA_HISR register.
Bits 23, 17, 7, 1 Reserved, must be kept at reset value.
Bits 22, 16, 6, 0 CFEIF[7:4]: stream x clear FIFO error interrupt flag (x = 7..4)
Writing 1 to this bit clears the corresponding CFEIFx flag in the DMA_HISR register.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. CHSEL[3:0] MBURST[1:0] PBURST[1:0] Res. CT DBM PL[1:0]
rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PINCOS MSIZE[1:0] PSIZE[1:0] MINC PINC CIRC DIR[1:0] PFCTRL TCIE HTIE TEIE DMEIE EN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NDT[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PAR[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PAR[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
M0A[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M0A[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
M1A[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M1A[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. FEIE Res. FS[2:0] DMDIS FTH[1:0]
rw r r r rw rw rw
0x002C
0x001C
0x000C
9.5.11
RM0430
DMA_LISR
DMA_HISR
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
DMA_S1CR
DMA_S0CR
DMA_LIFCR
DMA_HIFCR
DMA_S1PAR
DMA_S0PAR
DMA_S0FCR
DMA_S1NDTR
DMA_S0NDTR
DMA_S0M1AR
DMA_S0M0AR
Offset Register name
0
0
0
0
Res Res Res Res Res Res Res Res Res. 31
0
0
0
0
Res Res Res Res Res Res Res Res Res. 30
0
0
0
0
Res Res Res Res Res Res Res Res Res. 29
0
0
0
0
0
0
Res Res Res Res Res Res Res. 28
0
0
0
0
0
0
0
0
0
Res Res Res CTCIF7 CTCIF3 TCIF7 0 TCIF3 27
CHSEL[3:0] CHSEL[3:0]
0
0
0
0
0
0
0
0
0
0
Res Res Res CHTIF7 CHTIF3 HTIF7 HTIF3 26
DMA register map
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Res Res Res Res Res Res Res. 23
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Table 39 summarizes the DMA registers.
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
RM0430 Rev 8
Res Res Res Res Res Res Res. 17
PL[1:0] PL[1:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
PINCOS Res PINCOS Res Res Res Res. 15
PA[31:0]
PA[31:0]
M1A[31:0]
M0A[31:0]
0
0
0
0
0
0
0
0
Res Res Res Res Res. 14
MSIZE[1:0] MSIZE[1:0]
0
0
0
0
0
0
0
0
Res Res Res Res Res. 13
0
0
0
0
0
0
0
0
Res Res Res Res Res. 12
PSIZE[1:0] PSIZE[1:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
FEIE Res Res Res Res. 7
DIR[1:0] DIR[1:0]
NDT[15:0]
NDT[15:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
PFCTRL PFCTRL CTCIF4 CTCIF0 TCIF4 TCIF0 5
0
0
0
0
0
0
0
0
0
0
0
0
0
TCIE TCIE CHTIF4 CHTIF0 HTIF4 HTIF0 4
FS[2:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
HTIE HTIE CTEIF4 CTEIF0 TEIF4 TEIF0 3
0
0
0
0
0
0
0
0
0
0
0
0
0
TEIE DMDIS TEIE CDMEIF4 CDMEIF0 DMEIF4 DMEIF0 2
0
0
0
0
0
0
0
0
0
DMEIE DMEIE Res Res Res Res. 1
FTH[1:0]
0
0
0
0
0
0
0
0
0
0
0
0
1
EN EN CFEIF4 CFEIF0 FEIF4 FEIF0
Direct memory access controller (DMA)
245/1324
0
248
Direct memory access controller (DMA) RM0430
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
DMA_S1M0AR M0A[31:0]
0x0034
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S1M1AR M1A[31:0]
0x0038
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FTH[1:0]
DMDIS
FEIE
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S1FCR FS[2:0]
0x003C
Reset value 0 1 0 0 0 0 1
MBURST[1:0]
PBURST[1:0]
CHSEL[3:0]
MSIZE[1:0]
PSIZE[1:0]
PFCTRL
PINCOS
PL[1:0]
DMEIE
MINC
CIRC
PINC
HTIE
TCIE
DBM
TEIE
[1:0]
Res
Res
Res
Res
DIR
EN
CT
DMA_S2CR
0x0040
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S2NDTR NDT[15:0]
0x0044
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S2PAR PA[31:0]
0x0048
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S2M0AR M0A[31:0]
0x004C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S2M1AR M1A[31:0]
0x0050
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FTH[1:0]
DMDIS
FEIE
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S2FCR FS[2:0]
0x0054
Reset value 0 1 0 0 0 0 1
MBURST[1:0]
PBURST[1:0]
CHSEL[3:0]
MSIZE[1:0]
PSIZE[1:0]
PFCTRL
PINCOS
DIR[1:0]
PL[1:0]
DMEIE
MINC
CIRC
PINC
TCIE
HTIE
TEIE
DBM
Res
Res
Res
Res
EN
CT
DMA_S3CR
0x0058
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S3NDTR NDT[15:0]
0x005C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S3PAR PA[31:0]
0x0060
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S3M0AR M0A[31:0]
0x0064
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S3M1AR M1A[31:0]
0x0068
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
FTH[1:0]
DMDIS
FEIE
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S3FCR FS[2:0]
0x006C
Reset value 0 1 0 0 0 0 1
MBURST[1:0]
PBURST[1:0]
CHSEL[3:0]
MSIZE[1:0]
PSIZE[1:0]
PFCTRL
PINCOS
PL[1:0]
DMEIE
MINC
CIRC
PINC
HTIE
TCIE
TEIE
DBM
[1:0]
Res
Res
Res
Res
DIR
EN
CT
DMA_S4CR
0x0070
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S4NDTR NDT[15:0]
0x0074
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S4PAR PA[31:0]
0x0078
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S4M0AR M0A[31:0]
0x007C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S4M1AR M1A[31:0]
0x0080
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FTH[1:0]
DMDIS
FEIE
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S4FCR FS[2:0]
0x0084
Reset value 0 1 0 0 0 0 1
MBURST[1:0]
PBURST[1:0]
CHSEL[3:0]
MSIZE[1:0]
PSIZE[1:0]
PFCTRL
PINCOS
DIR[1:0]
PL[1:0]
DMEIE
MINC
CIRC
PINC
TCIE
HTIE
DBM
TEIE
Res
Res
Res
Res
EN
CT
DMA_S5CR
0x0088
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S5NDTR NDT[15:0]
0x008C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S5PAR PA[31:0]
0x0090
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S5M0AR M0A[31:0]
0x0094
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S5M1AR M1A[31:0]
0x0098
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FTH[1:0]
DMDIS
FEIE
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S5FCR FS[2:0]
0x009C
Reset value 0 1 0 0 0 0 1
MBURST[1:0]
PBURST[1:0]
CHSEL[3:0]
MSIZE[1:0]
PSIZE[1:0]
PFCTRL
PINCOS
DIR[1:0]
PL[1:0]
DMEIE
MINC
CIRC
PINC
HTIE
TCIE
DBM
TEIE
Res.
Res.
Res.
Res.
EN
CT
DMA_S6CR
0x00A0
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S6NDTR NDT[15:0]
0x00A4
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S6PAR PA[31:0]
0x00A8
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S6M0AR M0A[31:0]
0x00AC
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S6M1AR M1A[31:0]
0x00B0
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FTH[1:0]
DMDIS
FEIE
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S6FCR FS[2:0]
0x00B4
Reset value 0 1 0 0 0 0 1
MBURST[1:0]
PBURST[1:0]
CHSEL[3:0]
MSIZE[1:0]
PSIZE[1:0]
PFCTRL
PINCOS
DIR[1:0]
PL[1:0]
DMEIE
MINC
CIRC
PINC
HTIE
TCIE
DBM
TEIE
Res
Res
Res
Res
EN
CT
DMA_S7CR
0x00B8
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S7NDTR NDT[15:0]
0x00BC
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S7PAR PA[31:0]
0x00C0
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S7M0AR M0A[31:0]
0x00C4
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DMA_S7M1AR M1A[31:0]
0x00C8
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FTH[1:0] 0
DMDIS
FEIE
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
Res
DMA_S7FCR FS[2:0]
0x00CC
Reset value 0 1 0 0 0 0 1
Priority
Type of
Acronym Description Address
priority
Priority
Type of
Acronym Description Address
priority
Priority
Type of
Acronym Description Address
priority
Priority
Type of
Acronym Description Address
priority
$0%$$3%EXV
3&/. 3HULSKHUDOLQWHUIDFH
7R19,&LQWHUUXSW
FRQWUROOHU
(YHQW
PDVN
UHJLVWHU
069
IRQ channel pending bit (in the NVIC interrupt clear pending register) have to be
cleared.
• or configuring an external or internal EXTI line in event mode. When the CPU resumes
from WFE, it is not necessary to clear the peripheral interrupt pending bit or the NVIC
IRQ channel pending bit as the pending bit corresponding to the event line is not set.
To use an external line as a wakeup event, refer to Section 10.2.4: Functional description.
(;7,>@ELWVLQWKH6<6&)*B(;7,&5UHJLVWHU
3$
3%
3&
3' (;7,
3(
3)
3*
3+
(;7,>@ELWVLQWKH6<6&)*B(;7,&5UHJLVWHU
3$
3%
3&
3' (;7,
3(
3)
3*
3+
(;7,>@ELWVLQWKH6<6&)*B(;7,&5UHJLVWHU
3$
3%
3& (;7,
3'
3(
3)
3*
06Y9
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. MR23 MR22 MR21 Res. Res. MR18 MR17 MR16
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MR15 MR14 MR13 MR12 MR11 MR10 MR9 MR8 MR7 MR6 MR5 MR4 MR3 MR2 MR1 MR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. MR23 MR22 MR21 Res. Res. MR18 MR17 MR16
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MR15 MR14 MR13 MR12 MR11 MR10 MR9 MR8 MR7 MR6 MR5 MR4 MR3 MR2 MR1 MR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. TR23 TR22 TR21 Res. Res. TR18 TR17 TR16
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TR15 TR14 TR13 TR12 TR11 TR10 TR9 TR8 TR7 TR6 TR5 TR4 TR3 TR2 TR1 TR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: The external wakeup lines are edge triggered, no glitch must be generated on these lines.
If a rising edge occurs on the external interrupt line while writing to the EXTI_RTSR register,
the pending bit is be set.
Rising and falling edge triggers can be set for the same interrupt line. In this configuration,
both generate a trigger condition.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. TR23 TR22 TR21 Res. Res. TR18 TR17 TR16
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TR15 TR14 TR13 TR12 TR11 TR10 TR9 TR8 TR7 TR6 TR5 TR4 TR3 TR2 TR1 TR0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: The external wakeup lines are edge triggered, no glitch must be generated on these lines.
If a falling edge occurs on the external interrupt line while writing to the EXTI_FTSR register,
the pending bit is not set.
Rising and falling edge triggers can be set for the same interrupt line. In this configuration,
both generate a trigger condition.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SWIER SWIER SWIER SWIER SWIER SWIER
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
23 22 21 18 17 16
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER SWIER
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. PR23 PR22 PR21 Res. Res. PR18 PR17 PR16
rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PR15 PR14 PR13 PR12 PR11 PR10 PR9 PR8 PR7 PR6 PR5 PR4 PR3 PR2 PR1 PR0
rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1
Table 41. External interrupt/event controller register map and reset values
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
MR
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
EXTI_IMR MR[18:0]
0x00 [23:21]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
MR
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
EXTI_EMR MR[18:0]
0x04 [23:21]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
TR
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
EXTI_RTSR TR[18:0]
0x08 [23:21]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
TR
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
EXTI_FTSR TR[18:0]
0x0C [23:21]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SWIER
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
EXTI_SWIER SWIER[18:0]
0x10 [23:21]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PR
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
EXTI_PR PR[18:0]
0x14 [23:21]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Refer to Section 2.2.2: Memory map and register boundary addresses for the register
boundary addresses.
The Flexible static memory controller (FSMC) includes one memory controller:
• The NOR/PSRAM memory controller
125365$0
)60&B1/ RU1$'9
VLJQDOV
)URPFORFN )60&B&/.
FRQWUROOHU
+&/. 125365$065$0
)60&B1%/>@
VKDUHGVLJQDOV
)60&B$>@
6KDUHGVLJQDOV
)60&B'>@
125365$0
&RQILJXUDWLRQ
PHPRU\ )60&B1(>@
UHJLVWHUV
FRQWUROOHU )60&B12( 125365$065$0
)60&B1:( VKDUHGVLJQDOV
)60&B1:$,7
06Y9
transactions are allowed (the controller reads the entire 16-bit memory word and
uses only the required byte).
Configuration registers
The FSMC can be configured through a set of registers. Refer to Section 11.5.6, for a
detailed description of the NOR Flash/PSRAM controller registers.
00 Bank 1 - NOR/PSRAM 1
01 Bank 1 - NOR/PSRAM 2
10 Bank 1 - NOR/PSRAM 3
11 Bank 1 - NOR/PSRAM 4
1. HADDR are internal AHB address lines that are translated to external memory.
The HADDR[25:0] bits contain the external memory address. Since HADDR is a byte
address whereas the memory is addressed at word level, the address actually issued to the
memory varies according to the memory data width, as shown in the following table.
and synchronous accesses depending on the CCKEN bit configuration in the FSMC_BCR1
register:
• If the CCLKEN bit is reset, the FSMC generates the clock (CLK) only during
synchronous accesses (Read/write transactions).
• If the CCLKEN bit is set, the FSMC generates a continuous clock during asynchronous
and synchronous accesses. To generate the FSMC_CLK continuous clock, Bank 1
must be configured in Synchronous mode (see Section 11.5.6: NOR/PSRAM controller
registers). Since the same clock is used for all synchronous memories, when a
continuous output clock is generated and synchronous accesses are performed, the
AHB data size has to be the same as the memory data width (MWID) otherwise the
FSMC_CLK frequency will be changed depending on AHB data transaction (refer to
Section 11.5.5: Synchronous transactions for FSMC_CLK divider ratio formula).
The size of each bank is fixed and equal to 64 Mbytes. Each bank is configured through
dedicated registers (see Section 11.5.6: NOR/PSRAM controller registers).
The programmable memory parameters include access times (see Table 44) and support
for wait management (for PSRAM and NOR Flash accessed in Burst mode).
NE[x] O Chip select, x = 1..4 (called NCE by PSRAM (CellularRAM™ i.e. CRAM))
NOE O Output enable
NWE O Write enable
NL(= NADV) O Address valid only for PSRAM input (memory signal name: NADV)
NWAIT I PSRAM wait input signal to the FSMC
NBL[1:0] O Byte lane output. Byte 0 and Byte 1 control (upper and lower byte enable)
Asynchronous R 8 16 Y -
Asynchronous W 8 16 N -
Asynchronous R 16 16 Y -
Asynchronous W 16 16 Y -
NOR Flash Asynchronous R 32 16 Y Split into 2 FSMC accesses
(muxed I/Os
and nonmuxed Asynchronous W 32 16 Y Split into 2 FSMC accesses
I/Os) Asynchronous
R - 16 N Mode is not supported
page
Synchronous R 8 16 N -
Synchronous R 16 16 Y -
Synchronous R 32 16 Y -
Asynchronous R 8 16 Y -
Asynchronous W 8 16 Y Use of byte lanes NBL[1:0]
Asynchronous R 16 16 Y -
Asynchronous W 16 16 Y -
Asynchronous R 32 16 Y Split into 2 FSMC accesses
PSRAM
(multiplexed Asynchronous W 32 16 Y Split into 2 FSMC accesses
I/Os and non- Asynchronous
multiplexed R - 16 N Mode is not supported
page
I/Os)
Synchronous R 8 16 N -
Synchronous R 16 16 Y -
Synchronous R 32 16 Y -
Synchronous W 8 16 Y Use of byte lanes NBL[1:0]
Synchronous W 16/32 16 Y -
Asynchronous R 8 / 16 16 Y -
Asynchronous W 8 / 16 16 Y Use of byte lanes NBL[1:0]
SRAM and
ROM Asynchronous R 32 16 Y Split into 2 FSMC accesses
Split into 2 FSMC accesses
Asynchronous W 32 16 Y
Use of byte lanes NBL[1:0]
0HPRU\WUDQVDFWLRQ
$>@
1%/>@
1([
12(
1:(
+LJK
GDWDGULYHQ
'>@ E\PHPRU\
$''6(7 '$7$67
+&/.F\FOHV +&/.F\FOHV
069
0HPRU\WUDQVDFWLRQ
$>@
1%/>@
1([
12(
+&/.
1:(
'>@ GDWDGULYHQE\)60&
$''6(7 '$7$67
+&/.F\FOHV +&/.F\FOHV
06Y9
The one HCLK cycle at the end of the write transaction helps guarantee the address and
data hold time after the NWE rising edge. Due to the presence of this HCLK cycle, the
DATAST value must be greater than zero (DATAST > 0).
!;=
.",;=
.%X
./%
.7%
(IGH
!$$3%4 $!4!34
(#,+ CYCLES (#,+ CYCLES
-36
Ϯϱ͗Ϭ
E>ϭ͗Ϭ
Edž
EK
ϭ,><
Et
ϭϱ͗Ϭ ĚĂƚĂĚƌŝǀĞŶďLJ&^D
^d ;d^dнϭͿ
,><ĐLJĐůĞƐ ,><ĐLJĐůĞƐ
D^ϯϰϰϴϬsϭ
The differences compared with Mode1 are the toggling of NOE and the independent read
and write timings.
$>@
1$'9
1([
12(
1:(
+LJK
'>@ GDWDGULYHQ
E\PHPRU\
$''6(7 '$7$67
+&/.F\FOHV +&/.F\FOHV
069
0HPRU\WUDQVDFWLRQ
$>@
1$'9
1([
12(
+&/.
1:(
'>@ GDWDGULYHQE\)0&
$''6(7 '$7$67
+&/.F\FOHV +&/.F\FOHV
069
0HPRU\WUDQVDFWLRQ
$>@
1$'9
1([
12(
+&/.
1:(
'>@ GDWDGULYHQE\)60&
$''6(7 '$7$67
+&/.F\FOHV +&/.F\FOHV
06Y9
The differences with Mode1 are the toggling of NWE and the independent read and write
timings when extended mode is set (Mode B).
Note: The FSMC_BWTRx register is valid only if the Extended mode is set (mode B), otherwise its
content is don’t care.
-EMORY TRANSACTION
!;=
.!$6
.%X
./%
.7%
(IGH
!$$3%4 $!4!34
(#,+ CYCLES (#,+ CYCLES
-36
!;=
.!$6
.%X
./%
(#,+
.7%
!$$3%4 $!4!34
(#,+ CYCLES (#,+ CYCLES
-36
The differences compared with Mode1 are the toggling of NOE and the independent read
and write timings.
-EMORY TRANSACTION
!;=
.!$6
.%X
./%
.7%
(IGH
!$$3%4 $!4!34
(#,+ CYCLES (#,+ CYCLES
!$$(,$
(#,+ CYCLES -36
The differences with Mode1 are the toggling of NOE that goes on toggling after NADV
changes and the independent read and write timings.
$>@
1$'9
1([
12(
+&/.
1:(
The difference with ModeD is the drive of the lower address byte(s) on the data bus.
1. The memory asserts the WAIT signal aligned to NOE/NWE which toggles:
DATAST ≥ ( 4 × HCLK ) + max_wait_assertion_time
2. The memory asserts the WAIT signal aligned to NEx (or NOE/NWE not toggling):
if
max_wait_assertion_time > address_phase + hold_phase
then:
0HPRU\WUDQVDFWLRQ
$>@
DGGUHVVSKDVH GDWDVHWXSSKDVH
1([
12(
'>@ GDWDGULYHQE\PHPRU\
+&/.
069
0HPRU\WUDQVDFWLRQ
$>@
DGGUHVVSKDVH GDWDVHWXSSKDVH
1([
+&/.
1:(
'>@ GDWDGULYHQE\)60&
+&/.
069
Caution: Some NOR Flash memories include the NADV Low cycle in the data latency count, so that
the exact relation between the NOR Flash latency and the FSMC DATLAT parameter can be
either:
• NOR Flash latency = (DATLAT + 2) CLK clock cycles
• or NOR Flash latency = (DATLAT + 3) CLK clock cycles
Some recent memories assert NWAIT during the latency phase. In such cases DATLAT can
be set to its minimum value. As a result, the FSMC samples the data and waits long enough
to evaluate if the data are valid. Thus the FSMC detects when the memory exits latency and
real data are processed.
Other memories do not assert NWAIT during latency. In this case the latency must be set
correctly for both the FSMC and the memory, otherwise invalid data are mistaken for good
data, or valid data are lost in the initial phase of the memory access.
Single-burst transfer
When the selected bank is configured in Burst mode for synchronous accesses, if for
example an AHB single-burst transaction is requested on 16-bit memories, the FSMC
performs a burst transaction of length 1 (if the AHB transfer is 16 bits), or length 2 (if the
AHB transfer is 32 bits) and de-assert the chip select signal when the last data is strobed.
Such transfers are not the most efficient in terms of cycles compared to asynchronous read
operations. Nevertheless, a random asynchronous access would first require to re-program
the memory access mode, which would altogether last longer.
Wait management
For synchronous NOR Flash memories, NWAIT is evaluated after the programmed latency
period, which corresponds to (DATLAT+2) CLK clock cycles.
If NWAIT is active (low level when WAITPOL = 0, high level when WAITPOL = 1), wait
states are inserted until NWAIT is inactive (high level when WAITPOL = 0, low level when
WAITPOL = 1).
When NWAIT is inactive, the data is considered valid either immediately (bit WAITCFG = 1)
or on the next clock edge (bit WAITCFG = 0).
During wait-state insertion via the NWAIT signal, the controller continues to send clock
pulses to the memory, keeping the chip select and output enable signals valid. It does not
consider the data as valid.
In Burst mode, there are two timing configurations for the NOR Flash NWAIT signal:
• The Flash memory asserts the NWAIT signal one data cycle before the wait state
(default after reset).
• The Flash memory asserts the NWAIT signal during the wait state
The FSMC supports both NOR Flash wait state configurations, for each chip select, thanks
to the WAITCFG bit in the FSMC_BCRx registers (x = 0..3).
0HPRU\WUDQVDFWLRQ EXUVWRIKDOIZRUGV
+&/.
&/.
$>@ DGGU>@
1$'9
1:$,7
:$,7&)*
1:$,7
:$,7&)*
LQVHUWHGZDLWVWDWH
DLF
Figure 49. Synchronous multiplexed read mode waveforms - NOR, PSRAM (CRAM)
0HPRU\WUDQVDFWLRQ EXUVWRIKDOIZRUGV
+&/.
&/.
$>@ DGGU>@
1([
12(
+LJK
1:(
1$'9
1:$,7
:$,7&)*
'$7/$7 LQVHUWHGZDLWVWDWH
&/.F\FOHV
$'>@ $GGU>@ GDWD GDWD GDWD GDWD
FORFN FORFN
F\FOH F\FOH
'DWDVWUREHV 'DWDVWUREHV
DLI
1. Byte lane outputs (NBL are not shown; for NOR access, they are held high, and, for PSRAM (CRAM)
access, they are held low.
(#,+
#,+
!;= ADDR;=
.%X
(I :
./%
.7%
.!$6
.7!)4
7!)4#&'
1. The memory must issue NWAIT signal one cycle in advance, accordingly WAITCFG must be programmed to 0.
2. Byte Lane (NBL) outputs are not shown, they are held low while NEx is active.
12 WREN 0x1
11 WAITCFG 0x0
10 Reserved 0x0
9 WAITPOL to be set according to memory
8 BURSTEN no effect on synchronous write
7 Reserved 0x1
6 FACCEN Set according to memory support
5-4 MWID As needed
3-2 MTYP 0x1
1 MUXEN As needed
0 MBKEN 0x1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CCLK CBURST
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. WFDIS CPSIZE[2:0]
EN RW
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ASYNC EXT WAIT WAIT WAIT BURST FACC MUX MBK
WREN Res. Res. MWID[1:0] MTYP[1:0]
WAIT MOD EN CFG POL EN EN EN EN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. ACCMOD[1:0] DATLAT[3:0] CLKDIV[3:0] BUSTURN[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATAST[7:0] ADDHLD[3:0] ADDSET[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: PSRAMs (CRAMs) have a variable latency due to internal refresh. Therefore these
memories issue the NWAIT signal during the whole latency phase to prolong the latency as
needed.
With PSRAMs (CRAMs) the filled DATLAT must be set to 0, so that the FSMC exits its
latency phase soon and starts sampling NWAIT from memory, then starts to read or write
when the memory is ready.
This method can be used also with the latest generation of synchronous Flash memories
that issue the NWAIT signal, unlike older Flash memories (check the datasheet of the
specific Flash memory being used).
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. ACCMOD[1:0] Res. Res. Res. Res. Res. Res. Res. Res. BUSTURN[3:0]
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATAST[7:0] ADDHLD[3:0] ADDSET[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
10
11
9
8
7
6
5
4
3
2
1
0
ASYNCWAIT
CBURSTRW
BURSTEN
WAITCFG
WAITPOL
EXTMOD
CCLKEN
FACCEN
WAITEN
MUXEN
MBKEN
WFDIS
WREN
CPSIZE MWID MTYP
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FSMC_BCR1
0x00 [2:0] [1:0] [1:0]
Reset value 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 1
ASYNCWAIT
CBURSTRW
BURSTEN
WAITCFG
WAITPOL
EXTMOD
FACCEN
WAITEN
MUXEN
MBKEN
WREN
CPSIZE MWID MTYP
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FSMC_BCR2
0x08 [2:0] [1:0] [1:0]
Reset value 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0
ASYNCWAIT
CBURSTRW
BURSTEN
WAITCFG
WAITPOL
EXTMOD
FACCEN
WAITEN
MUXEN
MBKEN
WREN
CPSIZE MWID MTYP
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FSMC_BCR3
0x10 [2:0] [1:0] [1:0]
Reset value 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0
ASYNCWAIT
CBURSTRW
BURSTEN
WAITCFG
WAITPOL
EXTMOD
FACCEN
WAITEN
MUXEN
MBKEN
WREN
CPSIZE MWID MTYP
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FSMC_BCR4
0x18 [2:0] [1:0] [1:0]
Reset value 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0
ACCMOD[1:0]
Res.
Res.
Reset value 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
ACCMOD[1:0]
Res.
Res.
Reset value 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
ACCMOD[1:0]
Res.
Res.
Reset value 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
ACCMOD[1:0]
Res.
Res.
Reset value 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
ACCMOD[1:0]
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reset value 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
ACCMOD[1:0]
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reset value 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
ACCMOD[1:0]
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FSMC_BWTR3 BUSTURN[3:0] DATAST[7:0] ADDHLD[3:0] ADDSET[3:0]
0x114
Reset value 0
ACCMOD[1:0] 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FSMC_BWTR4 BUSTURN[3:0] DATAST[7:0] ADDHLD[3:0] ADDSET[3:0]
0x11C
Reset value 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
12.1 Introduction
The QUADSPI is a specialized communication interface targeting single, dual or quad SPI
Flash memories. It can operate in any of the three following modes:
• indirect mode: all the operations are performed using the QUADSPI registers
• status polling mode: the external Flash memory status register is periodically read and
an interrupt can be generated in case of flag setting
• memory-mapped mode: the external Flash memory is mapped to the microcontroller
address space and is seen by the system as if it was an internal memory
Both throughput and capacity can be increased two-fold using dual-flash mode, where two
Quad-SPI Flash memories are accessed simultaneously.
6KLIWUHJLVWHU 63,)/$6+
&/.
%.B,262
46,
%.B,26,
462
%.B,2
4:3
%.B,2
4+2/'
%.BQ&6
&6
069
Q&6
6&/.
,2
,2
,2
,2
$ $ $ 0 %\WH %\WH
,2VZLWFKIURP
RXWSXWWRLQSXW 069
Instruction phase
During this phase, an 8-bit instruction, configured in INSTRUCTION field of
QUADSPI_CCR[7:0] register, is sent to the Flash memory, specifying the type of operation
to be performed.
Though most Flash memories can receive instructions only one bit at a time from the
IO0/SO signal (single SPI mode), the instruction phase can optionally send 2 bits at a time
(over IO0/IO1 in dual SPI mode) or 4 bits at a time (over IO0/IO1/IO2/IO3 in quad SPI
mode). This can be configured using the IMODE[1:0] field of QUADSPI_CCR[9:8] register.
When IMODE = 00, the instruction phase is skipped, and the command sequence starts
with the address phase, if present.
Address phase
In the address phase, 1-4 bytes are sent to the Flash memory to indicate the address of the
operation. The number of address bytes to be sent is configured in the ADSIZE[1:0] field of
QUADSPI_CCR[13:12] register. In indirect and automatic-polling modes, the address bytes
to be sent are specified in the ADDRESS[31:0] field of QUADSPI_AR register, while in
memory-mapped mode the address is given directly via the AHB (from the Cortex® or from
a DMA).
The address phase can send 1 bit at a time (over SO in single SPI mode), 2 bits at a time
(over IO0/IO1 in dual SPI mode), or 4 bits at a time (over IO0/IO1/IO2/IO3 in quad SPI
mode). This can be configured using the ADMODE[1:0] field of QUADSPI_CCR[11:10]
register.
When ADMODE = 00, the address phase is skipped, and the command sequence proceeds
directly to the next phase, if any.
Alternate-bytes phase
In the alternate-bytes phase, 1-4 bytes are sent to the Flash memory, generally to control
the mode of operation. The number of alternate bytes to be sent is configured in the
ABSIZE[1:0] field of QUADSPI_CCR[17:16] register. The bytes to be sent are specified in
the QUADSPI_ABR register.
The alternate-bytes phase can send 1 bit at a time (over SO in single SPI mode), 2 bits at a
time (over IO0/IO1 in dual SPI mode), or 4 bits at a time (over IO0/IO1/IO2/IO3 in quad SPI
mode). This can be configured using the ABMODE[1:0] field of QUADSPI_CCR[15:14]
register.
When ABMODE = 00, the alternate-bytes phase is skipped, and the command sequence
proceeds directly to the next phase, if any.
There may be times when only a single nibble needs to be sent during the alternate-byte
phase rather than a full byte, such as when dual-mode is used and only two cycles are used
for the alternate bytes. In this case, firmware can use quad-mode (ABMODE = 11) and send
a byte with bits 7 and 3 of ALTERNATE set to ‘1’ (keeping the IO3 line high), and bits 6 and
2 set to ‘0’ (keeping the IO2 line low). In this case the upper two bits of the nibble to be sent
are placed in bits 4:3 of ALTERNATE while the lower two bits are placed in bits 1 and 0. For
example, if the nibble 2 (0010) is to be sent over IO0/IO1, then ALTERNATE should be set
to 0x8A (1000_1010).
Dummy-cycles phase
In the dummy-cycles phase, 1-31 cycles are given without any data being sent or received,
in order to allow the Flash memory the time to prepare for the data phase when higher clock
frequencies are used. The number of cycles given during this phase is specified in the
DCYC[4:0] field of QUADSPI_CCR[22:18] register. In both SDR and DDR modes, the
duration is specified as a number of full CLK cycles.
When DCYC is zero, the dummy-cycles phase is skipped, and the command sequence
proceeds directly to the data phase, if present.
The operating mode of the dummy-cycles phase is determined by DMODE.
In order to assure enough “turn-around” time for changing the data signals from output
mode to input mode, there must be at least one dummy cycle when using dual or quad
mode to receive data from the Flash memory.
Data phase
During the data phase, any number of bytes can be sent to, or received from the Flash
memory.
In indirect and automatic-polling modes, the number of bytes to be sent/received is specified
in the QUADSPI_DLR register.
In indirect write mode the data to be sent to the Flash memory must be written to the
QUADSPI_DR register, while in indirect read mode the data received from the Flash
memory is obtained by reading from the QUADSPI_DR register.
In memory-mapped mode, the data which is read is sent back directly over the AHB to the
Cortex or to a DMA.
The data phase can send/receive 1 bit at a time (over SO/SI in single SPI mode), 2 bits at a
time (over IO0/IO1 in dual SPI mode), or 4 bits at a time (over IO0/IO1/IO2/IO3 in quad SPI
SDR mode
By default, the DDRM bit (QUADSPI_CCR[31]) is 0 and the QUADSPI operates in single
data rate (SDR) mode.
In SDR mode, when the QUADSPI is driving the IO0/SO, IO1, IO2, IO3 signals, these
signals transition only with the falling edge of CLK.
When receiving data in SDR mode, the QUADSPI assumes that the Flash memories also
send the data using CLK’s falling edge. By default (when SSHIFT = 0), the signals are
sampled using the following (rising) edge of CLK.
DDR mode
When the DDRM bit (QUADSPI_CCR[31]) is set to 1, the QUADSPI operates in double data
rate (DDR) mode.
In DDR mode, when the QUADSPI is driving the IO0/SO, IO1, IO2, IO3 signals in the
address/alternate-byte/data phases, a bit is sent on each of the falling and rising edges of
CLK.
The instruction phase is not affected by DDRM. The instruction is always sent using CLK’s
falling edge.
When receiving data in DDR mode, the QUADSPI assumes that the Flash memories also
send the data using both rising and falling CLK edges. When DDRM = 1, firmware must
clear SSHIFT bit (bit 4 of QUADSPI_CR). Thus, the signals are sampled one half of a CLK
cycle later (on the following, opposite edge).
Q&6
6&/.
,2
,2
,2
,2
$$ $ 0 %\WH%\WH
,2VZLWFKIURP
RXWSXWWRLQSXW 069
Dual-flash mode
When the DFM bit (bit 6 of QUADSPI_CR) is 1, the QUADSPI is in dual-flash mode, where
two external quad SPI Flash memories (FLASH 1 and FLASH 2) are used in order to
send/receive 8 bits (or 16 bits in DDR mode) every cycle, effectively doubling the throughput
as well as the capacity.
Each of the Flash memories use the same CLK and optionally the same nCS signals, but
each have separate IO0, IO1, IO2, and IO3 signals.
Dual-flash mode can be used in conjunction with single-bit, dual-bit, and quad-bit modes, as
well as with either SDR or DDR mode.
is set when the limit of the external SPI memory is reached according to the Flash memory
size defined in the QUADSPI_CR.
By default, the QUADSPI never stops its prefetch operation, keeping the previous read
operation active with nCS maintained low, even if no access to the Flash memory occurs for
a long time. Since Flash memories tend to consume more when nCS is held low, the
application might want to activate the timeout counter (TCEN = 1, bit 3 of QUADSPI_CR) so
that nCS is released after a period of TIMEOUT[15:0] (QUADSPI_LPTR) cycles have
elapsed without any access since when the FIFO becomes full with prefetch data.
BUSY goes high as soon as the first memory-mapped access occurs. Because of the
prefetch operations, BUSY does not fall until there is a timeout, there is an abort, or the
peripheral is disabled.
The QUADSPI IP is configured using the QUADSPI_CR. The user shall configure the clock
prescaler division factor and the sample shifting settings for the incoming data.
DDR mode can be set through the DDRM bit. Once enabled, the address and the alternate
bytes are sent on both clock edges and the data are sent/received on both clock edges.
Regardless of the DDRM bit setting, instructions are always sent in SDR mode.
The DMA requests are enabled setting the DMAEN bit. In case of interrupt usage, their
respective enable bit can be also set during this phase.
FIFO level for either DMA request generation or interrupt generation is programmed in the
FTHRES bits.
If timeout counter is needed, the TCEN bit can be set and the timeout value programmed in
the QUADSPI_LPTR register.
Dual-flash mode can be activated by setting DFM to 1.
When writing the control register (QUADSPI_CR) the user specifies the following settings:
• The enable bit (EN) set to ‘1’
• The DMA enable bit (DMAEN) for transferring data to/from RAM
• Timeout counter enable bit (TCEN)
• Sample shift setting (SSHIFT)
• FIFO threshold level (FTRHES) to indicate when the FTF flag should be set
• Interrupt enables
• Automatic polling mode parameters: match mode and stop mode (valid when
FMODE = 11)
• Clock prescaler
When writing the communication configuration register (QUADSPI_CCR) the user specifies
the following parameters:
• The instruction byte through the INSTRUCTION bits
• The way the instruction has to be sent through the IMODE bits (1/2/4 lines)
• The way the address has to be sent through the ADMODE bits (None/1/2/4 lines)
• The address size (8/16/24/32-bit) through the ADSIZE bits
• The way the alternate bytes have to be sent through the ABMODE (None/1/2/4 lines)
• The alternate bytes number (1/2/3/4) through the ABSIZE bits
• The presence or not of dummy bytes through the DBMODE bit
• The number of dummy bytes through the DCYC bits
• The way the data have to be sent/received (None/1/2/4 lines) through the DMODE bits
If neither the address register (QUADSPI_AR) nor the data register (QUADSPI_DR) need to
be updated for a particular command, then the command sequence starts as soon as
QUADSPI_CCR is written. This is the case when both ADMODE and DMODE are 00, or if
just ADMODE = 00 when in indirect read mode (FMODE = 01).
When an address is required (ADMODE is not 00) and the data register does not need to be
written (when FMODE = 01 or DMODE = 00), the command sequence starts as soon as the
address is updated with a write to QUADSPI_AR.
In case of data transmission (FMODE = 00 and DMODE! = 00), the communication start is
triggered by a write in the FIFO through QUADSPI_DR.
In case of match, the status match flag is set and an interrupt is generated if enabled, and
the QUADSPI can be automatically stopped if the AMPS bit is set.
In any case, the latest retrieved value is available in the QUADSPI_DR.
Memory-mapped mode
In memory-mapped mode, the external Flash memory is seen as internal memory but with
some latency during accesses. Only read operations are allowed to the external Flash
memory in this mode.
Memory-mapped mode is entered by setting the FMODE to 11 in the QUADSPI_CCR
register.
The programmed instruction and frame is sent when a master is accessing the memory
mapped space.
The FIFO is used as a prefetch buffer to anticipate linear reads. Any access to
QUADSPI_DR in this mode returns zero.
The data length register (QUADSPI_DLR) has no meaning in memory-mapped mode.
Q&6
6&/.
069
When CKMODE=1 (“mode3”, where CLK goes high when no operation is in progress) and
DDRM=0 (SDR mode), nCS still falls one CLK cycle before an operation first rising CLK
edge, and nCS rises one CLK cycle after the operation final rising CLK edge, as shown in
Figure 56.
Q&6
6&/.
069
When CKMODE = 1 (“mode3”) and DDRM = 1 (DDR mode), nCS falls one CLK cycle
before an operation first rising CLK edge, and nCS rises one CLK cycle after the operation
final active rising CLK edge, as shown in Figure 57. Because DDR operations must finish
with a falling edge, CLK is low when nCS rises, and CLK rises back up one half of a CLK
cycle afterwards.
7 7 7
Q&6
6&/.
069
When the FIFO stays full in a read operation or if the FIFO stays empty in a write operation,
the operation stalls and CLK stays low until firmware services the FIFO. If an abort occurs
when an operation is stalled, nCS rises just after the abort is requested and then CLK rises
one half of a CLK cycle later, as shown in Figure 58.
7 &ORFNVWDOOHG 7
Q&6
6&/.
$ERUW
069
When not in dual-flash mode (DFM = 0), only FLASH 1 is accessed and thus the BK2_nCS
stays high. In dual-flash mode, BK2_nCS behaves exactly the same as BK1_nCS. Thus, if
there is a FLASH 2 and if the application always stays in dual-flash mode, then FLASH 2
may use BK1_nCS and the pin outputting BK2_nCS can be used for other functions.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. FTHRES[4:0] FSEL DFM Res. SSHIFT TCEN DMAEN ABORT EN
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. FSIZE[4:0]
rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CK
Res. Res. Res. Res. Res. CSHT[2:0] Res. Res. Res. Res. Res. Res. Res.
MODE
rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. FLEVEL[5:0] Res. Res. BUSY TOF SMF FTF TCF TEF
r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. CTOF CSMF Res. CTCF CTEF
w w w w
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DL[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DL[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ADDRESS[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ADDRESS[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ALTERNATE[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ALTERNATE[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MASK[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MASK[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MATCH[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MATCH[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
INTERVAL[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TIMEOUT[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
DMAEN
SSHIFT
ABORT
APMS
FTHRES
TCEN
FSEL
SMIE
PMM
TOIE
TCIE
TEIE
DFM
FTIE
Res.
Res.
Res.
Res.
Res.
QUADSPI_CR PRESCALER[7:0]
EN
[4:0]
0x0000
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
CKMODE
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
QUADSPI_DCR FSIZE[4:0] CSHT
0x0004
Reset value 0 0 0 0 0 0 0 0 0
BUSY
SMF
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TOF
TCF
TEF
FTF
QUADSPI_SR FLEVEL[6:0]
0x0008
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0
CSMF
CTOF
CTCF
CTEF
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
QUADSPI_FCR
0x000C
Reset value 0 0 0 0
QUADSPI_DLR DL[31:0]
0x0010
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADMODE[1:0]
ABMODE[1:0]
DMODE[1:0]
FMODE[1:0]
ADSIZE[1:0]
ABSIZE[1:0]
IMODE[1:0]
DDRM
DHHC
SIOO
Res.
Res.
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
QUADSPI_AR ADDRESS[31:0]
0x0018
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
QUADSPI_ABR ALTERNATE[31:0]
0x001C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
QUADSPI_DR DATA[31:0]
0x0020
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
QUADSPI_
MASK[31:0]
0x0024 PSMKR
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
QUADSPI_
MATCH[31:0]
0x0028 PSMAR
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
QUADSPI_PIR INTERVAL[15:0]
0x002C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
QUADSPI_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMEOUT[15:0]
LPTR
0x0030
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$QDORJZDWFKGRJ
&RPSDUHUHVXOW
+LJKHUWKUHVKROG ELWV
/RZHUWKUHVKROG ELWV
$GGUHVVGDWDEXV
,QMHFWHGGDWDUHJLVWHUV
9 5() [ELWV
9 5()
5HJXODUGDWDUHJLVWHU
9 ''$ ELWV
9 66$
$QDORJ '0$UHTXHVW
PX[
$'&[B,1
$'&[B,1
*3,2 XSWR $'&&/.
,QMHFWHG
SRUWV FKDQQHOV $QDORJ WR GLJLWDO
XSWR 5HJXODU FRQYHUWHU
$'&[B,1
FKDQQHOV
7HPSVHQVRU
9 5(),17
9 %$7
)URP$'&SUHVFDOHU
-(;76(/>@ELWV (;76(/>@ELWV
7,0B&+ 7,0B&+
7,0B75*2 -(;7(1 (;7(1 7,0B&+
7,0B&+ >@ELWV >@ELWV 7,0B&+
7,0B75*2 7,0B&+
7,0B&+ 7,0B&+
7,0B&+ 7,0B&+
7,0B&+ 7,0B75*2
7,0B&+ 7,0B&+
7,0B&+ 7,0B75*2
7,0B75*2 7,0B&+
6WDUWWULJJHU 6WDUWWULJJHU
7,0B&+ 7,0B&+
LQMHFWHGJURXS UHJXODUJURXS
7,0B75*2 7,0B&+
7,0B&+ 7,0B&+
7,0B&+ 7,0B&+
7,0B&+ 7,0B75*2
(;7,B
(;7,B
DL
Input, analog reference The higher/positive reference voltage for the ADC,
VREF+
positive 1.8 V ≤ VREF+ ≤ VDDA
Analog power supply equal to VDD and
VDDA Input, analog supply 2.4 V ≤VDDA ≤VDD (3.6 V) for full speed
1.8 V ≤VDDA ≤VDD (3.6 V) for reduced speed
Input, analog reference The lower/negative reference voltage for the ADC,
VREF–
negative VREF– = VSSA
Input, analog supply
VSSA Ground for analog power supply equal to VSS
ground
ADCx_IN[15:0] Analog input signals 16 analog input channels
The total number of conversions in the injected group must be written in the L[1:0] bits
in the ADC_JSQR register.
If the ADC_SQRx or ADC_JSQR registers are modified during a conversion, the current
conversion is reset and a new start pulse is sent to the ADC to convert the newly chosen
group.
!$#?#,+
!$/.
3734!24
*3734!24
+LJKHUWKUHVKROG +75
*XDUGHGDUHD
/RZHUWKUHVKROG /75
DL
None x 0 0
All injected channels 0 0 1
All regular channels 0 1 0
All regular and injected channels 0 1 1
(1)
Single injected channel 1 0 1
(1)
Single regular channel 1 1 0
Single (1) regular or injected channel 1 1 1
1. Selected by the AWDCH[4:0] bits
interrupted but the regular sequence is executed at the end of the injected sequence.
Figure 62 shows the corresponding timing diagram.
Note: When using triggered injection, one must ensure that the interval between trigger events is
longer than the injection sequence. For instance, if the sequence length is 30 ADC clock
cycles (that is two conversions with a sampling time of 3 clock periods), the minimum
interval between triggers must be 31 ADC clock cycles.
Auto-injection
If the JAUTO bit is set, then the channels in the injected group are automatically converted
after the regular group of channels. This can be used to convert a sequence of up to 20
conversions programmed in the ADC_SQRx and ADC_JSQR registers.
In this mode, external trigger on injected channels must be disabled.
If the CONT bit is also set in addition to the JAUTO bit, regular channels followed by injected
channels are continuously converted.
Note: It is not possible to use both the auto-injected and discontinuous modes simultaneously.
!$##,+
)NJECTION EVENT
2ESET !$#
MAX LATENCY
3/#
AI
1. The maximum latency value can be found in the electrical characteristics of the STM32F413/423
datasheets.
Example:
• n = 3, channels to be converted = 0, 1, 2, 3, 6, 7, 9, 10
• 1st trigger: sequence converted 0, 1, 2. An EOC event is generated at each
conversion.
• 2nd trigger: sequence converted 3, 6, 7. An EOC event is generated at each
conversion
• 3rd trigger: sequence converted 9, 10.An EOC event is generated at each conversion
• 4th trigger: sequence converted 0, 1, 2. An EOC event is generated at each conversion
Note: When a regular group is converted in discontinuous mode, no rollover occurs.
When all subgroups are converted, the next trigger starts the conversion of the first
subgroup. In the example above, the 4th trigger reconverts the channels 0, 1 and 2 in the
1st subgroup.
Injected group
This mode is enabled by setting the JDISCEN bit in the ADC_CR1 register. It can be used to
convert the sequence selected in the ADC_JSQR register, channel by channel, after an
external trigger event.
When an external trigger occurs, it starts the next channel conversions selected in the
ADC_JSQR registers until all the conversions in the sequence are done. The total sequence
length is defined by the JL[1:0] bits in the ADC_JSQR register.
Example:
n = 1, channels to be converted = 1, 2, 3
1st trigger: channel 1 converted
2nd trigger: channel 2 converted
3rd trigger: channel 3 converted and JEOC event generated
4th trigger: channel 1
Note: When all injected channels are converted, the next trigger starts the conversion of the first
injected channel. In the example above, the 4th trigger reconverts the 1st injected channel
1.
It is not possible to use both the auto-injected and discontinuous modes simultaneously.
Discontinuous mode must not be set for regular and injected groups at the same time.
Discontinuous mode must be enabled only for the conversion of one group.
)NJECTED GROUP
2EGULAR GROUP
$ $ $ $ $ $ $ $ $ $ $ $
AI
)NJECTED GROUP
2EGULAR GROUP
$ $ $ $ $ $ $ $ $ $ $ $
AI
Special case: when left-aligned, the data are aligned on a half-word basis except when the
resolution is set to 6-bit. in that case, the data are aligned on a byte basis as shown in
Figure 65.
)NJECTED GROUP
2EGULAR GROUP
$ $ $ $ $ $
AI
Note: The polarity of the external trigger can be changed on the fly.
The EXTSEL[3:0] and JEXTSEL[3:0] control bits are used to select which out of 16 possible
events can trigger conversion for the regular and injected groups.
Table 77 gives the possible external trigger for regular conversion.
Software source trigger events can be generated by setting SWSTART (for regular
conversion) or JSWSTART (for injected conversion) in ADC_CR2.
A regular group conversion can be interrupted by an injected trigger.
Note: The trigger selection can be changed on the fly. However, when the selection changes,
there is a time frame of 1 APB clock cycle during which the trigger detection is disabled.
This is to avoid spurious detection during transitions.
Main features
• Supported temperature range: –40 to 125 °C
• Precision: ±1.5 °C
7695()(FRQWUROELW
7HPSHUDWXUH 9 6(16(
VHQVRU $'&B,1
$GGUHVVGDWDEXV
FRQYHUWHGGDWD
$'&
95(),17
,QWHUQDO
SRZHUEORFN $'&B,1
069
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. OVR STRT JSTRT JEOC EOC AWD
rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. OVRIE RES AWDEN JAWDEN Res. Res. Res. Res. Res. Res.
rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DISCNUM[2:0] JDISCEN DISCEN JAUTO AWDSGL SCAN JEOCIE AWDIE EOCIE AWDCH[4:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. SWSTART EXTEN EXTSEL[3:0] Res. JSWSTART JEXTEN JEXTSEL[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. ALIGN EOCS DDS DMA Res. Res. Res. Res. Res. Res. CONT ADON
rw rw rw rw rw rw
Bit 8 DMA: Direct memory access mode (for single ADC mode)
This bit is set and cleared by software. Refer to the DMA controller chapter for more details.
0: DMA mode disabled
1: DMA mode enabled
Bits 7:2 Reserved, must be kept at reset value.
Bit 1 CONT: Continuous conversion
This bit is set and cleared by software. If it is set, conversion takes place continuously until it
is cleared.
0: Single conversion mode
1: Continuous conversion mode
Bit 0 ADON: A/D Converter ON / OFF
This bit is set and cleared by software.
0: Disable ADC conversion and go to power down mode
1: Enable ADC
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. SMP18[2:0] SMP17[2:0] SMP16[2:0] SMP15[2:1]
rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SMP15_0 SMP14[2:0] SMP13[2:0] SMP12[2:0] SMP11[2:0] SMP10[2:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. SMP9[2:0] SMP8[2:0] SMP7[2:0] SMP6[2:0] SMP5[2:1]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SMP5_0 SMP4[2:0] SMP3[2:0] SMP2[2:0] SMP1[2:0] SMP0[2:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. JOFFSETx[11:0]
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. HT[11:0]
rw rw rw rw rw rw rw rw rw rw rw rw
Note: The software can write to these registers when an ADC conversion is ongoing. The
programmed value will be effective when the next conversion is complete. Writing to this
register is performed with a write delay that can create uncertainty on the effective time at
which the new value is programmed.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. LT[11:0]
rw rw rw rw rw rw rw rw rw rw rw rw
Note: The software can write to these registers when an ADC conversion is ongoing. The
programmed value will be effective when the next conversion is complete. Writing to this
register is performed with a write delay that can create uncertainty on the effective time at
which the new value is programmed.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. L[3:0] SQ16[4:1]
rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SQ16_0 SQ15[4:0] SQ14[4:0] SQ13[4:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. SQ12[4:0] SQ11[4:0] SQ10[4:1]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SQ10_0 SQ9[4:0] SQ8[4:0] SQ7[4:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. JL[1:0] JSQ4[4:1]
rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
JSQ4[0] JSQ3[4:0] JSQ2[4:0] JSQ1[4:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: When JL[1:0]=3 (4 injected conversions in the sequencer), the ADC converts the channels
in the following order: JSQ1[4:0], JSQ2[4:0], JSQ3[4:0], and JSQ4[4:0].
When JL=2 (3 injected conversions in the sequencer), the ADC converts the channels in the
following order: JSQ2[4:0], JSQ3[4:0], and JSQ4[4:0].
When JL=1 (2 injected conversions in the sequencer), the ADC converts the channels in
starting from JSQ3[4:0], and then JSQ4[4:0].
When JL=0 (1 injected conversion in the sequencer), the ADC converts only JSQ4[4:0]
channel.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
JDATA[15:0]
r r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA[15:0]
r r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. OVR1 STRT1 JSTRT1 JEOC 1 EOC1 AWD1
r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. TSVREFE VBATE Res. Res. Res. Res. ADCPRE
rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
JSTRT
JEOC
STRT
AWD
OVR
EOC
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_SR
0x00
Reset value 0 0 0 0 0 0
AWD SGL
JDISCEN
JAWDEN
RES[1:0]
DISCEN
AWDEN
JEOCIE
JAUTO
AWDIE
OVRIE
EOCIE
SCAN
DISC
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_CR1 Res. NUM [2:0]
AWDCH[4:0]
0x04
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
JEXTEN[1:0]
JSWSTART
EXTEN[1:0]
SWSTART
ALIGN
ADON
EOCS
CONT
JEXTSEL
DMA
DDS
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_CR2 EXTSEL [3:0]
0x08 [3:0]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADC_SMPR1 Sample time bits SMPx_x
0x0C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADC_SMPR2 Sample time bits SMPx_x
0x10
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JOFR1 JOFFSET1[11:0]
0x14
Reset value 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JOFR2 JOFFSET2[11:0]
0x18
Reset value 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JOFR3 JOFFSET3[11:0]
0x1C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JOFR4 JOFFSET4[11:0]
0x20
Reset value 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_HTR HT[11:0]
0x24
Reset value 1 1 1 1 1 1 1 1 1 1 1 1
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_LTR LT[11:0]
0x28
Reset value 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
Res.
Res.
ADC_SQR3 Regular channel sequence SQx_x bits
0x34
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JSQR JL[1:0] Injected channel sequence JSQx_x bits
0x38
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JDR1 JDATA[15:0]
0x3C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JDR2 JDATA[15:0]
0x40
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JDR3 JDATA[15:0]
0x44
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_JDR4 JDATA[15:0]
0x48
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_DR Regular DATA[15:0]
0x4C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Table 82. ADC register map and reset values (common ADC registers)
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
JSTRT
JEOC
STRT
AWD
OVR
EOC
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_CSR
0x00
Reset value 0 0 0 0 0 0
ADCPRE[1:0]
TSVREFE.
VBATE
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
ADC_CCR
0x04
Reset value 0 0
Trigger selectorx
TIM2_T RGO
TIM4_T RGO DMAENx
TIM5_T RGO
TIM6_T RGO
TIM7_T RGO
TIM8_T RGO
EXTI_9
DM A req ue stx
Control logicx TENx
12-bit
DHRx
LFSRx trianglex MAMPx[3:0] bits
WAVENx[1:0] bits
12-bit
DORx
12-bit
VDDA
Digital-to-analog DAC_ OU Tx
VSSA
converterx
VR EF+
ai14708b
Input, analog reference The higher/positive reference voltage for the DAC,
VREF+
positive V ≤ VREF+ ≤ VDDA
VDDA Input, analog supply Analog power supply
VSSA Input, analog supply ground Ground for analog power supply
DAC_OUTx Analog output signal DAC channelx analog output
Note: Once the DAC channelx is enabled, the corresponding GPIO pin (PA4 or PA5) is
automatically connected to the analog converter output (DAC_OUTx). In order to avoid
parasitic consumption, the PA4 or PA5 pin should first be configured to analog (AIN).
ELWULJKWDOLJQHG
ELWOHIWDOLJQHG
ELWULJKWDOLJQHG
DLE
• Dual DAC channels, there are three possibilities:
– 8-bit right alignment: data for DAC channel1 to be loaded into the DAC_DHR8RD
[7:0] bits (stored into the DHR1[11:4] bits) and data for DAC channel2 to be loaded
into the DAC_DHR8RD [15:8] bits (stored into the DHR2[11:4] bits)
– 12-bit left alignment: data for DAC channel1 to be loaded into the DAC_DHR12LD
[15:4] bits (stored into the DHR1[11:0] bits) and data for DAC channel2 to be
loaded into the DAC_DHR12LD [31:20] bits (stored into the DHR2[11:0] bits)
– 12-bit right alignment: data for DAC channel1 to be loaded into the
DAC_DHR12RD [11:0] bits (stored into the DHR1[11:0] bits) and data for DAC
channel2 to be loaded into the DAC_DHR12LD [27:16] bits (stored into the
DHR2[11:0] bits)
Depending on the loaded DAC_DHRyyyD register, the data written by the user is shifted
and stored into DHR1 and DHR2 (data holding registers, which are internal non-memory-
mapped registers). The DHR1 and DHR2 registers are then loaded into the DOR1 and
DOR2 registers, respectively, either automatically, by software trigger or by an external
event trigger.
ELWULJKWDOLJQHG
ai14709
DLE
When DAC_DORx is loaded with the DAC_DHRx contents, the analog output voltage
becomes available after a time tSETTLING that depends on the power supply voltage and the
analog output load.
Figure 70. Timing diagram for conversion with trigger disabled TEN = 0
!0"?#,+
$(2 X!#
/UTPUT VOLTAGE
$/2 X!# AVAILABLE ON $!#?/54 PIN
T3%44,).'
AIC
Each time a DAC interface detects a rising edge on the selected timer TRGO output, or on
the selected external interrupt line 9, the last data stored into the DAC_DHRx register are
transferred into the DAC_DORx register. The DAC_DORx register is updated three APB1
cycles after the trigger occurs.
If the software trigger is selected, the conversion starts once the SWTRIG bit is set.
SWTRIG is reset by hardware once the DAC_DORx register has been loaded with the
DAC_DHRx register contents.
Note: TSELx[2:0] bit cannot be changed when the ENx bit is set.
When software trigger is selected, the transfer from the DAC_DHRx register to the
DAC_DORx register takes only one APB1 clock cycle.
DMA underrun
The DAC DMA request is not queued so that if a second external trigger arrives before the
acknowledgement for the first external trigger is received (first request), then no new
request is issued and the DMA channelx underrun flag DMAUDRx in the DAC_SR register
is set, reporting the error condition. DMA data transfers are then disabled and no further
DMA request is treated. The DAC channelx continues to convert old data.
The software should clear the DMAUDRx flag by writing “1”, clear the DMAEN bit of the
used DMA stream and re-initialize both DMA and DAC channelx to restart the transfer
correctly. The software should modify the DAC trigger conversion frequency or lighten the
DMA workload to avoid a new DMA underrun. Finally, the DAC conversion could be
resumed by enabling both DMA data transfer and conversion trigger.
For each DAC channelx, an interrupt is also generated if its corresponding DMAUDRIEx bit
in the DAC_CR register is enabled.
;25
; ; ; ;
;
125
DLF
The LFSR value, that may be masked partially or totally by means of the MAMPx[3:0] bits in
the DAC_CR register, is added up to the DAC_DHRx contents without overflow and this
value is then stored into the DAC_DORx register.
If LFSR is 0x0000, a ‘1 is injected into it (antilock-up mechanism).
It is possible to reset LFSR wave generation by resetting the WAVEx[1:0] bits.
Figure 72. DAC conversion (SW trigger enabled) with LFSR wave generation
$3%B&/.
'+5 [
6:75,*
DLE
Note: The DAC trigger must be enabled for noise generation by setting the TENx bit in the
DAC_CR register.
$E
N
TIO
C
RE
TA
EN
M
EN
EM
TA
CR
TIO
)N
N
$!#?$(2X BASE VALUE
AIC
Figure 74. DAC conversion (SW trigger enabled) with triangle wave generation
$3%B&/.
'+5 [
6:75,*
DLE
Note: The DAC trigger must be enabled for noise generation by setting the TENx bit in the
DAC_CR register.
The MAMPx[3:0] bits must be configured before enabling the DAC, otherwise they cannot
be changed.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DACC1DHR[11:0]
Reserved
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DACC1DOR[11:0]
Reserved
r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DACC2DOR[11:0]
Reserved
r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DMAUDR2
Reserved Reserved
rc_w1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DMAUDR1
Reserved Reserved
rc_w1
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
DMAUDRIE2
DMAUDRIE1
Reserved
Reserved
DMAEN2
DMAEN1
BOFF2
BOFF1
WAVE TSEL1[2
TEN2
TEN1
WAVE
EN2
EN1
DAC_
0x04 Reserved
SWTRIGR
DAC_
0x08 Reserved DACC1DHR[11:0]
DHR12R1
DAC_
0x0C Reserved DACC1DHR[11:0] Reserved
DHR12L1
DAC_
0x10 Reserved DACC1DHR[7:0]
DHR8R1
DAC_
0x14 Reserved DACC2DHR[11:0]
DHR12R2
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
DAC_
0x18 Reserved DACC2DHR[11:0] Reserved
DHR12L2
DAC_
0x1C Reserved DACC2DHR[7:0]
DHR8R2
DAC_
0x20 Reserved DACC2DHR[11:0] Reserved DACC1DHR[11:0]
DHR12RD
DAC_
0x24 DACC2DHR[11:0] Reserved DACC1DHR[11:0] Reserved
DHR12LD
DAC_
0x28 Reserved DACC2DHR[7:0] DACC1DHR[7:0]
DHR8RD
DAC_
0x2C Reserved DACC1DOR[11:0]
DOR1
DAC_
0x30 Reserved DACC2DOR[11:0]
DOR2
DMAUDR2
DMAUDR1
Reserved
15.1 Introduction
Digital filter for sigma delta modulators (DFSDM) is a high-performance module dedicated to
interface external Σ∆ modulators to a microcontroller. It is featuring up to 8 external digital
serial interfaces (channels) and up to 4 digital filters with flexible Sigma Delta stream digital
processing options to offer up to 24-bit final ADC resolution. DFSDM also features optional
parallel data stream input from microcontroller memory.
An external Σ∆ modulator provides digital data stream of converted analog values from the
external Σ∆ modulator analog input. This digital data stream is sent into a DFSDM input
channel through a serial interface. DFSDM supports several standards to connect various
Σ∆ modulator outputs: SPI interface and Manchester coded 1-wire interface (both with
adjustable parameters). DFSDM module supports the connection of up to 8 multiplexed
input digital serial channels which are shared with up to 4 DFSDM modules. DFSDM
module also supports alternative parallel data inputs from up to 8 internal 16-bit data
channels (from microcontrollers memory).
DFSDM is converting an input data stream into a final digital data word which represents an
analog input value on a Σ∆ modulator analog input. The conversion is based on a
configurable digital process: the digital filtering and decimation of the input serial data
stream.
The conversion speed and resolution are adjustable according to configurable parameters
for digital processing: filter type, filter order, length of filter, integrator length. The maximum
output data resolution is up to 24 bits. There are two conversion modes: single conversion
mode and continuous mode. The data can be automatically stored in a system RAM buffer
through DMA, thus reducing the software overhead.
A flexible timer triggering system can be used to control the start of conversion of DFSDM.
This timing control is capable of triggering simultaneous conversions or inserting a
programmable delay between conversions.
DFSDM features an analog watchdog function. Analog watchdog can be assigned to any of
the input channel data stream or to final output data. Analog watchdog has its own digital
filtering of input data stream to reach the required speed and resolution of watched data.
To detect short-circuit in control applications, there is a short-circuit detector. This block
watches each input channel data stream for occurrence of stable data for a defined time
duration (several 0’s or 1’s in an input data stream).
An extremes detector block watches final output data and stores maximum and minimum
values from the output data values. The extremes values stored can be restarted by
software.
Two power modes are supported: normal mode and stop mode.
Number of channels 4 8
Number of filters 2 4
Input from internal ADC - -
Supported trigger sources 10 10
(1)
Pulses skipper X X(1)
ID registers support - -
1. Specific pulses skipper implemented (see Section : Pulses skipper).
$3%EXV
6DPSOH 6DPSOH
3DUDOOHOLQSXWGDWD
UHJLVWHU
6DPSOH 6DPSOH
3DUDOOHOLQSXWGDWD
UHJLVWHU
&KDQQHOPXOWLSOH[HU
(;75*>@
'DWD
)LOWHU 2YHUVDPSOLQJ 2YHUVDPSOLQJ
&ORFN RUGHU UDWLR UDWLR
&.287 &ORFN 0RGH
FRQWURO FRQWURO 6LQF[ILOWHU ,QWHJUDWRUXQLW
'$7,1
6HULDOWUDQVFHLYHU 'DWD )LOWHU 2YHUVDPSOLQJ 2YHUVDPSOLQJ
&.,1
RUGHU UDWLR UDWLR
&ORFN 0RGH &ORFN
FRQWURO 'DWDLQ
FRQWURO
'$7,1 6LQF[ILOWHU ,QWHJUDWRUXQLW
&ORFNLQ
&.,1 6HULDOWUDQVFHLYHU
ZDWFKGRJILOWHUV
ZDWFKGRJFRPSDUDWRUV 5LJKWELWVKLIW
FRXQW
&RQILJ
6WDWXV
,QWHUUXSW 5LJKWELWVKLIW
EUHDN &DOLEUDWLRQGDWD
FRXQW
V VFRXQWHU FRUUHFWLRQXQLW
WKUHVKROG ,QWHUUXSW
&DOLEUDWLRQGDWD
+LJKWKUHVKROG EUHDN ')6'0GDWD
6KRUWFLUFXLW FRUUHFWLRQXQLW
V VFRXQWHU
GHWHFWRU )LOWHU /RZWKUHVKROG
WKUHVKROG FRQILJ ')6'0GDWD
$QDORJZDWFKGRJ
6KRUWFLUFXLW
GHWHFWRU +LJKWKUHVKROG
)LOWHU /RZWKUHVKROG 'DWDRXWSXW
FRQILJ
$QDORJZDWFKGRJ
$3%EXV
&RQWUROXQLW 0D[LPXPYDOXH
0LQLPXPYDOXH
&RQILJXUDWLRQ ([WUHPHV
,QWHUUXSWVDQGHYHQWV
UHJLVWHUV GHWHFWRU
HQGRIFRQYHUVLRQ 0D[LPXPYDOXH
DQDORJZDWFKGRJ 0LQLPXPYDOXH
'0$LQWHUUXSWEUHDN VKRUWFLUFXLWGHWHFWLRQ
FRQWUROFORFNFRQWURO RYHUUXQ ([WUHPHV
GHWHFWRU
069
1. This example shows 4 DFSDM filters and 8 input channels (max. configuration).
Internal/
Input trigger from internal/external trigger sources to start
dfsdm_jtrg[10:0] external trigger
analog conversion, see Table 89 and Table 90 for details.
signal
break signal Break signals event generation from Analog watchdog or
dfsdm_break[3:0]
output short-circuit detector
DMA request DMA request signal from each DFSDM_FLTx (x=0..3):
dfsdm_dma[3:0]
signal end of injected conversion event.
Interrupt
dfsdm_it[3:0] Interrupt signal for each DFSDM_FLTx (x=0..3)
request signal
dfsdm_jtrg0 TIM1_TRGO2
dfsdm_jtrg1 TIM3_TRGO2
dfsdm_jtrg2 TIM8_TRGO2
dfsdm_jtrg3 TIM10_OC1
dfsdm_jtrg4 N/A
dfsdm_jtrg5 TIM4_TRGO2
dfsdm_jtrg6 N/A
dfsdm_jtrg7 TIM6_TRGO1
dfsdm_jtrg8 N/A
dfsdm_jtrg9 EXTI11
dfsdm_jtrg10 EXTI15
dfsdm_jtrg0 TIM1_TRGO3
dfsdm_jtrg1 TIM3_TRGO3
dfsdm_jtrg2 TIM8_TRGO4
dfsdm_jtrg3 TIM10_OC1
dfsdm_jtrg4 TIM2_TRGO2
dfsdm_jtrg5 TIM4_TRGO4
dfsdm_jtrg6 TIM11_OC1
dfsdm_jtrg7 TIM6_TRGO2
dfsdm_jtrg8 TIM7_TRGO2
dfsdm_jtrg9 EXTI11
dfsdm_jtrg10 EXTI15
DFSDM clocks
The internal DFSDM clock fDFSDMCLK, which is used to drive the channel transceivers,
digital processing blocks (digital filter, integrator) and next additional blocks (analog
watchdog, short-circuit detector, extremes detector, control block) is generated by the RCC
block and is derived from the system clock SYSCLK or peripheral clock PCLK2 (see
DFSDMSEL bit description in ). The DFSDM clock is automatically stopped in stop mode (if
DFEN = 0 for all DFSDM_FLTx, x=0..3).
The DFSDM serial channel transceivers can receive an external serial clock to sample an
external serial data stream. The internal DFSDM clock must be at least 4 times faster than
the external serial clock if standard SPI coding is used, and 6 times faster than the external
serial clock if Manchester coding is used.
DFSDM can provide one external output clock signal to drive external Σ∆ modulator(s) clock
input(s). It is provided on CKOUT pin. This output clock signal must be in the range
specified in given device datasheet and is derived from DFSDM clock or from audio clock
(see CKOUTSRC bit in DFSDM_CH0CFGR1 register) by programmable divider in the
range 2 - 256 (CKOUTDIV in DFSDM_CH0CFGR1 register). Audio clock source is SAI1
clock selected by SAI1SEL[1:0] field in RCC configuration (see ).
&+ \PD[
'HFRGH
'$7,1 \PD[
&.,1 \PD[
)/7 [PD[
&+\
'HFRGH
'$7,1\
&.,1\ )/7 [
)/7[
&+ \
'HFRGH
'$7,1 \
&.,1 \
)/7
&+
'HFRGH
'$7$,1
&.,1
&+,16(/
5&+
06Y9
&.,1\ 63,&.6(/
63,WLPLQJ63,&.6(/
WZO WZK WU WI
WVX WK
6,73
'$7,1\
WVX WK
6,73
63,&.6(/
&.287
63,&.6(/
63,WLPLQJ63,&.6(/
63,&.6(/
WZO WZK WU WI
WVX WK
6,73
'$7,1\
WVX WK
6,73
6,73
'$7,1\
0DQFKHVWHUWLPLQJ
6,73
UHFRYHUHGFORFN
UHFRYHUHGGDWD
069
PD[SHULRGV
&.287
63,FORFNSUHVHQFH
UHVWDUWFRXQWLQJ
&.,1\
WLPLQJ
ODVWFORFNFKDQJH
&.$%)>\@
HUURUUHSRUWHG
069
If Manchester data format is used, then the clock absence means that the clock recovery is
unable to perform from Manchester coded signal. For a correct clock recovery, it is first
necessary to receive data with 1 to 0 or 0 to 1 transition (see Figure 80 for Manchester
synchronization).
A clock absence flag is set (CKABF[y] = 1) and an interrupt can be invoked (if CKABIE=1) in
case of an input clock recovery error (see CKABF[7:0] in DFSDM_FLT0ISR register and
CKABEN in DFSDM_CHyCFGR1). After a clock absence flag clearing (by CLRCKABF in
DFSDM_FLT0ICR register), the clock absence flag is refreshed.
PD[SHULRGV
&.287
UHVWDUWFRXQWLQJ
6,73
0DQFKHVWHUFORFNSUHVHQFH
'$7,1\
ODVWGDWDFKDQJH
WLPLQJ
6,73
UHFRYHUHGFORFN
&.$%)>\@
HUURUUHSRUWHG
069
SPI coded stream is synchronized after first detection of clock input signal (valid
rising/falling edge).
Note: When the transceiver is not yet synchronized, the clock absence flag is set and cannot be
cleared by CLRCKABF[y] bit (in DFSDM_FLT0ICR register).
6,73
'$7,1\
0DQFKHVWHUWLPLQJ
6,73
UHFRYHUHGFORFN
GDWDIURP
PRGXODWRU
&+(1
UHDOVWDUWRIILUVWFRQYHUVLRQ
ILUVWFRQYHUVLRQ
VWDUWWULJJHU ILUVWGDWDELWWRJJOHHQGRI0DQFKHVWHUV\QFKURQL]DWLRQ
&.$%)>\@
FOHDULQJRI&.$%)>\@IODJE\VRIWZDUHSROOLQJ
069
Note: When conversion is interrupted (e.g. by disabling/enabling the selected channel) the
interruption time is also counted in CNVCNT[27:0]. Therefore it is recommended to not
interrupt the conversion for correct conversion duration result.
Conversion times:
injected conversion or regular conversion with FAST = 0 (or first conversion if
FAST=1):
for Sincx filters (x=1..5):
t = CNVCNT/fDFSDMCLK = [FOSR * (IOSR-1 + FORD) + FORD] / fCKIN
for FastSinc filter:
t = CNVCNT/fDFSDMCLK = [FOSR * (IOSR-1 + 4) + 2] / fCKIN
regular conversion with FAST = 1 (except first conversion):
for Sincx and FastSinc filters:
t = CNVCNT/fDFSDMCLK = [FOSR * IOSR] / fCKIN
in case if FOSR = FOSR[9:0]+1 = 1 (filter bypassed, active only integrator):
t = IOSR / fCKIN (... but CNVCNT=0)
where:
• fCKIN is the channel input clock frequency (on given channel CKINy pin) or input data
rate (in case of parallel data input)
• FOSR is the filter oversampling ratio: FOSR = FOSR[9:0]+1 (see DFSDM_FLTxFCR
register)
• IOSR is the integrator oversampling ratio: IOSR = IOSR[7:0]+1 (see DFSDM_FLTxFCR
register)
• FORD is the filter order: FORD = FORD[2:0] (see DFSDM_FLTxFCR register)
Pulses skipper
Purpose of the pulses skipper is to implement delay line like behavior for given input
channel(s). Given number of samples from input serial data stream (serial stream only) can
be discarded before they enter into the filter. This data discarding is performed by skipping
given number of sampling input clock pulses (given serial data samples are then not
sampled by filter). The sampling clock is gated by pulses skipper function for given number
of clock pulses. When given clock pulses are skipped then the filtering continues for
following input data. With comparison to non skipped data stream this operation causes that
the final output sample (and next samples) from filter will be calculated from later input data.
This final sample then looks a bit in forward - because it is calculated from newer input
samples than the “non-skipped” sample. The final “skipped sample” is converted later
because the skipped input data samples must be replaced by followed input data samples.
The final data buffers behavior (skipped and non-skipped output data buffers comparison)
looks like the non-skipped data stream is a bit delayed - both data buffers will be phase
shifted.
The implementation of clock skipping is based on a block named MCHDLY (multi-channel
delay block) added on the top level of DFSDMs (see Figure 81). This MCHDLY block is
controlled via a MCHDLYCR register (see the Section 8.2.10: DFSDM Multi-channel delay
control register (SYSCFG_MCHDLYCR)) where are all MCHDLY control bits.
By using MCHDLY block, the DFSDMs can be used for beamforming with up to 6 digital
microphones. In beamforming mode the clock to digital microphones (or sigma-delta
modulators) is provided by DFSDM2 clock output (dfsdm2_ckout signal on Figure 81). This
clock output signal is then distributed to (see Figure 81):
• OR gates (to implement pulse skipping by clock masking/gating)
• Trigger inputs (ETR) of two timers: TIM4 and TIM3 (to define how many pulses will be
skipped)
• DFSDM1_CKOUT and DFSDM2_CKOUT pins outputs through M1 and M2
multiplexers (to generate output clock signal on DFSDMx pins)
The OR gates are used to skip the input serial clock pulses provided to the DFSDMs in
order to generate a delay on the corresponding input channel.
This clock gating is controlled by two timers (TIM4 and TIM3). Timers are programmed in
one shot mode to generate masking pulse with defined length to gate required number of
clock pulses.
In the Figure 81, MIC1 receives its serial clock via another clock output pin
(DFSDM1_CKOUT pin) which can provide either clock output from DFSDM2 or DFSDM1
CKOUT signal. This configuration allows to use for low-power use-cases only one
microphone (MIC1) - while DFSDM2_CKOUT is disabled and DFSDM1_CKOUT enabled
(for example voice detection), and reusing MIC1 for beamforming use cases (when
DFSDM2_CKOUT is enabled).
&N2XW%
&N2XW
B&.287
)URP3//,6
')6'0&)*
0
$FON
0,&
B'$7,1 'DW,Q
0
'DW,Q
B'$7,1
0
B&.,1
&N,Q
/5
*1'
0
B&.,1
&N,Q
B'$7,1
0,&
'DW,Q
0
/5
B'$7,1 'DW,Q
3&/.
9&&
0
B&.,1
&N,Q
0
B&.,1
')6'0&.26(/ &N,Q
)URP3//,6
&N2XW%
B&.287 &N2XW
$FON
0
B'$7,1 'DW,Q
0
'DW,Q
B'$7,1
0
B&.,1
&N,Q
0
B&.,1
&N,Q
B'$7,1 'DW,Q
0,&
0
B&.,1
/5
&N,Q
*1'
0
B&.,1
&N,Q
0,&
B'$7,1
'DW,Q
0
/5
'DW,Q
9&& B'$7,1
0
B&.,1
0,&
&N,Q
/5
0
*1' B&.,1
&N,Q
0,&
B'$7,1
'DW,Q
0
/5
9&& B'$7,1 'DW,Q
0
3&/.
B&.,1
&N,Q
0
B&.,1
&N,Q
'0
'0
'0
&ONBJDWHG '0
&ONBJDWHG '0
&ONBJDWHG '0
')6'0&)*
GIVGPBFNRXW
&ONBJDWHG
&ONBJDWHG
&ONBJDWHG
0&+'/<
0
0&+'/<(1
0&+'/<(1
*
*
*
*
*
*
0&+'/<(1
0&+'/<(1
2&
2&
2&
2&
2&
2&
7,0
7,0
,75
,75
3&/.
3&/.
(75
(75
%6&.6(/
0
0
670
3&/.
3&/.
06YY
(75
(75
0&+'/<
6RIWZDUHDFFHVV
GIVGPBFNRXW
7,0B2&
FONBJDWHG
7LPHUVFORFNUHIHUHQFH 0DUJLQ
06Y9
0 input L
1 L input
DFSDM2_CK37SEL
DFSDM2_CK26SEL
DFSDM2_CK15SEL
DFSDM2_CK04SEL
DFSDM1_CK13SEL
DFSDM1_CK02SEL
DFSDM2_CKOSEL
DFSDM1_CKOSEL
DFSDM2_D6SEL
DFSDM2_D4SEL
DFSDM2_D2SEL
DFSDM2_D0SEL
DFSDM1_D2SEL
DFSDM1_D0SEL
DFSDM2_CFG
DFSDM1_CFG
MCHDLYEN2
MCHDLYEN1
BSCKSEL
DFSDM2
DFSDM1
TIM4
TIM3
Use cases
M[29:27]
M[16:9]
M[6:3]
G[6:3]
G[2:1]
Multiplexer/ DM3
DM4
DM5
DM6
DM1
DM2
M20
M19
M18
M17
M2
M1
M8
M7
- - - -
gate on schematic
8QXVHG &K VDPSOH &K VDPSOH &K VDPSOH &K VDPSOH &K VDPSOH \
8QXVHG &K VDPSOH &K VDPSOH &K VDPSOH 8QXVHG &K VDPSOH \
8QXVHG &K VDPSOH &K VDPSOH &K VDPSOH &K VDPSOH &K VDPSOH \
8QXVHG &K VDPSOH &K VDPSOH &K VDPSOH 8QXVHG &K VDPSOH \
8QXVHG &K VDPSOH &K VDPSOH &K VDPSOH &K VDPSOH &K VDPSOH \
8QXVHG &K VDPSOH &K VDPSOH &K VDPSOH 8QXVHG &K VDPSOH \
8QXVHG &K VDPSOH &K VDPSOH &K VDPSOH &K VDPSOH &K VDPSOH \
8QXVHG &K VDPSOH &K VDPSOH &K VDPSOH 8QXVHG &K VDPSOH \
069
The write into DFSDM_CHyDATINR register to load one or two samples must be performed
after the selected input channel (channel y) is enabled for data collection (starting
conversion for channel y). Otherwise written data are lost for next processing.
For example: for single conversion and interleaved mode, do not start writing pair of data
samples into DFSDM_CHyDATINR before the single conversion is started (any data
present in the DFSDM_CHyDATINR before starting a conversion is discarded).
2
⎛ 1 – z– FOSR⎞
• FastSinc filter type: -⎟ ⋅ ( 1 + z –( 2 ⋅
H ( z ) = ⎜ ----------------------------
FOSR )
)
–1
⎝ 1–z ⎠
1RUPDOL]HGIUHTXHQF\ I,1I'$7$
069
Table 94. Filter maximum output resolution (peak data values from filter output)
for some FOSR values
FOSR Sinc1 Sinc2 FastSinc Sinc3 Sinc4 Sinc5
For more information about Sinc filter type properties and usage, it is recommended to study
the theory about digital filters (more resources can be downloaded from internet).
Table 95. Integrator maximum output resolution (peak data values from integrator
output) for some IOSR values and FOSR = 256 and Sinc3 filter type (largest data)
IOSR Sinc1 Sinc2 FastSinc Sinc3 Sinc4 Sinc5
x +/- FOSR. x +/- FOSR2. x +/- 2.FOSR2. x +/- FOSR3. x +/- FOSR4. x +/- FOSR5. x
4 - - - +/- 67 108 864 - -
32 - - - +/- 536 870 912 - -
+/- 2 147 483
128 - - - - -
648
256 - - - +/- 232 - -
f CKIN
Datarate samples ⁄ s = ----------------------------------------------------------------------------------- ...FAST = 0, FastSinc filter
F OSR ⋅ ( I OSR – 1 + 4 ) + ( 2 + 1 )
or
f CKIN
Datarate samples ⁄ s = ---------------------------------- ...FAST = 1
F OSR ⋅ I OSR
f DATAIN_RATE
Datarate samples ⁄ s = ---------------------------------------------------------------------------------------------------------- ...FAST = 0, Sincx filter
F OSR ⋅ ( I OSR – 1 + F ORD ) + ( F ORD + 1 )
or
f DATAIN_RATE
Datarate samples ⁄ s = ----------------------------------------------------------------------------------- ...FAST = 0, FastSinc filter
F OSR ⋅ ( I OSR – 1 + 4 ) + ( 2 + 1 )
or
f DATAIN_RATE
Datarate samples ⁄ s = ------------------------------------ ...FAST=1 or any filter bypass case ( F OSR = 1 )
F OSR ⋅ I OSR
The right bit-shift of final data is performed in this module because the final data width is 24-
bit and data coming from the processing path can be up to 32 bits. This right bit-shift is
configurable in the range 0-31 bits for each selected input channel (see DTRBS[4:0] bits in
DFSDM_CHyCFGR2 register). The right bit-shift is rounding the result to nearest integer
value. The sign of shifted result is maintained - to have valid 24-bit signed format of result
data.
In the next step, an offset correction of the result is performed. The offset correction value
(OFFSET[23:0] stored in register DFSDM_CHyCFGR2) is subtracted from the output data
for a given channel. Data in the OFFSET[23:0] field is set by software by the appropriate
calibration routine.
Due to the fact that all operations in digital processing are performed on 32-bit signed
registers, the following conditions must be fulfilled not to overflow the result:
FOSR FORD . IOSR <= 231 ... for Sincx filters, x = 1..5)
2 . FOSR 2 . IOSR <= 231 ... for FastSinc filter)
Note: In case of filter and integrator bypass (IOSR[7:0]=0, FOSR[9:0]=0), the input data rate
(fDATAIN_RATE) must be limited to be able to read all output data:
fDATAIN_RATE ≤ fAPB
where fAPB is the bus frequency to which the DFSDM peripheral is connected.
already been issued but not yet completed. A regular conversion can be pending if it was
interrupted by an injected conversion or if it was started while an injected conversion was in
progress. This pending regular conversion is then delayed and is performed when all
injected conversion are finished. Any delayed regular conversion is signalized by RPEND bit
in DFSDM_FLTxRDATAR register.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DFSDM CKOUT
Res. Res. Res. Res. Res. Res. CKOUTDIV[7:0]
EN SRC
rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CHIN CKAB
DATPACK[1:0] DATMPX[1:0] Res. Res. Res. CHEN SCDEN Res. SPICKSEL[1:0] SITP[1:0]
SEL EN
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
OFFSET[23:8]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. AWFORD[1:0] Res. AWFOSR[4:0]
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw
2
⎛ 1 – z– FOSR⎞
FastSinc filter type transfer function: -⎟ ⋅ ( 1 + z –( 2 ⋅
H ( z ) = ⎜ ----------------------------
FOSR )
)
⎝ 1 – z–1 ⎠
This bit can be modified only when CHEN=0 (in DFSDM_CHyCFGR1 register).
Bit 21 Reserved, must be kept at reset value.
Bits 20:16 AWFOSR[4:0]: Analog watchdog filter oversampling ratio (decimation rate) on channel y
0 - 31: Defines the length of the Sinc type filter in the range 1 - 32 (AWFOSR + 1). This number is
also the decimation ratio of the analog data rate.
This bit can be modified only when CHEN=0 (in DFSDM_CHyCFGR1 register).
Note: If AWFOSR = 0 then the filter has no effect (filter bypass).
Bits 15:12 BKSCD[3:0]: Break signal assignment for short-circuit detector on channel y
BKSCD[i] = 0: Break i signal not assigned to short-circuit detector on channel y
BKSCD[i] = 1: Break i signal assigned to short-circuit detector on channel y
Bits 11:8 Reserved, must be kept at reset value.
Bits 7:0 SCDT[7:0]: short-circuit detector threshold for channel y
These bits are written by software to define the threshold counter for the short-circuit detector. If this
value is reached, then a short-circuit detector event occurs on a given channel.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
WDATA[15:0]
r r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
INDAT1[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
INDAT0[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
AWF RDMA RCON RSW
Res. FAST Res. Res. RCH[2:0] Res. Res. Res. RSYNC Res.
SEL EN T START
rw rw rw rw rw rw rw rw rt_w1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
JDMA JSW
Res. JEXTEN[1:0] Res. Res. JEXTSEL[2:0] Res. Res. JSCAN JSYNC Res. DFEN
EN START
rw rw rw rw rw rw rw rw rt_w1 rw
Bit 21 RDMAEN: DMA channel enabled to read data for the regular conversion
0: The DMA channel is not enabled to read regular data
1: The DMA channel is enabled to read regular data
This bit can be modified only when DFEN=0 (DFSDM_FLTxCR1).
Bit 20 Reserved, must be kept at reset value.
Bit 19 RSYNC: Launch regular conversion synchronously with DFSDM_FLT0
0: Do not launch a regular conversion synchronously with DFSDM_FLT0
1: Launch a regular conversion in this DFSDM_FLTx at the very moment when a regular conversion
is launched in DFSDM_FLT0
This bit can be modified only when DFEN=0 (DFSDM_FLTxCR1).
Bit 18 RCONT: Continuous mode selection for regular conversions
0: The regular channel is converted just once for each conversion request
1: The regular channel is converted repeatedly after each conversion request
Writing ‘0’ to this bit while a continuous regular conversion is already in progress stops the
continuous mode immediately.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CKAB ROVR JOVRI REOC JEOCI
EXCH[7:0] Res. SCDIE AWDIE
IE IE E IE E
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SCDF[7:0] CKABF[7:0]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. RCIP JCIP Res. Res. Res. Res. Res. Res. Res. Res. AWDF ROVRF JOVRF REOCF JEOCF
r r r r r r r
Note: For each of the flag bits, an interrupt can be enabled by setting the corresponding bit in
DFSDM_FLTxCR2. If an interrupt is called, the flag must be cleared before exiting the
interrupt service routine.
All the bits of DFSDM_FLTxISR are automatically reset when DFEN=0.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CLRSCDF[7:0] CLRCKABF[7:0]
rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CLRR CLRJ
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
OVRF OVRF
rc_w1 rc_w1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw
2
⎛ 1 – z– FOSR⎞
FastSinc filter type transfer function: -⎟ ⋅ ( 1 + z – ( 2 ⋅
H ( z ) = ⎜ ----------------------------
FOSR )
)
⎝ 1 – z–1 ⎠
This bit can only be modified when DFEN=0 (DFSDM_FLTxCR1).
Bits 28:26 Reserved, must be kept at reset value.
Bits 25:16 FOSR[9:0]: Sinc filter oversampling ratio (decimation rate)
0 - 1023: Defines the length of the Sinc type filter in the range 1 - 1024 (FOSR = FOSR[9:0] +1). This
number is also the decimation ratio of the output data rate from filter.
This bit can only be modified when DFEN=0 (DFSDM_FLTxCR1)
Note: If FOSR = 0, then the filter has no effect (filter bypass).
Bits 15:8 Reserved, must be kept at reset value.
Bits 7:0 IOSR[7:0]: Integrator oversampling ratio (averaging length)
0- 255: The length of the Integrator in the range 1 - 256 (IOSR + 1). Defines how many samples
from Sinc filter will be summed into one output data sample from the integrator. The output data rate
from the integrator will be decreased by this number (additional data decimation ratio).
This bit can only be modified when DFEN=0 (DFSDM_FLTxCR1)
Note: If IOSR = 0, then the Integrator has no effect (Integrator bypass).
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
JDATA[23:8]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r r r r r r r r r r r
Note: DMA may be used to read the data from this register. Half-word accesses may be used to
read only the MSBs of conversion data.
Reading this register also clears JEOCF in DFSDM_FLTxISR. Thus, the firmware must not
read this register if DMA is activated to read data from this register.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
RDATA[23:8]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r r r r r r r r r r r r
Note: Half-word accesses may be used to read only the MSBs of conversion data.
Reading this register also clears REOCF in DFSDM_FLTxISR.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
AWHT[23:8]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
AWLT[23:8]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AWHTF[7:0] AWLTF[7:0]
r r r r r r r r r r r r r r r r
Note: All the bits of DFSDM_FLTxAWSR are automatically reset when DFEN=0.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CLRAWHTF[7:0] CLRAWLTF[7:0]
rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1 rc_w1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
EXMAX[23:8]
rs_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r rc_r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
EXMIN[23:8]
rc_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r rs_r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CNVCNT[27:12]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r r r r r r r r r r r r
Bits 31:4 CNVCNT[27:0]: 28-bit timer counting conversion time t = CNVCNT[27:0] / fDFSDMCLK
The timer has an input clock from DFSDM clock (system clock fDFSDMCLK). Conversion time
measurement is started on each conversion start and stopped when conversion finishes (interval
between first and last serial sample). Only in case of filter bypass (FOSR[9:0] = 0) is the conversion
time measurement stopped and CNVCNT[27:0] = 0. The counted time is:
if FAST=0 (or first conversion in continuous mode if FAST=1):
t = [FOSR * (IOSR-1 + FORD) + FORD] / fCKIN..... for Sincx filters
t = [FOSR * (IOSR-1 + 4) + 2] / fCKIN..... for FastSinc filter
if FAST=1 in continuous mode (except first conversion):
t = [FOSR * IOSR] / fCKIN
in case if FOSR = FOSR[9:0]+1 = 1 (filter bypassed, active only integrator):
CNVCNT = 0 (counting is stopped, conversion time: t = IOSR / fCKIN)
where: fCKIN is the channel input clock frequency (on given channel CKINy pin) or input data rate in
case of parallel data input (from CPU/DMA write)
Note: When conversion is interrupted (e.g. by disable/enable selected channel) the timer counts also
this interruption time.
Bits 3:0 Reserved, must be kept at reset value.
10
11
9
8
7
6
5
4
3
2
1
0
name
DATPACK[1:0]
DATMPX[1:0]
CKOUTSRC
DFSDMEN
SPICKSEL
CHINSEL
SITP[1:0]
CKABEN
SCDEN
CHEN
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
[1:0]
CKOUTDIV[7:0]
0x00 CH0CFGR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
OFFSET[23:0] DTRBS[4:0]
0x04 CH0CFGR2
reset value 0 0
AWFORD
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
[1:0]
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
WDATA[15:0]
0x0C CH0WDATR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
INDAT1[15:0] INDAT0[15:0]
0x10 CH0DATINR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x14 -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x1C
DATPACK[1:0]
DATMPX[1:0]
SPICKSEL
CHINSEL
SITP[1:0]
CKABEN
SCDEN
CHEN
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
[1:0]
0x20 CH1CFGR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
DFSDM_
Res.
Res.
Res.
OFFSET[23:0] DTRBS[4:0]
0x24 CH1CFGR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AWFORD[1:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWFOSR[4:0] BKSCD[3:0] SCDT[7:0]
0x28 CH1AWSCDR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
WDATA[15:0]
0x2C CH1WDATR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
INDAT1[15:0] INDAT0[15:0]
0x30 CH1DATINR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x34 -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x3C
SPICKSEL[1:0]
DATPACK[1:0]
DATMPX[1:0]
CHINSEL
SITP[1:0]
CKABEN
SCDEN
CHEN
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x40 CH2CFGR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
OFFSET[23:0] DTRBS[4:0]
0x44 CH2CFGR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AWFORD[1:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
WDATA[15:0]
0x4C CH2WDATR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
INDAT1[15:0] INDAT0[15:0]
0x50 CH2DATINR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x54 -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x5C
SPICKSEL[1:0]
DATPACK[1:0]
DATMPX[1:0]
CHINSEL
SITP[1:0]
CKABEN
SCDEN
CHEN
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x60 CH3CFGR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
OFFSET[23:0] DTRBS[4:0]
0x64 CH3CFGR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
AWFORD[1:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWFOSR[4:0] BKSCD[3:0] SCDT[7:0]
0x68 CH3AWSCDR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
WDATA[15:0]
0x6C CH3WDATR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
INDAT1[15:0] INDAT0[15:0]
0x70 CH3DATINR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x74 -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x7C
SPICKSEL[1:0]
DATPACK[1:0]
DATMPX[1:0]
CHINSEL
SITP[1:0]
CKABEN
SCDEN
CHEN
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x80 CH4CFGR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
OFFSET[23:0] DTRBS[4:0]
0x84 CH4CFGR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AWFORD[1:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWFOSR[4:0] BKSCD[3:0] SCDT[7:0]
0x88 CH4AWSCDR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
WDATA[15:0]
0x8C CH4WDATR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
INDAT1[15:0] INDAT0[15:0]
0x90 CH4DATINR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x94 -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x9C
SPICKSEL[1:0]
DATPACK[1:0]
DATMPX[1:0]
CHINSEL
SITP[1:0]
CKABEN
SCDEN
CHEN
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0xA0 CH5CFGR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
OFFSET[23:0] DTRBS[4:0]
0xA4 CH5CFGR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AWFORD[1:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
WDATA[15:0]
0xAC CH5WDATR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
INDAT1[15:0] INDAT0[15:0]
0xB0 CH5DATINR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0xB4 -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0xBC
SPICKSEL[1:0]
DATPACK[1:0]
DATMPX[1:0]
CHINSEL
SITP[1:0]
CKABEN
SCDEN
CHEN
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0xC0 CH6CFGR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
OFFSET[23:0] DTRBS[4:0]
0xC4 CH6CFGR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AWFORD[1:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWFOSR[4:0] BKSCD[3:0] SCDT[7:0]
0xC8 CH6AWSCDR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
WDATA[15:0]
0xCC CH6WDATR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
INDAT1[15:0] INDAT0[15:0]
0xD0 CH6DATINR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0xD4 -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0xDC
SPICKSEL[1:0]
DATPACK[1:0]
DATMPX[1:0]
CHINSEL
SITP[1:0]
CKABEN
SCDEN
CHEN
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0xE0 CH7CFGR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
OFFSET[23:0] DTRBS[4:0]
0xE4 CH7CFGR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AWFORD[1:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
WDATA[15:0]
0xEC CH7WDATR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
INDAT1[15:0] INDAT0[15:0]
0xF0 CH7DATINR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
0xF4 -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
JEXTSEL[2:0] Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0xFC
RSW START
JEXTEN[1:0]
JSW START
RDMAEN
JDMAEN
AWFSEL
RCONT
RSYNC
JSCAN
JSYNC
DFEN
DFSDM_
FAST
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RCH[2:0]
0x100 FLT0CR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ROVRIE
REOCIE
CKABIE
JOVRIE
JEOCIE
AWDIE
SCDIE
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWDCH[7:0] EXCH[7:0]
0x104 FLT0CR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ROVRF
REOCF
JOVRF
JEOCF
AWDF
DFSDM_
RCIP
JCIP
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
SCDF[7:0] CKABF[7:0]
0x108 FLT0ISR
reset value 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
CLR ROVRF
CLR JOVRF
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
CLRSCDF[7:0] CLRCKABF[7:0]
0x10C FLT0ICR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
JCHG[7:0]
0x110 FLT0JCHGR
reset value 0 0 0 0 0 0 0 1
FORD[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FOSR[9:0] IOSR[7:0]
0x114 FLT0FCR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
JDATACH [2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
JDATA[23:0]
0x118 FLT0JDATAR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
RPEND
DFSDM_ RDATA
Res.
Res.
Res.
Res.
RDATA[23:0]
0x11C FLT0RDATAR CH[2:0]
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
AWHT[23:0] BKAWH[3:0]
0x120 FLT0AWHTR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
AWLT[23:0] BKAWL[3:0]
0x124 FLT0AWLTR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWHTF[7:0] AWLTF[7:0]
0x128 FLT0AWSR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
CLRAWHTF[7:0] CLRAWLTF[7:0]
0x12C FLT0AWCFR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x18C
0x17C
0x13C -
Offset
RM0430
name
FLT1ISR
FLT1ICR
DFSDM_
DFSDM_
DFSDM_
DFSDM_
DFSDM_
DFSDM_
DFSDM_
DFSDM_
DFSDM_
DFSDM_
Reserved
FLT1CR2
FLT1CR1
FLT1FCR
reset value
reset value
reset value
reset value
reset value
reset value
reset value
reset value
reset value
reset value
Register
FLT0EXMIN
FLT1JCHGR
FLT0EXMAX
FLT1JDATAR
FLT0CNVTIMR
0
0
0
0
1
Res. Res. Res. Res. Res. Res. 31
0
0
0
0
1
0
FORD[2:0] Res. Res. Res. Res. AWFSEL Res. 30
0
0
0
0
1
0
Res. Res. Res. Res. FAST Res. 29
0
0
1
Res. Res. Res. Res. Res. Res. Res. 0
28
0
0
1
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
RCH[2:0]
Res. Res. Res. Res. Res. 24
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
1
0
FOSR[9:0]
0
0
0
0
0
1
0
JDATA[23:0]
0
0
0
0
0
1
0
EXMIN[23:0]
AWDCH[7:0]
Res. Res. Res. RCONT Res.
EXMAX[23:0]
18
0
0
0
0
0
1
0
RM0430 Rev 8
17
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
Res. Res. Res. JCIP Res. 13
0
0
0
1
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. 7
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. 6
0
0
0
0
Res. Res. Res. Res. JDMAEN Res. Res. Res. 5
0
0
0
0
0
0
Res. Res. AWDF AWDIE JSCAN Res. Res. Res. 4
0
0
0
0
0
0
Res. CLR ROVRF ROVRF ROVRIE JSYNC Res. Res. Res. Res. 3
IOSR[7:0]
JCHG[7:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
JDATACH[2:0] Res. REOCF REOCIE JSW START Res. Res. EXMINCH[2:0] EXMAXCH[2:0] 1
0
0
0
0
0
0
1
0
445/1324
Digital filter for sigma delta modulators (DFSDM)
449
Digital filter for sigma delta modulators (DFSDM) RM0430
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
RPEND
DFSDM_ RDATA
Res.
Res.
Res.
Res.
RDATA[23:0]
0x19C FLT1RDATAR CH[2:0]
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
AWHT[23:0] BKAWH[3:0]
0x1A0 FLT1AWHTR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
AWLT[23:0] BKAWL[3:0]
0x1A4 FLT1AWLTR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWHTF[7:0] AWLTF[7:0]
0x1A8 FLT1AWSR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
CLRAWHTF[7:0] CLRAWLTF[7:0]
0x1AC FLT1AWCFR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
EXMAXCH[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
EXMAX[23:0]
0x1B0 FLT1EXMAX
reset value 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
EXMINCH[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
FLT1EXMIN EXMIN[23:0]
0x1B4
reset value 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
CNVCNT[27:0]
0x1B8 FLT1CNVTIMR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x1BC -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
JEXTSEL[2:0] Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x1FC
RSW START
JEXTEN[1:0]
JSW START
RDMAEN
JDMAEN
AWFSEL
RCONT
RSYNC
JSCAN
JSYNC
DFSDM_ DFEN
FAST
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RCH[2:0]
0x200 FLT2CR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ROVRIE
REOCIE
JOVRIE
JEOCIE
AWDIE
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWDCH[7:0] EXCH[7:0]
0x204 FLT2CR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ROVRF
REOCF
JOVRF
JEOCF
AWDF
DFSDM_
RCIP
JCIP
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x208 FLT2ISR
reset value 0 0 0 0 0 0 0
CLR ROVRF
CLR JOVRF
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x20C FLT2ICR
reset value 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
JCHG[7:0]
0x210 FLT2JCHGR
reset value 0 0 0 0 0 0 0 1
FORD[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FOSR[9:0] IOSR[7:0]
0x214 FLT2FCR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
JDATACH[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
JDATA[23:0]
0x218 FLT2JDATAR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
RPEND
DFSDM_ RDATA
Res.
Res.
Res.
Res.
RDATA[23:0]
0x21C FLT2RDATAR CH[2:0]
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
AWHT[23:0] BKAWH[3:0]
0x220 FLT2AWHTR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
AWLT[23:0] BKAWL[3:0]
0x224 FLT2AWLTR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWHTF[7:0] AWLTF[7:0]
0x228 FLT2AWSR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
CLRAWHTF[7:0] CLRAWLTF[7:0]
0x22C FLT2AWCFR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
EXMAXCH[2:0]
DFSDM_
Res.
Res.
Res.
Res.
EXMAX[23:0] Res.
0x230 FLT2EXMAX
reset value 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
EXMINCH[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
FLT2EXMIN EXMIN[23:0]
0x234
reset value 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
CNVCNT[27:0]
0x238 FLT2CNVTIMR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x23C -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
JEXTSEL[2:0] Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x27C
RSW START
JEXTEN[1:0]
JSW START
RDMAEN
JDMAEN
AWFSEL
RCONT
RSYNC
JSCAN
JSYNC
DFEN
DFSDM_
FAST
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RCH[2:0]
0x280 FLT3CR1
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
ROVRIE
REOCIE
JOVRIE
JEOCIE
AWDIE
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWDCH[7:0] EXCH[7:0]
0x284 FLT3CR2
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ROVRF
REOCF
JOVRF
JEOCF
AWDF
DFSDM_
RCIP
JCIP
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x288 FLT3ISR
reset value 0 0 0 0 0 0 0
CLR ROVRF
CLR JOVRF
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x28C FLT3ICR
reset value 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
JCHG[7:0]
0x290 FLT3JCHGR
reset value 0 0 0 0 0 0 0 1
FORD[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FOSR[9:0] IOSR[7:0]
0x294 FLT3FCR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
JDATACH[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
JDATA[23:0]
0x298 FLT3JDATAR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
RPEND
DFSDM_ Res. RDATA
Res.
Res.
Res.
RDATA[23:0]
0x29C FLT3RDATAR CH[2:0]
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
AWHT[23:0] BKAWH[3:0]
0x2A0 FLT3AWHTR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
AWLT[23:0] BKAWL[3:0]
0x2A4 FLT3AWLTR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
AWHTF[7:0] AWLTF[7:0]
0x2A8 FLT3AWSR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
CLRAWHTF[7:0] CLRAWLTF[7:0]
0x2AC FLT3AWCFR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
EXMAXCH[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
EXMAX[23:0]
0x2B0 FLT3EXMAX
reset value 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
EXMINCH[2:0]
DFSDM_
Res.
Res.
Res.
Res.
Res.
FLT3EXMIN EXMIN[23:0]
0x2B4
reset value 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
DFSDM_
Res.
Res.
Res.
Res.
CNVCNT[27:0]
0x2B8 FLT3CNVTIMR
reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x2BC -
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x3FC
16.1 Introduction
The RNG is a true random number generator that continuously provides 32-bit entropy
samples, based on an analog noise source. It can be used by the application as a live
entropy source to build a NIST compliant Deterministic Random Bit Generator (DRBG).
The RNG true random number generator has been validated according to the German
AIS-31 standard.
751*Y
%DQNHG5HJLVWHUV
FRQWURO 51*B&5
$+%
LQWHUIDFH GDWD 51*B'5
$ODUPV
UQJBLW VWDWXV 51*B65 ELW
UQJBKFON $+%FORFNGRPDLQ
)DXOWGHWHFWLRQ 'DWDVKLIWUHJ
&ORFNFKHFNHU
3RVWSURFHVVLQJORJLF ELW
ELW/)65 [
UQJBFON
ELW
6DPSOLQJ
1RUPDOL]DWLRQ [
51*FORFNGRPDLQ
$QDORJ $QDORJ
QRLVH QRLVH
HQBRVF VRXUFH VRXUFH
$QDORJQRLVHVRXUFH
06Y9
(UURU 2XWSXW
PHVVDJH
&RQGLWLRQLQJ
+HDWK RSWLRQDO
WHVWV
5DZGDWD
3RVWSURFHVVLQJ
RSWLRQDO
'LJLWL]DWLRQ 2XWSXW
UDZGDWDRU
GLJLWL]HGQRLVH
1RLVH6RXUFH VRXUFH
(QWURS\VRXUFH
06Y9
Noise source
The noise source is the component that contains the non-deterministic, entropy-providing
activity that is ultimately responsible for the uncertainty associated with the bitstring output
by the entropy source. It is composed of:
• Two analog noise sources, each based on three XORed free-running ring oscillator
outputs. It is possible to disable those analog oscillators to save power, as described in
Post processing
The sample values obtained from a true random noise source consist of 2-bit bitstrings.
Because this noise source output is biased, the RNG implements a post-processing
component that reduces that bias to a tolerable level.
The RNG post-processing consists of two stages, applied to each noise source bits:
• The RNG takes half of the bits from the sampled noise source, and half of the bits from
inverted sampled noise source. Thus, if the source generates more ‘1’ than ‘0’ (or the
opposite), it is filtered
• A linear feedback shift register (LFSR) performs a whitening process, producing 8-bit
strings.
This component is clocked by the RNG clock.
The times required between two random number generations, and between the RNG
initialization and availability of first sample are described in Section 16.6: RNG processing
time.
Output buffer
The RNG_DR data output register can store up to two 16-bit words which have been output
from the post-processing component (LFSR). In order to read back 32-bit random samples it
is required to wait 42 RNG clock cycles.
Whenever a random number is available through the RNG_DR register the DRDY flag
transitions from “0” to “1”. This flag remains high until output buffer becomes empty after
reading one word from the RNG_DR register.
Note: When interrupts are enabled an interrupt is generated when this data ready flag transitions
from “0” to “1”. Interrupt is then cleared automatically by the RNG as explained above.
Health checks
This component ensures that the entire entropy source (with its noise source) starts then
operates as expected, obtaining assurance that failures are caught quickly and with a high
probability and reliability.
The RNG implements the following health check features:
1. Behavior tests, applied to the entropy source at run-time
– Repetition count test, flagging an error when:
a) One of the noise source has provided more than 64 consecutive bits at a constant
value (“0” or “1”)
b) One of the noise sources has delivered more than 32 consecutive occurrence of
two bits patterns (“01” or “10”)
2. Vendor specific continuous test
– Real-time “too slow” sampling clock detector, flagging an error when one RNG
clock cycle is smaller than AHB clock cycle divided by 16.
The CECS and SECS status bits in the RNG_SR register indicate when an error condition is
detected, as detailed in Section 16.3.7: Error management.
Note: An interrupt can be generated when an error is detected.
Low-power operations
If the power consumption is a concern to the application, low-power strategies can be used,
as described in Section 16.4: RNG low-power usage on page 456.
Software post-processing
If a NIST approved DRBG with 128 bits of security strength is required an approved random
generator software must be built around the RNG true random number generator.
The user can enable or disable the above interrupt sources individually by changing the
mask bits or the general interrupt control bit IE in the RNG_CR register. The status of the
individual interrupt sources can be read from the RNG_SR register.
Note: Interrupts are generated only when RNG is enabled.
16.7.1 Introduction
In order to assess the amount of entropy available from the RNG, STMicroelectronics has
tested the peripheral against AIS-31 PTG.2 set of tests. The results can be provided on
demand or the customer can reproduce the measurements using the AIS reference
software. The customer could also test the RNG against an older NIST SP800-22 set of
tests.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. CED Res. IE RNGEN Res. Res.
rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. SEIS CEIS Res. Res. SECS CECS DRDY
rc_w0 rc_w0 r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
RNDATA[31:16]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RNDATA[15:0]
r r r r r r r r r r r r r r r r
10
11
9
8
7
6
5
4
3
2
1
0
RNGEN
CED
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RNG_CR
IE
0x000
Reset value 0 0 0
DRDY
CECS
SECS
CEIS
SEIS
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RNG_SR
0x004
Reset value 0 0 0 0 0
RNG_DR RNDATA[31:0]
0x008
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
,QWHUQDOFORFN &.B,17
&.B7,0IURP5&&
7,0[B(75
(75 7ULJJHU
3RODULW\VHOHFWLRQ (75) FRQWUROOHU
(GJHGHWHFWRUDQG3UHVFDOHU (753
75*2 7RRWKHUWLPHUV
,QSXWILOWHU 7R'$&DQG$'&
,75
7*,
,75
,75 75*, 6ODYHPRGH
FRQWUROOHU
,75
7,)B('
5HVHW
8,
(QDEOH
8S'RZQ
7,)3 &RXQW 5(35HJLVWHU
(QFRGHU
LQWHUIDFH 8
7,0[B&+
7,)3
2&
7,0[B&+1
$XWR5HORDG
8
5HJLVWHU
2&1
5HSHWLWLRQFRXQWHU
&.B36& 36& &.B&17 &17
7,0[B&+
SUHVFDOHU FRXQWHU '7*>@UHJLVWHUV
7,0[B&+
&&, &&,
7, 7,)3
2&
,QSXWILOWHU ,& ,&36 &DSWXUH&RPSDUH 2&5()
3UHVFDOHU
7,0[B&+1
(GJHGHWHFWRU 5HJLVWHU
7,)3
8
75& &&, &&,
7,0[B&+
7,)3
7, ,QSXWILOWHU ,& ,&36 &DSWXUH&RPSDUH 2&5()
3UHVFDOHU
(GJHGHWHFWRU 5HJLVWHU
7,)3 2&1
8
7,0[B&+1 7,0[B&+
75& &&, &&,
7,0[B&+
7,)3 2&
7, ,QSXWILOWHU ,& ,&36 &DSWXUH&RPSDUH 2&5()
3UHVFDOHU
(GJHGHWHFWRU 5HJLVWHU
7,)3 8
2&1
75& &&, &&,
7,0[B&+
7,)3
7, ,QSXWILOWHU ,& ,&36 &DSWXUH&RPSDUH 2&5()
3UHVFDOHU
(GJHGHWHFWRU 5HJLVWHU
7,)3
8
75&
2&
7,0[B&+
7,0[B%.,1
%5. %,
3RODULW\VHOHFWLRQ
&ORFNIDLOXUHHYHQWIURPFORFNFRQWUROOHU
&66 &ORFN6HFXULW\6\VWHP
069
Prescaler description
The prescaler can divide the counter clock frequency by any factor between 1 and 65536. It
is based on a 16-bit counter controlled through a 16-bit register (in the TIMx_PSC register).
It can be changed on the fly as this control register is buffered. The new prescaler ratio is
taken into account at the next update event.
Figure 88 and Figure 89 give some examples of the counter behavior when the prescaler
ratio is changed on the fly:
Figure 88. Counter timing diagram with prescaler division change from 1 to 2
&.B36&
&(1
7LPHUFORFN
&.B&17
&RXQWHUUHJLVWHU ) ) ) )$ )% )&
8SGDWHHYHQW 8(9
3UHVFDOHUFRQWUROUHJLVWHU
:ULWHDQHZYDOXHLQ7,0[B36&
3UHVFDOHUEXIIHU
3UHVFDOHUFRXQWHU
069
Figure 89. Counter timing diagram with prescaler division change from 1 to 4
&.B36&
&(1
7LPHUFORFN
&.B&17
) ) ) )$ )% )&
&RXQWHUUHJLVWHU
8SGDWHHYHQW 8(9
3UHVFDOHUFRQWUROUHJLVWHU
:ULWHDQHZYDOXHLQ7,0[B36&
3UHVFDOHUEXIIHU
3UHVFDOHUFRXQWHU
069
<ͺW^
EdͺE
dŝŵĞƌĐůŽĐŬс<ͺEd
ŽƵŶƚĞƌƌĞŐŝƐƚĞƌ ϯϭ ϯϮ ϯϯ ϯϰ ϯϱ ϯϲ ϬϬ Ϭϭ ϬϮ Ϭϯ Ϭϰ Ϭϱ Ϭϲ Ϭϳ
ŽƵŶƚĞƌŽǀĞƌĨůŽǁ
hƉĚĂƚĞĞǀĞŶƚ;hsͿ
hƉĚĂƚĞŝŶƚĞƌƌƵƉƚĨůĂŐ;h/&Ϳ
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B36&
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
<ͺW^
E
dŝŵĞƌĐůŽĐŬс<ͺEd
ŽƵŶƚĞƌƌĞŐŝƐƚĞƌ ϯϭ ϯϮ ϯϯ ϯϰ ϯϱ ϯϲ ϬϬ Ϭϭ ϬϮ Ϭϯ Ϭϰ Ϭϱ Ϭϲ Ϭϳ
ŽƵŶƚĞƌŽǀĞƌĨůŽǁ
hƉĚĂƚĞĞǀĞŶƚ;hsͿ
hƉĚĂƚĞŝŶƚĞƌƌƵƉƚĨůĂŐ;h/&Ϳ
ƵƚŽͲƌĞůŽĂĚƉƌĞůŽĂĚƌĞŐŝƐƚĞƌ && ϯϲ
tƌŝƚĞĂŶĞǁǀĂůƵĞŝŶd/DdžͺZZ
069
&.B36&
&(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU ) ) ) ) ) )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
$XWRUHORDGSUHORDG
)
UHJLVWHU
$XWRUHORDGVKDGRZ
UHJLVWHU )
:ULWHDQHZYDOXHLQ7,0[B$55 069
Downcounting mode
In downcounting mode, the counter counts from the auto-reload value (content of the
TIMx_ARR register) down to 0, then restarts from the auto-reload value and generates a
counter underflow event.
If the repetition counter is used, the update event (UEV) is generated after downcounting is
repeated for the number of times programmed in the repetition counter register plus one
(TIMx_RCR+1). Else the update event is generated at each counter underflow.
Setting the UG bit in the TIMx_EGR register (by software or by using the slave mode
controller) also generates an update event.
The UEV update event can be disabled by software by setting the UDIS bit in TIMx_CR1
register. This is to avoid updating the shadow registers while writing new values in the
preload registers. Then no update event occurs until UDIS bit has been written to 0.
However, the counter restarts from the current auto-reload value, whereas the counter of the
prescaler restarts from 0 (but the prescale rate doesn’t change).
In addition, if the URS bit (update request selection) in TIMx_CR1 register is set, setting the
UG bit generates an update event UEV but without setting the UIF flag (thus no interrupt or
DMA request is sent). This is to avoid generating both update and capture interrupts when
clearing the counter on the capture event.
When an update event occurs, all the registers are updated and the update flag (UIF bit in
TIMx_SR register) is set (depending on the URS bit):
• The repetition counter is reloaded with the content of TIMx_RCR register
• The buffer of the prescaler is reloaded with the preload value (content of the TIMx_PSC
register)
• The auto-reload active register is updated with the preload value (content of the
TIMx_ARR register). Note that the auto-reload is updated before the counter is
reloaded, so that the next period is the expected one
The following figures show some examples of the counter behavior for different clock
frequencies when TIMx_ARR=0x36.
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHUXQGHUIORZ
FQWBXGI
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
069
&.B36&
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
069
Figure 100. Counter timing diagram, update event when repetition counter is not used
&.B36&
&(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
$XWRUHORDGSUHORDG
UHJLVWHU ))
:ULWHDQHZYDOXHLQ7,0[B$55
069
DMA request is sent). This is to avoid generating both update and capture interrupts when
clearing the counter on the capture event.
When an update event occurs, all the registers are updated and the update flag (UIF bit in
TIMx_SR register) is set (depending on the URS bit):
• The repetition counter is reloaded with the content of TIMx_RCR register
• The buffer of the prescaler is reloaded with the preload value (content of the TIMx_PSC
register)
• The auto-reload active register is updated with the preload value (content of the
TIMx_ARR register). Note that if the update source is a counter overflow, the auto-
reload is updated before the counter is reloaded, so that the next period is the expected
one (the counter is loaded with the new value).
The following figures show some examples of the counter behavior for different clock
frequencies.
Figure 101. Counter timing diagram, internal clock divided by 1, TIMx_ARR = 0x6
&.B36&
&(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU
&RXQWHUXQGHUIORZ
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
1. Here, center-aligned mode 1 is used (for more details refer to Section 17.4: TIM1&TIM8 registers).
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
Figure 105. Counter timing diagram, update event with ARPE=1 (counter underflow)
&.B36&
&(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
$XWRUHORDGSUHORDGUHJLVWHU )'
:ULWHDQHZYDOXHLQ7,0[B$55
$XWRUHORDGDFWLYHUHJLVWHU )'
069
Figure 106. Counter timing diagram, update event with ARPE=1 (counter overflow)
&.B36&
&(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU ) ) ) )$ )% )& )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
$XWRUHORDGSUHORDGUHJLVWHU )'
:ULWHDQHZYDOXHLQ7,0[B$55
$XWRUHORDGDFWLYHUHJLVWHU )'
069
Figure 107. Update rate examples depending on mode and TIMx_RCR register
settings
&RXQWHUDOLJQHGPRGH (GJHDOLJQHGPRGH
&RXQWHU 8SFRXQWLQJ 'RZQFRXQWLQJ
7,0[B&17
7,0[B5&5
8(9
7,0[B5&5
8(9
8(9
7,0[B5&5
7,0[B5&5 8(9
7,0[B5&5
DQG
8(9
UHV\QFKURQL]DWLRQ
E\6: E\6: E\6:
8(9 8SGDWHHYHQW3UHORDGUHJLVWHUVWUDQVIHUUHGWRDFWLYHUHJLVWHUVDQGXSGDWHLQWHUUXSWJHQHUDWHG
8SGDWH(YHQWLIWKHUHSHWLWLRQFRXQWHUXQGHUIORZRFFXUVZKHQWKHFRXQWHULVHTXDOWRWKHDXWRUHORDGYDOXH
06Y9
,QWHUQDOFORFN
&(1 &17B(1
8*
&17B,1,7
&RXQWHUUHJLVWHU
069
7,0[B60&5
76>@
RU 7,) RU
7,) RU (QFRGHU
,75[ PRGH
[[
7,B('
75*, ([WHUQDOFORFN
7,)3 PRGH &.B36&
7,)B5LVLQJ
7, (GJH 7,)3 (75) ([WHUQDOFORFN
)LOWHU
GHWHFWRU (75) PRGH
7,)B)DOOLQJ
&.B,17 ,QWHUQDOFORFN
PRGH
,&)>@ &&3 LQWHUQDOFORFN
7,0[B&&05 7,0[B&&(5
(&( 606>@
7,0[B60&5
069
For example, to configure the upcounter to count in response to a rising edge on the TI2
input, use the following procedure:
1. Configure channel 2 to detect rising edges on the TI2 input by writing CC2S = ‘01’ in
the TIMx_CCMR1 register.
2. Configure the input filter duration by writing the IC2F[3:0] bits in the TIMx_CCMR1
register (if no filter is needed, keep IC2F=0000).
3. Select rising edge polarity by writing CC2P=0 and CC2NP=0 in the TIMx_CCER
register.
4. Configure the timer in external clock mode 1 by writing SMS=111 in the TIMx_SMCR
register.
5. Select TI2 as the trigger input source by writing TS=110 in the TIMx_SMCR register.
6. Enable the counter by writing CEN=1 in the TIMx_CR1 register.
Note: The capture prescaler is not used for triggering, so you don’t need to configure it.
When a rising edge occurs on TI2, the counter counts once and the TIF flag is set.
The delay between the rising edge on TI2 and the actual clock of the counter is due to the
resynchronization circuit on TI2 input.
7,
&17B(1
&RXQWHUUHJLVWHU
7,)
:ULWH7,)
069
RU 7,) RU
7,) RU (QFRGHU
PRGH
75*, ([WHUQDOFORFN
(75 PRGH &.B36&
'LYLGHU (753
(75SLQ )LOWHU (75) ([WHUQDOFORFN
I'76 GRZQFRXQWHU PRGH
&.B,17 ,QWHUQDOFORFN
(73 (736>@ (7)>@ PRGH
LQWHUQDOFORFN
7,0[B60&5 7,0[B60&5 7,0[B60&5
(&( 606>@
7,0[B60&5
069
For example, to configure the upcounter to count each 2 rising edges on ETR, use the
following procedure:
I &.B,17
&17B(1
(75
(753
(75)
&RXQWHUFORFN
&.B,17 &.B36&
&RXQWHUUHJLVWHU
069
7,)B('
7RWKHVODYHPRGHFRQWUROOHU
7, 7,)B5LVLQJ
)LOWHU 7,) (GJH 7,)3
I'76 GRZQFRXQWHU 7,)B)DOOLQJ
GHWHFWRU
7,)3 ,& 'LYLGHU ,&36
,&)>@ &&3&&13 75&
7,0[B&&05 7,0[B&&(5 IURPVODYHPRGH
7,)B5LVLQJ FRQWUROOHU
IURPFKDQQHO
&&6>@ ,&36>@ &&(
7,)B)DOOLQJ
IURPFKDQQHO 7,0[B&&05 7,0[B&&(5
069
The output stage generates an intermediate waveform which is then used for reference:
OCxRef (active high). The polarity acts at the end of the chain.
$3%%XV
0&8SHULSKHUDOLQWHUIDFH
LIELW
6 ZULWH&&5+
KLJK
ORZ
5HDG&&5+ 6 ZULWHBLQBSURJUHVV
UHDGBLQBSURJUHVV ZULWH&&5/
5HDG&&5/ &DSWXUHFRPSDUHSUHORDGUHJLVWHU 5
5 2XWSXW &&6>@
FDSWXUHBWUDQVIHU FRPSDUHBWUDQVIHU PRGH
&&6>@
&&6>@ ,QSXW
PRGH 2&3(
&&6>@ &DSWXUHFRPSDUHVKDGRZUHJLVWHU 2&3(
8(9
7,0B&&05
&RPSDUDWRU IURPWLPH
,&36 &DSWXUH
EDVHXQLW
&&( &17!&&5
&RXQWHU &17 &&5
&&*
7,0B(*5
069
7RWKHPDVWHUPRGH
FRQWUROOHU
(75) 2XWSXW 2&
HQDEOH
µ¶
[ FLUFXLW
2&5() 2&5()&
2&B'7 &&3
&17!&&5 2XWSXW
2XWSXW 'HDGWLPH 7,0B&&(5
PRGH
&17 &&5 VHOHFWRU JHQHUDWRU
FRQWUROOHU 2&1B'7
2XWSXW 2&1
2&[5() µ¶ [ HQDEOH
2&5() FLUFXLW
069
&&( 7,0B&&(5
069
The capture/compare block is made of one preload register and one shadow register. Write
and read always access the preload register.
In capture mode, captures are actually done in the shadow register, which is copied into the
preload register.
In compare mode, the content of the preload register is copied into the shadow register
which is compared to the counter.
TI1
TIMx_CCR1 0004
TIMx_CCR2 0002
To force an output compare signal (OCXREF/OCx) to its active level, you just need to write
101 in the OCxM bits in the corresponding TIMx_CCMRx register. Thus OCXREF is forced
high (OCxREF is always active high) and OCx get opposite value to CCxP polarity bit.
For example: CCxP=0 (OCx active high) => OCx is forced to high level.
The OCxREF signal can be forced low by writing the OCxM bits to 100 in the TIMx_CCMRx
register.
Anyway, the comparison between the TIMx_CCRx shadow register and the counter is still
performed and allows the flag to be set. Interrupt and DMA requests can be sent
accordingly. This is described in the output compare mode section below.
2&5() 2&
0DWFKGHWHFWHGRQ&&5
,QWHUUXSWJHQHUDWHGLIHQDEOHG
069
&RXQWHUUHJLVWHU
2&;5()
&&5[
&&[,)
2&;5()
&&5[
&&[,)
2&;5() µ¶
&&5[!
&&[,)
2&;5() µ¶
&&5[
&&[,)
069
• Downcounting configuration
Downcounting is active when DIR bit in TIMx_CR1 register is high. Refer to
Downcounting mode.
In PWM mode 1, the reference signal OCxRef is low as long as
TIMx_CNT > TIMx_CCRx else it becomes high. If the compare value in TIMx_CCRx is
greater than the auto-reload value in TIMx_ARR, then OCxREF is held at ‘1’. 0% PWM
is not possible in this mode.
&RXQWHUUHJLVWHU
2&[5()
&&5[
&&[,) &06
&06
&06
2&[5()
&&5[
&06 RU
&&[,)
µ¶
2&[5()
&&5[
&&[,) &06
&06
&06
µ¶
2&[5()
&&5[!
&&[,) &06
&06
&06
µ¶
2&[5()
&&5[
&&[,) &06
&06
&06
$,E
2&[5()
2&[
GHOD\
2&[1
GHOD\
069
Figure 122. Dead-time waveforms with delay greater than the negative pulse.
2&[5()
2&[
GHOD\
2&[1
069
Figure 123. Dead-time waveforms with delay greater than the positive pulse.
2&[5()
2&[
2&[1
GHOD\
069
The dead-time delay is the same for each of the channels and is programmable with the
DTG bits in the TIMx_BDTR register. Refer to Section 17.4.18: TIM1&TIM8 break and dead-
time register (TIMx_BDTR) for delay calculation.
are to have both outputs at inactive level or both outputs active and complementary with
dead-time.
Note: When only OCxN is enabled (CCxE=0, CCxNE=1), it is not complemented and becomes
active as soon as OCxREF is high. For example, if CCxNP=0 then OCxN=OCxRef. On the
other hand, when both OCx and OCxN are enabled (CCxE=CCxNE=1) OCx becomes
active when OCxREF is high whereas OCxN is complemented and becomes active when
OCxREF is low.
active level together. Note that because of the resynchronization on MOE, the
dead-time duration is a bit longer than usual (around 2 ck_tim clock cycles).
– If OSSI=0 then the timer releases the enable outputs else the enable outputs
remain or become high as soon as one of the CCxE or CCxNE bits is high.
• The break status flag (BIF bit in the TIMx_SR register) is set. An interrupt can be
generated if the BIE bit in the TIMx_DIER register is set. A DMA request can be sent if
the BDE bit in the TIMx_DIER register is set.
• If the AOE bit in the TIMx_BDTR register is set, the MOE bit is automatically set again
at the next update event UEV. This can be used to perform a regulation, for instance.
Else, MOE remains low until you write it to ‘1’ again. In this case, it can be used for
security and you can connect the break input to an alarm from power drivers, thermal
sensors or any security components.
Note: The break inputs is acting on level. Thus, the MOE cannot be set while the break input is
active (neither automatically nor by software). In the meantime, the status flag BIF cannot
be cleared.
The break can be generated by the BRK input which has a programmable polarity and an
enable bit BKE in the TIMx_BDTR Register.
There are two solutions to generate a break:
• By using the BRK input which has a programmable polarity and an enable bit BKE in
the TIMx_BDTR register
• By software through the BG bit of the TIMx_EGR register.
In addition to the break input and the output management, a write protection has been
implemented inside the break circuit to safeguard the application. It allows you to freeze the
configuration of several parameters (dead-time duration, OCx/OCxN polarities and state
when disabled, OCxM configurations, break enable and polarity). You can choose from 3
levels of protection selected by the LOCK bits in the TIMx_BDTR register. Refer to
Section 17.4.18: TIM1&TIM8 break and dead-time register (TIMx_BDTR). The LOCK bits
can be written only once after an MCU reset.
Figure 124 shows an example of behavior of the outputs in response to a break.
%5($. 02(
2&[5()
2&[
2&[1QRWLPSOHPHQWHG&&[3 2,6[
2&[
2&[1QRWLPSOHPHQWHG&&[3 2,6[
2&[
2&[1QRWLPSOHPHQWHG&&[3 2,6[
2&[
2&[1QRWLPSOHPHQWHG&&[3 2,6[
2&[
2&[
2&[
2&[1 GHOD\
&&[( &&[3 2,6[ &&[1( &&[13 2,6[1
2&[
2&[1 GHOD\
&&[( &&[3 2,6[ &&[1( &&[13 2,6[1
2&[
2&[1
&&[( &&[3 &&[1( &&[13 2,6[ 2,6[1 RU2,6[ 2,6[1
069
&&5[
&RXQWHU &17
(75)
(75)EHFRPHVKLJK (75)VWLOOKLJK
06Y9
Note: In case of a PWM with a 100% duty cycle (if CCRx>ARR), then OCxREF is enabled again at
the next counter overflow.
OCxREF
Write COM to 1
COM event
CCxE=1 write OCxM to 100 CCxE=1
CCxNE=0 CCxNE=0
OCxM=100 (forced inactive) OCxM=100
OCx
Example 1
OCxN
Write CCxNE to 1
and OCxM to 101 CCxE=0
CCxE=1 CCxNE=1
CCxNE=0 OCxM=101
OCx OCxM=100 (forced inactive)
Example 2
OCxN
write CCxNE to 0
CCxE=1
and OCxM to 100 CCxE=1
CCxNE=0 CCxNE=0
OCxM=100 (forced inactive) OCxM=100
OCx
Example 3
OCxN
ai14910
7,
2&5()
2&
7,0B$55
&RXQWHU
7,0B&&5
ƚ
ƚ>z ƚWh>^
069
For example you may want to generate a positive pulse on OC1 with a length of tPULSE and
after a delay of tDELAY as soon as a positive edge is detected on the TI2 input pin.
Let’s use TI2FP2 as trigger 1:
• Map TI2FP2 to TI2 by writing CC2S=’01’ in the TIMx_CCMR1 register.
• TI2FP2 must detect a rising edge, write CC2P=’0’ and CC2NP=’0’ in the TIMx_CCER
register.
• Configure TI2FP2 as trigger for the slave mode controller (TRGI) by writing TS=’110’ in
the TIMx_SMCR register.
• TI2FP2 is used to start the counter by writing SMS to ‘110’ in the TIMx_SMCR register
(trigger mode).
The OPM waveform is defined by writing the compare registers (taking into account the
clock frequency and the counter prescaler).
• The tDELAY is defined by the value written in the TIMx_CCR1 register.
• The tPULSE is defined by the difference between the auto-reload value and the compare
value (TIMx_ARR - TIMx_CCR1).
• Let’s say you want to build a waveform with a transition from ‘0’ to ‘1’ when a compare
match occurs and a transition from ‘1’ to ‘0’ when the counter reaches the auto-reload
value. To do this you enable PWM mode 2 by writing OC1M=111 in the TIMx_CCMR1
register. You can optionally enable the preload registers by writing OC1PE=’1’ in the
TIMx_CCMR1 register and ARPE in the TIMx_CR1 register. In this case you have to
write the compare value in the TIMx_CCR1 register, the auto-reload value in the
TIMx_ARR register, generate an update by setting the UG bit and wait for external
trigger event on TI2. CC1P is written to ‘0’ in this example.
In our example, the DIR and CMS bits in the TIMx_CR1 register should be low.
You only want 1 pulse (Single mode), so you write '1 in the OPM bit in the TIMx_CR1
register to stop the counter at the next update event (when the counter rolls over from the
auto-reload value back to 0). When OPM bit in the TIMx_CR1 register is set to '0', so the
Repetitive Mode is selected.
Particular case: OCx fast enable:
In One-pulse mode, the edge detection on TIx input set the CEN bit which enables the
counter. Then the comparison between the counter and the compare value makes the
output toggle. But several clock cycles are needed for these operations and it limits the
minimum delay tDELAY min we can get.
If you want to output a waveform with the minimum delay, you can set the OCxFE bit in the
TIMx_CCMRx register. Then OCxRef (and OCx) are forced in response to the stimulus,
without taking in account the comparison. Its new level is the same as if a compare match
had occurred. OCxFE acts only if the channel is configured in PWM1 or PWM2 mode.
configure TIMx_ARR before starting. in the same way, the capture, compare, prescaler,
repetition counter, trigger output features continue to work as normal. Encoder mode and
External clock mode 2 are not compatible and must not be selected together.
In this mode, the counter is modified automatically following the speed and the direction of
the incremental encoder and its content, therefore, always represents the encoder’s
position. The count direction correspond to the rotation direction of the connected sensor.
Table 101 summarizes the possible combinations, assuming TI1 and TI2 don’t switch at the
same time.
An external incremental encoder can be connected directly to the MCU without external
interface logic. However, comparators are normally be used to convert the encoder’s
differential outputs to digital signals. This greatly increases noise immunity. The third
encoder output which indicate the mechanical zero position, may be connected to an
external interrupt input and trigger a counter reset.
Figure 128 gives an example of counter operation, showing count signal generation and
direction control. It also shows how input jitter is compensated where both edges are
selected. This might occur if the sensor is positioned near to one of the switching points. For
this example we assume that the configuration is the following:
• CC1S=’01’ (TIMx_CCMR1 register, TI1FP1 mapped on TI1).
• CC2S=’01’ (TIMx_CCMR2 register, TI1FP2 mapped on TI2).
• CC1P=’0’, CC1NP=’0’, and IC1F = ‘0000’ (TIMx_CCER register, TI1FP1 non-inverted,
TI1FP1=TI1).
• CC2P=’0’, CC2NP=’0’, and IC2F = ‘0000’ (TIMx_CCER register, TI1FP2 non-inverted,
TI1FP2= TI2).
• SMS=’011’ (TIMx_SMCR register, both inputs are active on both rising and falling
edges).
• CEN=’1’ (TIMx_CR1 register, Counter enabled).
7,
7,
&RXQWHU
XS GRZQ XS
069
Figure 129 gives an example of counter behavior when TI1FP1 polarity is inverted (same
configuration as above except CC1P=’1’).
Figure 129. Example of encoder interface mode with TI1FP1 polarity inverted.
IRUZDUG MLWWHU EDFNZDUG MLWWHU IRUZDUG
7,
7,
&RXQWHU
GRZQ XS GRZQ
069
The timer, when configured in Encoder Interface mode provides information on the sensor’s
current position. You can obtain dynamic information (speed, acceleration, deceleration) by
measuring the period between two encoder events using a second timer configured in
capture mode. The output of the encoder which indicates the mechanical zero can be used
for this purpose. Depending on the time between two events, the counter can also be read
at regular times. You can do this by latching the counter value into a third input capture
register if available (then the capture signal must be periodic and can be generated by
another timer). when available, it is also possible to read its value through a DMA request
generated by a real-time clock.
7,+
7,+
,QWHUIDFLQJWLPHU
7,+
&RXQWHU &17
&&5
75*2 2&5()
&20
2&
2&1
$GYDQFHGFRQWUROWLPHUV
2&
2&1
2&
2&1
:ULWH&&[(&&[1(
DQG2&[0IRUQH[WVWHS
DLE
7,
8*
&RXQWHUUHJLVWHU
7,)
069
7,
&17B(1
&RXQWHUUHJLVWHU
7,)
:ULWH7,)
069
7,
&17B(1
&RXQWHUUHJLVWHU
7,)
069
7,
&(1&17B(1
(75
&RXQWHUUHJLVWHU
7,)
069
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. CKD[1:0] ARPE CMS[1:0] DIR OPM URS UDIS CEN
rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 TI1S MMS[2:0] CCDS CCUS Res. CCPC
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ETP ECE ETPS[1:0] ETF[3:0] MSM TS[2:0] Res. SMS[2:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OC2 OC2 OC2 OC1 OC1 OC1
OC2M[2:0] OC1M[2:0]
CE PE FE CC2S[1:0] CE PE FE CC1S[1:0]
IC2F[3:0] IC2PSC[1:0] IC1F[3:0] IC1PSC[1:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Table 103. Output control bits for complementary OCx and OCxN channels
with break feature
Control bits Output states(1)
MOE OSSI OSSR CCxE CCxNE
OCx output state OCxN output state
bit bit bit bit bit
Output Disabled (not driven by
Output Disabled (not driven by the timer)
0 the timer)
OCxN=0, OCxN_EN=0
OCx=0, OCx_EN=0
0
Output Disabled (not driven by
OCxREF + Polarity OCxN=OCxREF xor
1 the timer)
CCxNP, OCxN_EN=1
OCx=0, OCx_EN=0
0 OCxREF + Polarity
Output Disabled (not driven by the timer)
0 OCx=OCxREF xor CCxP,
OCxN=0, OCxN_EN=0
OCx_EN=1
1 Complementary to OCREF (not
OCREF + Polarity + dead-time OCREF)
1
OCx_EN=1 + Polarity + dead-time
1 X OCxN_EN=1
Output Disabled (not driven by
Output Disabled (not driven by the timer)
0 the timer)
OCxN=CCxNP, OCxN_EN=0
OCx=CCxP, OCx_EN=0
0
Off-State (output enabled with OCxREF + Polarity
1 inactive state) OCxN=OCxREF xor CCxNP,
OCx=CCxP, OCx_EN=1 OCxN_EN=1
1
OCxREF + Polarity Off-State (output enabled with inactive
0 OCx=OCxREF xor CCxP, state)
OCx_EN=1 OCxN=CCxNP, OCxN_EN=1
1
Complementary to OCREF (not
OCREF + Polarity + dead-time
1 OCREF) + Polarity + dead-time
OCx_EN=1
OCxN_EN=1
Output Disabled (not driven by
Output Disabled (not driven by the timer)
0 the timer)
0 OCxN=CCxNP, OCxN_EN=0
OCx=CCxP, OCx_EN=0
Note: The state of the external I/O pins connected to the complementary OCx and OCxN channels
depends on the OCx and OCxN channel state and the GPIO registers.
Note: As the bits AOE, BKP, BKE, OSSI, OSSR and DTG[7:0] can be write-locked depending on
the LOCK configuration, it can be necessary to configure all of them during the first write
access to the TIMx_BDTR register.
0x2C
0x1C
0x0C
Offset
532/1324
17.4.21
mode
mode
mode
mode
TIMx_SR
TIMx_CR2
TIMx_CR1
TIMx_PSC
TIMx_CNT
TIMx_RCR
TIMx_ARR
TIMx_EGR
Register
TIMx_DIER
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
TIMx_CCER
TIMx_SMCR
Input Capture
Input Capture
TIMx_CCMR2
TIMx_CCMR2
TIMx_CCMR1
TIMx_CCMR1
Output Compare
Output Compare
below:
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 31
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 30
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 29
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 28
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 27
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 26
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 25
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 24
Advanced-control timers (TIM1&TIM8)
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 23
TIM1&TIM8 register map
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 22
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 21
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 20
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 19
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 18
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
RM0430 Rev 8
17
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 16
0
0
0
0
0
0
0
0
Res. Res. O24CE OC2CE Res. Res. Res. ETP Res. Res. 15
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[2:0]
[2:0]
IC4F[3:0]
IC2F[3:0]
OC4M
OC2M
[1:0]
0
0
0
0
0
0
0
0
0
0
0
0
12
0
0
0
0
0
0
0
0
0
0
0
0
IC4
IC2
[1:0]
[1:0]
PSC
PSC
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
9
ETF[3:0]
[1:0]
[1:0]
[1:0]
[1:0]
[1:0]
CKD
0
0
0
0
0
0
0
0
0
0
0
0
CC4S
CC4S
CC2S
CC2S
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
PSC[15:0]
CNT[15:0]
ARR[15:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[2:0]
[2:0]
IC3F[3:0]
IC1F[3:0]
OC3M
OC1M
TS[2:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
REP[7:0]
IC3
IC1
[1:0]
[1:0]
PSC
PSC
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[1:0]
[1:0]
[1:0]
[1:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
TIM1&TIM8 registers are mapped as 16-bit addressable registers as described in the table
CC3S
CC3S
CC1S
CC1S
0
RM0430
RM0430 Advanced-control timers (TIM1&TIM8)
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
TIMx_CCR1 CCR1[15:0]
0x34
Reset value Res. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_CCR2 CCR2[15:0]
0x38
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_CCR3 CCR3[15:0]
0x3C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_CCR4 CCR4[15:0]
0x40
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
OSSR
LOCK
OSSI
MOE
AOE
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
BKP
BKE
TIMx_BDTR DT[7:0]
0x44 [1:0]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_DCR DBL[4:0] DBA[4:0]
0x48
Reset value 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_DMAR DMAB[15:0]
0x4C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
,QWHUQDOFORFN &.B,17
7,0[&/.IURP5&& 7ULJJHU
(75) FRQWUROOHU
(75 3RODULW\VHOHFWLRQ HGJH (753 75*2
7,0[B(75 ,QSXWILOWHU
GHWHFWRU SUHVFDOHU WRRWKHUWLPHUV
WR'$&$'&
,75 7*,
,75 ,75
6ODYH
,75 75& 75*, FRQWUROOHU 5HVHWHQDEOHXSFRXQW
,75
PRGH
7,)B('
7,)3 (QFRGHU
7,)3 LQWHUIDFH
8
$XWRUHORDGUHJLVWHU 8,
6WRSFOHDURUXSGRZQ
8
&.B36& 36& &.B&17 &17FRXQWHU
SUHVFDOHU
&&, 8 &&,
;25 7,)3 2&5()
7, ,QSXWILOWHU ,& ,&36 2XWSXW 2& 7,0[B&+
7,)3 3UHVFDOHU &DSWXUH&RPSDUHUHJLVWHU
HGJHGHWHFWRU FRQWURO
7,0[B&+ 75&
&&,
8 &&,
7,)3
7, ,QSXWILOWHU ,& 2XWSXW 2&
7,0[B&+ 7,)3 3UHVFDOHU
,&36 &DSWXUH&RPSDUHUHJLVWHU 2&5() 7,0[B&+
HGJHGHWHFWRU FRQWURO
75&
&&, &&,
8
7,)3 2&5()
7, ,QSXWILOWHU ,& ,&36 2XWSXW 2& 7,0[B&+
7,)3 3UHVFDOHU &DSWXUH&RPSDUHUHJLVWHU
7,0[B&+ HGJHGHWHFWRU FRQWURO
75& &&,
8 &&,
7,)3
7, ,QSXWILOWHU ,& 2XWSXW 2&
7,0[B&+ 7,)3 3UHVFDOHU
,&36 &DSWXUH&RPSDUHUHJLVWHU 2&5() 7,0[B&+
HGJHGHWHFWRU FRQWURO
75&
(75)
1RWHV
3UHORDGUHJLVWHUVWUDQVIHUUHG
5HJ
WRDFWLYHUHJLVWHUVRQ8HYHQW
DFFRUGLQJWRFRQWUROELW
(YHQW
,QWHUUXSW '0$RXWSXW
069
Prescaler description
The prescaler can divide the counter clock frequency by any factor between 1 and 65536. It
is based on a 16-bit counter controlled through a 16-bit/32-bit register (in the TIMx_PSC
register). It can be changed on the fly as this control register is buffered. The new prescaler
ratio is taken into account at the next update event.
Figure 136 and Figure 137 give some examples of the counter behavior when the prescaler
ratio is changed on the fly:
Figure 136. Counter timing diagram with prescaler division change from 1 to 2
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU ) ) ) )$ )% )&
8SGDWHHYHQW 8(9
3UHVFDOHUFRQWUROUHJLVWHU
:ULWHDQHZYDOXHLQ7,0[B36&
3UHVFDOHUEXIIHU
3UHVFDOHUFRXQWHU
069
Figure 137. Counter timing diagram with prescaler division change from 1 to 4
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU ) ) ) )$ )% )&
8SGDWHHYHQW 8(9
3UHVFDOHUFRQWUROUHJLVWHU
:ULWHDQHZYDOXHLQ7,0[B36&
3UHVFDOHUEXIIHU
3UHVFDOHUFRXQWHU
069
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
06Y9
&.B,17
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
06Y9
Figure 142. Counter timing diagram, Update event when ARPE=0 (TIMx_ARR not
preloaded)
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
$XWRUHORDGUHJLVWHU ))
:ULWHDQHZYDOXHLQ7,0[B$55
06Y9
Figure 143. Counter timing diagram, Update event when ARPE=1 (TIMx_ARR
preloaded)
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU ) ) ) ) ) )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
$XWRUHORDGSUHORDGUHJLVWHU )
$XWRUHORDGVKDGRZUHJLVWHU )
:ULWHDQHZYDOXHLQ7,0[B$55
06Y9
Downcounting mode
In downcounting mode, the counter counts from the auto-reload value (content of the
TIMx_ARR register) down to 0, then restarts from the auto-reload value and generates a
counter underflow event.
An Update event can be generate at each counter underflow or by setting the UG bit in the
TIMx_EGR register (by software or by using the slave mode controller)
The UEV update event can be disabled by software by setting the UDIS bit in TIMx_CR1
register. This is to avoid updating the shadow registers while writing new values in the
preload registers. Then no update event occurs until UDIS bit has been written to 0.
However, the counter restarts from the current auto-reload value, whereas the counter of the
prescaler restarts from 0 (but the prescale rate doesn’t change).
In addition, if the URS bit (update request selection) in TIMx_CR1 register is set, setting the
UG bit generates an update event UEV but without setting the UIF flag (thus no interrupt or
DMA request is sent). This is to avoid generating both update and capture interrupts when
clearing the counter on the capture event.
When an update event occurs, all the registers are updated and the update flag (UIF bit in
TIMx_SR register) is set (depending on the URS bit):
• The buffer of the prescaler is reloaded with the preload value (content of the TIMx_PSC
register).
• The auto-reload active register is updated with the preload value (content of the
TIMx_ARR register). Note that the auto-reload is updated before the counter is
reloaded, so that the next period is the expected one.
The following figures show some examples of the counter behavior for different clock
frequencies when TIMx_ARR=0x36.
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHUXQGHUIORZ FQWBXGI
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
06Y9
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
06Y9
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
06Y9
&.B,17
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
$XWRUHORDGSUHORDGUHJLVWHU ))
:ULWHDQHZYDOXHLQ7,0[B$55
069
In this mode, the direction bit (DIR from TIMx_CR1 register) cannot be written. It is updated
by hardware and gives the current direction of the counter.
The update event can be generated at each counter overflow and at each counter underflow
or by setting the UG bit in the TIMx_EGR register (by software or by using the slave mode
controller) also generates an update event. In this case, the counter restarts counting from
0, as well as the counter of the prescaler.
The UEV update event can be disabled by software by setting the UDIS bit in TIMx_CR1
register. This is to avoid updating the shadow registers while writing new values in the
preload registers. Then no update event occurs until the UDIS bit has been written to 0.
However, the counter continues counting up and down, based on the current auto-reload
value.
In addition, if the URS bit (update request selection) in TIMx_CR1 register is set, setting the
UG bit generates an update event UEV but without setting the UIF flag (thus no interrupt or
DMA request is sent). This is to avoid generating both update and capture interrupt when
clearing the counter on the capture event.
When an update event occurs, all the registers are updated and the update flag (UIF bit in
TIMx_SR register) is set (depending on the URS bit):
• The buffer of the prescaler is reloaded with the preload value (content of the TIMx_PSC
register).
• The auto-reload active register is updated with the preload value (content of the
TIMx_ARR register). Note that if the update source is a counter overflow, the auto-
reload is updated before the counter is reloaded, so that the next period is the expected
one (the counter is loaded with the new value).
The following figures show some examples of the counter behavior for different clock
frequencies.
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU
&RXQWHUXQGHUIORZ
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
1. Here, center-aligned mode 1 is used (for more details refer to Section 18.4.1: TIMx control register 1 (TIMx_CR1)
on page 572).
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ FQWBRYI
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B,17
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
Figure 153. Counter timing diagram, Update event with ARPE=1 (counter underflow)
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU
&RXQWHUXQGHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
$XWRUHORDGSUHORDGUHJLVWHU )'
:ULWHDQHZYDOXHLQ7,0[B$55
$XWRUHORDGDFWLYHUHJLVWHU )'
069
Figure 154. Counter timing diagram, Update event with ARPE=1 (counter overflow)
&.B,17
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU ) ) ) )$ )% )& )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
$XWRUHORDGSUHORDGUHJLVWHU )'
:ULWHDQHZYDOXHLQ7,0[B$55
$XWRUHORDGDFWLYHUHJLVWHU )'
069
,QWHUQDOFORFN
&(1 &17B(1
8*
&17B,1,7
&RXQWHUUHJLVWHU
069
7,0[B60&5
76>@
RU 7,) RU
7,) RU (QFRGHU
,75[ PRGH
[[
7,B('
75*, ([WHUQDOFORFN
7,)3 PRGH &.B36&
7,)B5LVLQJ
7, (GJH 7,)3 (75) ([WHUQDOFORFN
)LOWHU
GHWHFWRU (75) PRGH
7,)B)DOOLQJ
&.B,17 ,QWHUQDOFORFN
PRGH
,&)>@ &&3 LQWHUQDOFORFN
7,0[B&&05 7,0[B&&(5
(&( 606>@
7,0[B60&5
069
For example, to configure the upcounter to count in response to a rising edge on the TI2
input, use the following procedure:
1. Configure channel 2 to detect rising edges on the TI2 input by writing CC2S= ‘01 in the
TIMx_CCMR1 register.
2. Configure the input filter duration by writing the IC2F[3:0] bits in the TIMx_CCMR1
register (if no filter is needed, keep IC2F=0000).
Note: The capture prescaler is not used for triggering, so you don’t need to configure it.
3. Select rising edge polarity by writing CC2P=0 and CC2NP=0 in the TIMx_CCER
register.
4. Configure the timer in external clock mode 1 by writing SMS=111 in the TIMx_SMCR
register.
5. Select TI2 as the input source by writing TS=110 in the TIMx_SMCR register.
6. Enable the counter by writing CEN=1 in the TIMx_CR1 register.
When a rising edge occurs on TI2, the counter counts once and the TIF flag is set.
The delay between the rising edge on TI2 and the actual clock of the counter is due to the
resynchronization circuit on TI2 input.
7,
&17B(1
&RXQWHUUHJLVWHU
7,)
:ULWH7,)
069
RU 7,) RU
7,) RU (QFRGHU
PRGH
75*, ([WHUQDOFORFN
(75 &.B36&
PRGH
(75SLQ 'LYLGHU (753 )LOWHU (75) ([WHUQDOFORFN
GRZQFRXQWHU PRGH
&.B,17 &.B,17 ,QWHUQDOFORFN
(73 (736>@ (7)>@ LQWHUQDOFORFN PRGH
7,0[B60&5 7,0[B60&5 7,0[B60&5
(&( 606>@
7,0[B60&5
069
For example, to configure the upcounter to count each 2 rising edges on ETR, use the
following procedure:
1. As no filter is needed in this example, write ETF[3:0]=0000 in the TIMx_SMCR register.
2. Set the prescaler by writing ETPS[1:0]=01 in the TIMx_SMCR register
3. Select rising edge detection on the ETR pin by writing ETP=0 in the TIMx_SMCR
register
4. Enable external clock mode 2 by writing ECE=1 in the TIMx_SMCR register.
5. Enable the counter by writing CEN=1 in the TIMx_CR1 register.
The counter counts once each 2 ETR rising edges.
The delay between the rising edge on ETR and the actual clock of the counter is due to the
resynchronization circuit on the ETRP signal.
&.B,17
&17B(1
(75
(753
(75)
&RXQWHUUHJLVWHU
069
7,)B('
7RWKHVODYHPRGHFRQWUROOHU
7, 7,)B5LVLQJ
)LOWHU 7,) (GJH 7,)3
I'76 GRZQFRXQWHU 7,)B)DOOLQJ
GHWHFWRU
7,)3 ,& 'LYLGHU ,&36
,&)>@ &&3&&13 75&
7,0[B&&05 7,0[B&&(5 IURPVODYHPRGH
7,)B5LVLQJ FRQWUROOHU
IURPFKDQQHO
&&6>@ ,&36>@ &&(
7,)B)DOOLQJ
IURPFKDQQHO 7,0[B&&05 7,0[B&&(5
069
The output stage generates an intermediate waveform which is then used for reference:
OCxRef (active high). The polarity acts at the end of the chain.
$3%%XV
0&8SHULSKHUDOLQWHUIDFH
LIELW
6 ZULWH&&5+
KLJK
ORZ
5HDG&&5+ 6 ZULWHBLQBSURJUHVV
UHDGBLQBSURJUHVV ZULWH&&5/
5HDG&&5/ &DSWXUHFRPSDUHSUHORDGUHJLVWHU 5
5 2XWSXW &&6>@
FDSWXUHBWUDQVIHU FRPSDUHBWUDQVIHU PRGH
&&6>@
&&6>@ ,QSXW
PRGH 2&3(
&&6>@ &DSWXUHFRPSDUHVKDGRZUHJLVWHU 2&3(
8(9
7,0[B&&05
&RPSDUDWRU IURPWLPH
,&36 &DSWXUH
EDVHXQLW
&&( &17!&&5
&RXQWHU &17 &&5
&&*
7,0[B(*5
069
KZ&ͺ>Z
Ϭ
KZ&ͺ>Zͺ/Ed
dZ& ϭ
dŽƚŚĞŵĂƐƚĞƌŵŽĚĞ Ϭ
ĐŽŶƚƌŽůůĞƌ KƵƚƉƵƚ Kϭ
K^ ŶĂďůĞ
ϭ ŝƌĐƵŝƚ
d/Ddžͺ^DZ
ϭW
EdхZϭ
KƵƚƉƵƚŵŽĚĞ ŽĐϭƌĞĨ d/DdžͺZ
EdсZϭ ĐŽŶƚƌŽůůĞƌ
ϭ
KϭDϮ͗Ϭ d/DdžͺZ
d/DdžͺDZϭ Ăŝϭϳϭϴϳ
The capture/compare block is made of one preload register and one shadow register. Write
and read always access the preload register.
In capture mode, captures are actually done in the shadow register, which is copied into the
preload register.
In compare mode, the content of the preload register is copied into the shadow register
which is compared to the counter.
new level have been detected (sampled at fDTS frequency). Then write IC1F bits to
0011 in the TIMx_CCMR1 register.
• Select the edge of the active transition on the TI1 channel by writing the CC1P and
CC1NP bits to 00 in the TIMx_CCER register (rising edge in this case).
• Program the input prescaler. In our example, we wish the capture to be performed at
each valid transition, so the prescaler is disabled (write IC1PS bits to 00 in the
TIMx_CCMR1 register).
• Enable capture from the counter into the capture register by setting the CC1E bit in the
TIMx_CCER register.
• If needed, enable the related interrupt request by setting the CC1IE bit in the
TIMx_DIER register, and/or the DMA request by setting the CC1DE bit in the
TIMx_DIER register.
When an input capture occurs:
• The TIMx_CCR1 register gets the value of the counter on the active transition.
• CC1IF flag is set (interrupt flag). CC1OF is also set if at least two consecutive captures
occurred whereas the flag was not cleared.
• An interrupt is generated depending on the CC1IE bit.
• A DMA request is generated depending on the CC1DE bit.
In order to handle the overcapture, it is recommended to read the data before the
overcapture flag. This is to avoid missing an overcapture which could happen after reading
the flag and before reading the data.
Note: IC interrupt and/or DMA requests can be generated by software by setting the
corresponding CCxG bit in the TIMx_EGR register.
For example, you can measure the period (in TIMx_CCR1 register) and the duty cycle (in
TIMx_CCR2 register) of the PWM applied on TI1 using the following procedure (depending
on CK_INT frequency and prescaler value):
• Select the active input for TIMx_CCR1: write the CC1S bits to 01 in the TIMx_CCMR1
register (TI1 selected).
• Select the active polarity for TI1FP1 (used both for capture in TIMx_CCR1 and counter
clear): write the CC1P to ‘0’ and the CC1NP bit to ‘0’ (active on rising edge).
• Select the active input for TIMx_CCR2: write the CC2S bits to 10 in the TIMx_CCMR1
register (TI1 selected).
• Select the active polarity for TI1FP2 (used for capture in TIMx_CCR2): write the CC2P
bit to ‘1’ and the CC2NP bit to ’0’(active on falling edge).
• Select the valid trigger input: write the TS bits to 101 in the TIMx_SMCR register
(TI1FP1 selected).
• Configure the slave mode controller in reset mode: write the SMS bits to 100 in the
TIMx_SMCR register.
• Enable the captures: write the CC1E and CC2E bits to ‘1 in the TIMx_CCER register.
TI1
TIMx_CCR1 0004
TIMx_CCR2 0002
Anyway, the comparison between the TIMx_CCRx shadow register and the counter is still
performed and allows the flag to be set. Interrupt and DMA requests can be sent
accordingly. This is described in the Output Compare Mode section.
2&5() 2&
0DWFKGHWHFWHGRQ&&5
,QWHUUXSWJHQHUDWHGLIHQDEOHG
069
Upcounting configuration
Upcounting is active when the DIR bit in the TIMx_CR1 register is low. Refer to Upcounting
mode on page 537.
In the following example, we consider PWM mode 1. The reference PWM signal OCxREF is
high as long as TIMx_CNT <TIMx_CCRx else it becomes low. If the compare value in
TIMx_CCRx is greater than the auto-reload value (in TIMx_ARR) then OCxREF is held at ‘1.
If the compare value is 0 then OCxREF is held at ‘0. Figure 165 shows some edge-aligned
PWM waveforms in an example where TIMx_ARR=8.
&RXQWHUUHJLVWHU
2&;5()
&&5[
&&[,)
2&;5()
&&5[
&&[,)
2&;5() µ¶
&&5[!
&&[,)
2&;5() µ¶
&&5[
&&[,)
069
Downcounting configuration
Downcounting is active when DIR bit in TIMx_CR1 register is high. Refer to Downcounting
mode on page 540.
In PWM mode 1, the reference signal ocxref is low as long as TIMx_CNT>TIMx_CCRx else
it becomes high. If the compare value in TIMx_CCRx is greater than the auto-reload value in
TIMx_ARR, then ocxref is held at ‘1. 0% PWM is not possible in this mode.
&RXQWHUUHJLVWHU
2&[5()
&&5[
&&[,) &06
&06
&06
2&[5()
&&5[
&06 RU
&&[,)
µ¶
2&[5()
&&5[
&&[,) &06
&06
&06
µ¶
2&[5()
&&5[!
&&[,) &06
&06
&06
µ¶
2&[5()
&&5[
&&[,) &06
&06
&06
$,E
in the TIMx_CR1 register. Moreover, the DIR and CMS bits must not be changed at the
same time by the software.
• Writing to the counter while running in center-aligned mode is not recommended as it
can lead to unexpected results. In particular:
– The direction is not updated if you write a value in the counter that is greater than
the auto-reload value (TIMx_CNT>TIMx_ARR). For example, if the counter was
counting up, it continues to count up.
– The direction is updated if you write 0 or write the TIMx_ARR value in the counter
but no Update Event UEV is generated.
• The safest way to use center-aligned mode is to generate an update by software
(setting the UG bit in the TIMx_EGR register) just before starting the counter and not to
write the counter while it is running.
7,
2&5()
2&
7,0B$55
&RXQWHU
7,0B&&5
W'(/$< W38/6( W
069
For example you may want to generate a positive pulse on OC1 with a length of tPULSE and
after a delay of tDELAY as soon as a positive edge is detected on the TI2 input pin.
1. The external trigger prescaler should be kept off: bits ETPS[1:0] in the TIMx_SMCR
register are cleared to 00.
2. The external clock mode 2 must be disabled: bit ECE in the TIM1_SMCR register is
cleared to 0.
3. The external trigger polarity (ETP) and the external trigger filter (ETF) can be
configured according to the application’s needs.
Figure 168 shows the behavior of the OCxREF signal when the ETRF input becomes high,
for both values of the OCxCE enable bit. In this example, the timer TIMx is programmed in
PWM mode.
&&5[
&RXQWHU &17
(75)
1. In case of a PWM with a 100% duty cycle (if CCRx>ARR), OCxREF is enabled again at the next counter
overflow.
In this mode, the counter is modified automatically following the speed and the direction of
the incremental encoder and its content, therefore, always represents the encoder’s
position. The count direction correspond to the rotation direction of the connected sensor.
The table summarizes the possible combinations, assuming TI1 and TI2 don’t switch at the
same time.
An external incremental encoder can be connected directly to the MCU without external
interface logic. However, comparators are normally be used to convert the encoder’s
differential outputs to digital signals. This greatly increases noise immunity. The third
encoder output which indicate the mechanical zero position, may be connected to an
external interrupt input and trigger a counter reset.
Figure 169 gives an example of counter operation, showing count signal generation and
direction control. It also shows how input jitter is compensated where both edges are
selected. This might occur if the sensor is positioned near to one of the switching points. For
this example we assume that the configuration is the following:
• CC1S= ‘01’ (TIMx_CCMR1 register, TI1FP1 mapped on TI1)
• CC2S= ‘01’ (TIMx_CCMR2 register, TI2FP2 mapped on TI2)
• CC1P= ‘0’, CC1NP = ‘0’, IC1F =’0000’ (TIMx_CCER register, TI1FP1 noninverted,
TI1FP1=TI1)
• CC2P= ‘0’, CC2NP = ‘0’, IC2F =’0000’ (TIMx_CCER register, TI2FP2 noninverted,
TI2FP2=TI2)
• SMS= ‘011’ (TIMx_SMCR register, both inputs are active on both rising and falling
edges)
• CEN = 1 (TIMx_CR1 register, Counter is enabled)
7,
7,
&RXQWHU
XS GRZQ XS
069
Figure 170 gives an example of counter behavior when TI1FP1 polarity is inverted (same
configuration as above except CC1P=1).
Figure 170. Example of encoder interface mode with TI1FP1 polarity inverted
IRUZDUG MLWWHU EDFNZDUG MLWWHU IRUZDUG
7,
7,
&RXQWHU
GRZQ XS GRZQ
069
The timer, when configured in Encoder Interface mode provides information on the sensor’s
current position. You can obtain dynamic information (speed, acceleration, deceleration) by
measuring the period between two encoder events using a second timer configured in
capture mode. The output of the encoder which indicates the mechanical zero can be used
for this purpose. Depending on the time between two events, the counter can also be read
at regular times. You can do this by latching the counter value into a third input capture
register if available (then the capture signal must be periodic and can be generated by
another timer). when available, it is also possible to read its value through a DMA request
generated by a Real-Time clock.
8*
7,)
069
7,
&17B(1
7,)
:ULWH7,)
069
1. The configuration “CCxP=CCxNP=1” (detection of both rising and falling edges) does not have any effect
in gated mode because gated mode acts on a level and not on an edge.
The delay between the rising edge on TI2 and the actual start of the counter is due to the
resynchronization circuit on TI2 input.
&17B(1
7,)
069
7,
&(1&17B(1
(75
&RXQWHUUHJLVWHU
7,)
069
8(9
0DVWHU 6ODYH
75*2 ,75 &.B36&
PRGH PRGH
3UHVFDOHU &RXQWHU FRQWURO FRQWURO 3UHVFDOHU &RXQWHU
,QSXWWULJJHU
VHOHFWLRQ
069
For example, you can configure Timer 1 to act as a prescaler for Timer 2. Refer to
Figure 175. To do this:
• Configure Timer 1 in master mode so that it outputs a periodic trigger signal on each
update event UEV. If you write MMS=010 in the TIM1_CR2 register, a rising edge is
output on TRGO1 each time an update event is generated.
• To connect the TRGO1 output of Timer 1 to Timer 2, Timer 2 must be configured in
slave mode using ITR0 as internal trigger. You select this through the TS bits in the
TIM2_SMCR register (writing TS=000).
• Then you put the slave mode controller in external clock mode 1 (write SMS=111 in the
TIM2_SMCR register). This causes Timer 2 to be clocked by the rising edge of the
periodic Timer 1 trigger signal (which correspond to the timer 1 counter overflow).
• Finally both timers must be enabled by setting their respective CEN bits (TIMx_CR1
register).
Note: If OCx is selected on Timer 1 as trigger output (MMS=1xx), its rising edge is used to clock
the counter of timer 2.
&.B,17
7,0(52&5()
7,0(5&17 )& )' )( ))
7,0(57,)
:ULWH7,)
069
In the example in Figure 176, the Timer 2 counter and prescaler are not initialized before
being started. So they start counting from their current value. It is possible to start from a
given value by resetting both timers before starting Timer 1. You can then write any value
you want in the timer counters. The timers can easily be reset by software using the UG bit
in the TIMx_EGR registers.
In the next example, we synchronize Timer 1 and Timer 2. Timer 1 is the master and starts
from 0. Timer 2 is the slave and starts from 0xE7. The prescaler ratio is the same for both
timers. Timer 2 stops when Timer 1 is disabled by writing ‘0 to the CEN bit in the TIM1_CR1
register:
• Configure Timer 1 master mode to send its Output Compare 1 Reference (OC1REF)
signal as trigger output (MMS=100 in the TIM1_CR2 register).
• Configure the Timer 1 OC1REF waveform (TIM1_CCMR1 register).
• Configure Timer 2 to get the input trigger from Timer 1 (TS=000 in the TIM2_SMCR
register).
• Configure Timer 2 in gated mode (SMS=101 in TIM2_SMCR register).
• Reset Timer 1 by writing ‘1 in UG bit (TIM1_EGR register).
• Reset Timer 2 by writing ‘1 in UG bit (TIM2_EGR register).
• Initialize Timer 2 to 0xE7 by writing ‘0xE7’ in the timer 2 counter (TIM2_CNTL).
• Enable Timer 2 by writing ‘1 in the CEN bit (TIM2_CR1 register).
• Start Timer 1 by writing ‘1 in the CEN bit (TIM1_CR1 register).
• Stop Timer 1 by writing ‘0 in the CEN bit (TIM1_CR1 register).
&.B,17
7,0(5&(1 &17B(1
7,0(5&17B,1,7
7,0(5&17
7,0(5&17 $% ( ( (
7,0(5&17B,1,7
7,0(5ZULWH&17
7,0(57,)
:ULWH7,)
069
counts until we write ‘0 to the CEN bit in the TIM2_CR1 register. Both counter clock
frequencies are divided by 3 by the prescaler compared to CK_INT (fCK_CNT = fCK_INT/3).
• Configure Timer 1 master mode to send its Update Event (UEV) as trigger output
(MMS=010 in the TIM1_CR2 register).
• Configure the Timer 1 period (TIM1_ARR registers).
• Configure Timer 2 to get the input trigger from Timer 1 (TS=000 in the TIM2_SMCR
register).
• Configure Timer 2 in trigger mode (SMS=110 in TIM2_SMCR register).
• Start Timer 1 by writing ‘1 in the CEN bit (TIM1_CR1 register).
&.B,17
7,0(58(9
7,0(5&17 )' )( ))
7,0(5&17
7,0(5&(1 &17B(1
7,0(57,)
:ULWH7,)
069
As in the previous example, you can initialize both counters before starting counting.
Figure 179 shows the behavior with the same configuration as in Figure 176, but in trigger
mode instead of gated mode (SMS=110 in the TIM2_SMCR register).
&.B,17
7,0(5&(1 &17B(1
7,0(5&17B,1,7
7,0(5&17
7,0(5&17 &' ( ( ( ($
7,0(5&17B,1,7
7,0(5ZULWH&17
7,0(57,)
:ULWH7,)
069
counters are aligned, Timer 1 must be configured in Master/Slave mode (slave with respect
to TI1, master with respect to Timer 2):
• Configure Timer 1 master mode to send its Enable as trigger output (MMS=001 in the
TIM1_CR2 register).
• Configure Timer 1 slave mode to get the input trigger from TI1 (TS=100 in the
TIM1_SMCR register).
• Configure Timer 1 in trigger mode (SMS=110 in the TIM1_SMCR register).
• Configure the Timer 1 in Master/Slave mode by writing MSM=1 (TIM1_SMCR register).
• Configure Timer 2 to get the input trigger from Timer 1 (TS=000 in the TIM2_SMCR
register).
• Configure Timer 2 in trigger mode (SMS=110 in the TIM2_SMCR register).
When a rising edge occurs on TI1 (Timer 1), both counters starts counting synchronously on
the internal clock and both TIF flags are set.
Note: In this example both timers are initialized before starting (by setting their respective UG
bits). Both counters starts from 0, but you can easily insert an offset between them by
writing any of the counter registers (TIMx_CNT). You can see that the master/slave mode
insert a delay between CNT_EN and CK_PSC on timer 1.
&.B,17
7,0(57,
7,0(5&(1 &17B(1
7,0(5&.B36&
7,0(5&17
7,0(57,)
7,0(5&(1 &17B(1
7,0(5&.B36&
7,0(5&17
7,0(57,)
069
Note: The state of the external IO pins connected to the standard OCx channels depends on the
OCx channel state and the GPIO registers.
Bits 31:16 CCR1[31:16]: High Capture/Compare 1 value (on TIM2 and TIM5).
Bits 15:0 CCR1[15:0]: Low Capture/Compare 1 value
If channel CC1 is configured as output:
CCR1 is the value to be loaded in the actual capture/compare 1 register (preload value).
It is loaded permanently if the preload feature is not selected in the TIMx_CCMR1 register
(bit OC1PE). Else the preload value is copied in the active capture/compare 1 register when
an update event occurs.
The active capture/compare register contains the value to be compared to the counter
TIMx_CNT and signaled on OC1 output.
Bits 31:16 CCR2[31:16]: High Capture/Compare 2 value (on TIM2 and TIM5).
Bits 15:0 CCR2[15:0]: Low Capture/Compare 2 value
If channel CC2 is configured as output:
CCR2 is the value to be loaded in the actual capture/compare 2 register (preload value).
It is loaded permanently if the preload feature is not selected in the TIMx_CCMR register (bit
OC2PE). Else the preload value is copied in the active capture/compare 2 register when an
update event occurs.
The active capture/compare register contains the value to be compared to the counter
TIMx_CNT and signalled on OC2 output.
If channel CC2 is configured as input:
CCR2 is the counter value transferred by the last input capture 2 event (IC2).
Bits 31:16 CCR3[31:16]: High Capture/Compare 3 value (on TIM2 and TIM5).
Bits 15:0 CCR3[15:0]: Low Capture/Compare value
If channel CC3 is configured as output:
CCR3 is the value to be loaded in the actual capture/compare 3 register (preload value).
It is loaded permanently if the preload feature is not selected in the TIMx_CCMR register (bit
OC3PE). Else the preload value is copied in the active capture/compare 3 register when an
update event occurs.
The active capture/compare register contains the value to be compared to the counter
TIMx_CNT and signaled on OC3 output.
If channel CC3 is configured as input:
CCR3 is the counter value transferred by the last input capture 3 event (IC3).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. ITR1_RMP Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. TI4_RMP Res. Res. Res. Res. Res. Res.
rw rw
0x1C
0x0C
Offset
RM0430
18.4.21
mode
mode
mode
mode
TIMx_SR
TIMx_CR2
TIMx_CR1
TIMx_CNT
TIMx_EGR
Register
TIMx_DIER
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
TIMx_CCER
TIMx_SMCR
Input Capture
Input Capture
TIMx_CCMR2
TIMx_CCMR2
TIMx_CCMR1
TIMx_CCMR1
Output Compare
Output Compare
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 31
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 30
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 29
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 28
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 27
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 26
TIMx register map
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 25
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 24
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 23
CNT[31:16]
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 22
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 21
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 20
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 19
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 18
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 17
RM0430 Rev 8
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 16
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[2:0]
[2:0]
IC4F[3:0]
IC2F[3:0]
OC4M
OC2M
[1:0]
0
0
0
0
0
0
0
0
0
ETPS
0
0
0
0
0
0
0
0
0
IC4
IC2
[1:0]
[1:0]
PSC
PSC
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[1:0]
[1:0]
[1:0]
[1:0]
[1:0]
CKD
0
0
0
0
0
0
0
0
0
CC4S
CC4S
CC2S
CC2S
CC3E Res. Res. UDE Res. 8
0
0
0
0
0
0
0
0
0
CNT[15:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[2:0]
[2:0]
IC3F[3:0]
IC1F[3:0]
OC3M
OC1M
TS[2:0]
0
0
0
0
0
0
0
0
0
0
0
0
MMS[2:0]
0
0
0
0
0
0
0
0
0
0
0
IC3
IC1
[1:0]
[1:0]
PSC
PSC
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[1:0]
[1:0]
[1:0]
[1:0]
0
0
0
0
0
0
0
0
0
0
0
SMS[2:0]
CC3S
CC3S
CC1S
CC1S
593/1324
General-purpose timers (TIM2 to TIM5)
594
General-purpose timers (TIM2 to TIM5) RM0430
Table 108. TIM2 to TIM5 register map and reset values (continued)
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_PSC PSC[15:0]
0x28
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ARR[31:16]
TIMx_ARR ARR[15:0]
0x2C (TIM2 and TIM5 only, reserved on the other timers)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x30 Reserved
CCR1[31:16]
TIMx_CCR1 CCR1[15:0]
0x34 (TIM2 and TIM5 only, reserved on the other timers)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
CCR2[31:16]
TIMx_CCR2 CCR2[15:0]
0x38 (TIM2 and TIM5 only, reserved on the other timers)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
CCR3[31:16]
TIMx_CCR3 CCR3[15:0]
0x3C (TIM2 and TIM5 only, reserved on the other timers)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
CCR4[31:16]
TIMx_CCR4 CCR4[15:0]
0x40 (TIM2 and TIM5 only, reserved on the other timers)
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x44 Reserved
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_DCR DBL[4:0] DBA[4:0]
0x48
Reset value 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_DMAR DMAB[15:0]
0x4C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ITR1_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIM2_OR
RMP
0x50
Reset value 0 0
IT4_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIM5_OR
0x50 RMP
Reset value 0 0
Refer to Section 2.2.2: Memory map and register boundary addresses for the register
boundary addresses.
ITR0
Trigger
ITR1 TGI controller
ITR
ITR2 TRC TRGI
ITR3 Slave
Reset, Enable, Count
mode
TI1F_ED controller
TI1FP1
TI2FP2
U Auto-reload register UI
Stop, Clear
U
CK_PSC PSC CK_CNT CNT
+/-
Prescaler COUNTER
CC1I CC1I
TI1 TI1FP1
Input filter &
IC1 IC1PS U OC1REF output OC1
TIMx_CH1 TI1FP2 Prescaler Capture/Compare 1 register TIMx_CH1
Edge detector control
TRC
CC2I
CC2I
TI2FP1 IC2 IC2PS U
TI2 Input filter & OC2REF output OC2
TIMx_CH2
TIMx_CH2 TI2FP2 Prescaler Capture/Compare 2 register
Edge detector control
TRC
Notes:
Reg Preload registers transferred
to active registers on U event
according to control bit
event
interrupt
ai17190
5 !UTORELOAD REGISTER 5)
3TOP #LEAR
5
#+?03# 03# #+?#.4 #.4
PRESCALER COUNTER
##) ##)
4) 4)&0 )# 5
)NPUT FILTER )#03 /#2%& OUTPUT /#
4)-X?#( 0RESCALER #APTURE#OMPARE REGISTER 4)-X?#(
EDGE DETECTOR CONTROL
.OTES
EVENT
AIC
Prescaler description
The prescaler can divide the counter clock frequency by any factor between 1 and 65536. It
is based on a 16-bit counter controlled through a 16-bit register (in the TIMx_PSC register).
It can be changed on the fly as this control register is buffered. The new prescaler ratio is
taken into account at the next update event.
Figure 183 and Figure 184 give some examples of the counter behavior when the prescaler
ratio is changed on the fly.
Figure 183. Counter timing diagram with prescaler division change from 1 to 2
&.B36&
&(1
7LPHUFORFN
&.B&17
&RXQWHUUHJLVWHU ) ) ) )$ )% )&
8SGDWHHYHQW 8(9
3UHVFDOHUFRQWUROUHJLVWHU
:ULWHDQHZYDOXHLQ7,0[B36&
3UHVFDOHUEXIIHU
3UHVFDOHUFRXQWHU
069
Figure 184. Counter timing diagram with prescaler division change from 1 to 4
&.B36&
&(1
7LPHUFORFN
&.B&17
) ) ) )$ )% )&
&RXQWHUUHJLVWHU
8SGDWHHYHQW 8(9
3UHVFDOHUFRQWUROUHJLVWHU
:ULWHDQHZYDOXHLQ7,0[B36&
3UHVFDOHUEXIIHU
3UHVFDOHUFRXQWHU
069
<ͺW^
EdͺE
dŝŵĞƌĐůŽĐŬс<ͺEd
ŽƵŶƚĞƌƌĞŐŝƐƚĞƌ ϯϭ ϯϮ ϯϯ ϯϰ ϯϱ ϯϲ ϬϬ Ϭϭ ϬϮ Ϭϯ Ϭϰ Ϭϱ Ϭϲ Ϭϳ
ŽƵŶƚĞƌŽǀĞƌĨůŽǁ
hƉĚĂƚĞĞǀĞŶƚ;hsͿ
hƉĚĂƚĞŝŶƚĞƌƌƵƉƚĨůĂŐ;h/&Ϳ
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
&.B36&
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ 8,)
069
<ͺW^
E
dŝŵĞƌĐůŽĐŬс<ͺEd
ŽƵŶƚĞƌƌĞŐŝƐƚĞƌ ϯϭ ϯϮ ϯϯ ϯϰ ϯϱ ϯϲ ϬϬ Ϭϭ ϬϮ Ϭϯ Ϭϰ Ϭϱ Ϭϲ Ϭϳ
ŽƵŶƚĞƌŽǀĞƌĨůŽǁ
hƉĚĂƚĞĞǀĞŶƚ;hsͿ
hƉĚĂƚĞŝŶƚĞƌƌƵƉƚĨůĂŐ;h/&Ϳ
ƵƚŽͲƌĞůŽĂĚƉƌĞůŽĂĚƌĞŐŝƐƚĞƌ && ϯϲ
tƌŝƚĞĂŶĞǁǀĂůƵĞŝŶd/DdžͺZZ
069
&.B36&
&(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU ) ) ) ) ) )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
$XWRUHORDGSUHORDG
)
UHJLVWHU
$XWRUHORDGVKDGRZ
UHJLVWHU )
:ULWHDQHZYDOXHLQ7,0[B$55 069
,QWHUQDOFORFN
&(1 &17B(1
8*
&17B,1,7
&RXQWHUUHJLVWHU
069
RU 7,) RU
7,) RU
,75[
[[
7,B('
75*, ([WHUQDOFORFN &.B36&
7,)3 PRGH
7,)B5LVLQJ
7, (GJH 7,)3
)LOWHU
GHWHFWRU
7,)B)DOOLQJ
&.B,17 ,QWHUQDOFORFN
PRGH
,&)>@ &&3 LQWHUQDOFORFN
7,0[B&&05 7,0[B&&(5
606>@
7,0[B60&5
069
For example, to configure the upcounter to count in response to a rising edge on the TI2
input, use the following procedure:
1. Configure channel 2 to detect rising edges on the TI2 input by writing CC2S = ‘01’ in
the TIMx_CCMR1 register.
2. Configure the input filter duration by writing the IC2F[3:0] bits in the TIMx_CCMR1
register (if no filter is needed, keep IC2F=’0000’).
3. Select the rising edge polarity by writing CC2P=’0’ and CC2NP=’0’ in the TIMx_CCER
register.
4. Configure the timer in external clock mode 1 by writing SMS=’111’ in the TIMx_SMCR
register.
5. Select TI2 as the trigger input source by writing TS=’110’ in the TIMx_SMCR register.
6. Enable the counter by writing CEN=’1’ in the TIMx_CR1 register.
Note: The capture prescaler is not used for triggering, so you don’t need to configure it.
When a rising edge occurs on TI2, the counter counts once and the TIF flag is set.
The delay between the rising edge on TI2 and the actual clock of the counter is due to the
resynchronization circuit on TI2 input.
7,
&17B(1
&RXQWHUUHJLVWHU
7,)
:ULWH7,)
069
7, 7,)B5LVLQJ
)LOWHU 7,) (GJH 7,)3
I'76 GRZQFRXQWHU 7,)B)DOOLQJ
GHWHFWRU
7,)3 ,& 'LYLGHU ,&36
,&)>@ &&3&&13 75&
7,0[B&&05 7,0[B&&(5 IURPVODYHPRGH
7,)B5LVLQJ FRQWUROOHU
IURPFKDQQHO
&&6>@ ,&36>@ &&(
7,)B)DOOLQJ
IURPFKDQQHO 7,0[B&&05 7,0[B&&(5
069
The output stage generates an intermediate waveform which is then used for reference:
OCxRef (active high). The polarity acts at the end of the chain.
$3%%XV
0&8SHULSKHUDOLQWHUIDFH
LIELW
6 ZULWH&&5+
KLJK
ORZ
5HDG&&5+ 6 ZULWHBLQBSURJUHVV
UHDGBLQBSURJUHVV ZULWH&&5/
5HDG&&5/ &DSWXUHFRPSDUHSUHORDGUHJLVWHU 5
5 2XWSXW &&6>@
FDSWXUHBWUDQVIHU FRPSDUHBWUDQVIHU PRGH
&&6>@
&&6>@ ,QSXW
PRGH 2&3(
&&6>@ &DSWXUHFRPSDUHVKDGRZUHJLVWHU 2&3(
8(9
7,0B&&05
&RPSDUDWRU IURPWLPH
,&36 &DSWXUH
EDVHXQLW
&&( &17!&&5
&RXQWHU &17 &&5
&&*
7,0B(*5
069
7RWKHPDVWHU
PRGHFRQWUROOHU
&17!&&5
2XWSXW 2XWSXW
2&B5() 2&
&17 &&5 PRGH HQDEOH
FRQWUROOHU FLUFXLW
&&3
7,0[B&&05
DL
The capture/compare block is made of one preload register and one shadow register. Write
and read always access the preload register.
In capture mode, captures are actually done in the shadow register, which is copied into the
preload register.
In compare mode, the content of the preload register is copied into the shadow register
which is compared to the counter.
cleared by software by writing it to ‘0’ or by reading the captured data stored in the
TIMx_CCRx register. CCxOF is cleared when you write it to ‘0’.
The following example shows how to capture the counter value in TIMx_CCR1 when TI1
input rises. To do this, use the following procedure:
1. Select the active input: TIMx_CCR1 must be linked to the TI1 input, so write the CC1S
bits to ‘01’ in the TIMx_CCMR1 register. As soon as CC1S becomes different from ‘00’,
the channel is configured in input mode and the TIMx_CCR1 register becomes read-
only.
2. Program the input filter duration you need with respect to the signal you connect to the
timer (by programming the ICxF bits in the TIMx_CCMRx register if the input is one of
the TIx inputs). Let’s imagine that, when toggling, the input signal is not stable during at
must 5 internal clock cycles. We must program a filter duration longer than these 5
clock cycles. We can validate a transition on TI1 when 8 consecutive samples with the
new level have been detected (sampled at fDTS frequency). Then write IC1F bits to
‘0011’ in the TIMx_CCMR1 register.
3. Select the edge of the active transition on the TI1 channel by programming CC1P and
CC1NP bits to ‘00’ in the TIMx_CCER register (rising edge in this case).
4. Program the input prescaler. In our example, we wish the capture to be performed at
each valid transition, so the prescaler is disabled (write IC1PS bits to ‘00’ in the
TIMx_CCMR1 register).
5. Enable capture from the counter into the capture register by setting the CC1E bit in the
TIMx_CCER register.
6. If needed, enable the related interrupt request by setting the CC1IE bit in the
TIMx_DIER register.
When an input capture occurs:
• The TIMx_CCR1 register gets the value of the counter on the active transition.
• CC1IF flag is set (interrupt flag). CC1OF is also set if at least two consecutive captures
occurred whereas the flag was not cleared.
• An interrupt is generated depending on the CC1IE bit.
In order to handle the overcapture, it is recommended to read the data before the
overcapture flag. This is to avoid missing an overcapture which could happen after reading
the flag and before reading the data.
Note: IC interrupt requests can be generated by software by setting the corresponding CCxG bit in
the TIMx_EGR register.
1. Select the active input for TIMx_CCR1: write the CC1S bits to ‘01’ in the TIMx_CCMR1
register (TI1 selected).
2. Select the active polarity for TI1FP1 (used both for capture in TIMx_CCR1 and counter
clear): program the CC1P and CC1NP bits to ‘00’ (active on rising edge).
3. Select the active input for TIMx_CCR2: write the CC2S bits to ‘10’ in the TIMx_CCMR1
register (TI1 selected).
4. Select the active polarity for TI1FP2 (used for capture in TIMx_CCR2): program the
CC2P and CC2NP bits to ‘11’ (active on falling edge).
5. Select the valid trigger input: write the TS bits to ‘101’ in the TIMx_SMCR register
(TI1FP1 selected).
6. Configure the slave mode controller in reset mode: write the SMS bits to ‘100’ in the
TIMx_SMCR register.
7. Enable the captures: write the CC1E and CC2E bits to ‘1’ in the TIMx_CCER register.
TI1
TIMx_CCR1 0004
TIMx_CCR2 0002
1. The PWM input mode can be used only with the TIMx_CH1/TIMx_CH2 signals due to the fact that only
TI1FP1 and TI2FP2 are connected to the slave mode controller.
2&5() 2&
0DWFKGHWHFWHGRQ&&5
,QWHUUXSWJHQHUDWHGLIHQDEOHG
069
&RXQWHUUHJLVWHU
2&;5()
&&5[
&&[,)
2&;5()
&&5[
&&[,)
2&;5() µ¶
&&5[!
&&[,)
2&;5() µ¶
&&5[
&&[,)
069
7,
2&5()
2&
7,0B$55
&RXQWHU
7,0B&&5
W'(/$< W38/6( W
069
For example you may want to generate a positive pulse on OC1 with a length of tPULSE and
after a delay of tDELAY as soon as a positive edge is detected on the TI2 input pin.
Use TI2FP2 as trigger 1:
1. Map TI2FP2 to TI2 by writing CC2S=’01’ in the TIMx_CCMR1 register.
2. TI2FP2 must detect a rising edge, write CC2P=’0’ and CC2NP = ‘0’ in the TIMx_CCER
register.
3. Configure TI2FP2 as trigger for the slave mode controller (TRGI) by writing TS=’110’ in
the TIMx_SMCR register.
4. TI2FP2 is used to start the counter by writing SMS to ‘110’ in the TIMx_SMCR register
(trigger mode).
The OPM waveform is defined by writing the compare registers (taking into account the
clock frequency and the counter prescaler).
• The tDELAY is defined by the value written in the TIMx_CCR1 register.
• The tPULSE is defined by the difference between the auto-reload value and the compare
value (TIMx_ARR - TIMx_CCR1).
• Let’s say you want to build a waveform with a transition from ‘0’ to ‘1’ when a compare
match occurs and a transition from ‘1’ to ‘0’ when the counter reaches the auto-reload
value. To do this you enable PWM mode 2 by writing OC1M=’111’ in the TIMx_CCMR1
register. You can optionally enable the preload registers by writing OC1PE=’1’ in the
TIMx_CCMR1 register and ARPE in the TIMx_CR1 register. In this case you have to
write the compare value in the TIMx_CCR1 register, the auto-reload value in the
TIMx_ARR register, generate an update by setting the UG bit and wait for external
trigger event on TI2. CC1P is written to ‘0’ in this example.
You only want 1 pulse (Single mode), so you write '1 in the OPM bit in the TIMx_CR1
register to stop the counter at the next update event (when the counter rolls over from the
auto-reload value back to 0). When OPM bit in the TIMx_CR1 register is set to '0', so the
Repetitive Mode is selected.
7,
8*
&RXQWHUUHJLVWHU
7,)
069
7,
FQWBHQ
&RXQWHUUHJLVWHU
7,)
:ULWH7,)
069
7,
FQWBHQ
&RXQWHUUHJLVWHU
7,)
069
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. MSM TS[2:0] Res. SMS[2:0]
rw rw rw rw rw rw rw
Note: The states of the external I/O pins connected to the standard OCx channels depend on the
state of the OCx channel and on the GPIO registers.
0x2C
0x1C
0x0C
Offset
RM0430
19.4.13
mode
mode
TIMx_SR
Reserved
Reserved
TIMx_CR1
TIMx_PSC
TIMx_CNT
TIMx_ARR
TIMx_EGR
Register
TIMx_DIER
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
TIMx_CCER
TIMx_SMCR
Input Capture
TIMx_CCMR1
TIMx_CCMR1
Output Compare
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 31
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 30
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 29
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 28
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 27
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 26
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 25
TIM9/12 register map
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 24
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 23
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 22
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 21
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 20
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 19
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 18
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 17
RM0430 Rev 8
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 16
0
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. 15
0
0
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. 14
0
0
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. 13
[2:0]
IC2F[3:0]
OC2M
0
0
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. 12
0
0
0
0
0
Res. Res. Res. OC2PE Res. Res. Res. Res. Res. 11
IC2
[1:0]
PSC
0
0
0
0
0
0
0
0
0
0
0
0
0
[1:0]
[1:0]
[1:0]
CKD
0
0
0
0
0
0
CC2S
CC2S
0
0
0
0
0
0
0
0
PSC[15:0]
CNT[15:0]
ARR[15:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Res. CC2P Res. Res. Res. Res. Res. 5
[2:0]
IC1F[3:0]
OC1M
TS[2:0]
0
0
0
0
0
0
Res. CC2E Res. Res. Res. Res. Res. 4
TIM9/12 registers are mapped as 16-bit addressable registers as described below:
0
0
0
0
0
0
0
[1:0]
PSC
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[1:0]
[1:0]
CC1
CC1
0
0
0
0
0
0
0
0
0
0
0
SMS[2:0]
629/1324
General-purpose timers (TIM9 to TIM14)
641
General-purpose timers (TIM9 to TIM14) RM0430
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_CCR1 CCR1[15:0]
0x34
Reset value Res. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_CCR2 CCR2[15:0]
0x38
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x3C to
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Reserved
0x4C
Note: The state of the external I/O pins connected to the standard OCx channels depends on the
OCx channel state and the GPIO registers.
0x2C
0x1C
0x0C
Offset
640/1324
19.5.12
mode
mode
TIMx_SR
Reserved
Reserved
TIMx_CR1
TIMx_PSC
TIMx_CNT
TIMx_EGR
TIMx_ARR
Register
TIMx_DIER
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
TIMx_CCER
TIMx_SMCR
Input capture
TIMx_CCMR1
TIMx_CCMR1
Output compare
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 31
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 30
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 29
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 28
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 27
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 26
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 25
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 24
General-purpose timers (TIM9 to TIM14)
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 23
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 22
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 21
TIM10/11/13/14 register map
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 20
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 19
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 18
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 17
RM0430 Rev 8
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 16
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 15
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 14
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 13
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 12
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 11
0
0
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 10
0
0
0
0
0
0
0
0
0
Table 113. TIM10/11/13/14 register map and reset values
0
0
0
0
0
PSC[15:0]
CNT[15:0]
ARR[15:0]
0
0
0
0
0
0
0
0
0
0
IC1F[3:0]
OC1M
0
0
0
0
0
0
0
0
0
0
0
[1:0]
PSC
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
CC1S
CC1S
TIMx registers are mapped as 16-bit addressable registers as described in the table below:
0x4C
0x38 to
Offset
RM0430
Reserved
TIMx_OR
Register
Reset value
Reset value
TIMx_CCR1
RM0430 Rev 8
Res. Res. Res. 16
0
Res. Res. 15
0
Res. Res. 14
0
Res. Res. 13
0
Res. Res. 12
0
Res. Res. 11
0
Res. Res. 10
0
Res. Res. 9
0
Res. Res. 8
Refer to Section 2.2.2 on page 58 for the register boundary addresses.
0
Res. Res. 7
0
CCR1[15:0]
Res. Res. 6
Table 113. TIM10/11/13/14 register map and reset values (continued)
Res. Res. 5
0
Res. Res. 4
0
Res. Res. 3
0
Res. Res. 2
0
Res. 1
TI1_RMP
0
Res. 0
641/1324
General-purpose timers (TIM9 to TIM14)
641
Basic timers (TIM6/7) RM0430
20.1 Introduction
The basic timers TIM6, TIM7 consist of a 16-bit auto-reload counter driven by a
programmable prescaler.
7ULJJHU 75*2
,QWHUQDOFORFN &.B,17 &RQWUROOHU
7,0[&/.IURP5&&
&RQWURO 5HVHWHQDEOH&RXQW
$XWRUHORDGUHJLVWHU
8 8,
6WRSFOHDURUXS
8
&.B36& 36& &.B&17
SUHVFDOHU &17FRXQWHU
1RWHV
3UHORDGUHJLVWHUVWUDQVIHUUHG
5HJ
WRDFWLYHUHJLVWHUVRQ8HYHQW
DFFRUGLQJWRFRQWUROELW
(YHQW
,QWHUUXSW '0$RXWSXW
06Y9
Prescaler description
The prescaler can divide the counter clock frequency by any factor between 1 and 65536. It
is based on a 16-bit counter controlled through a 16-bit register (in the TIMx_PSC register).
It can be changed on the fly as the TIMx_PSC control register is buffered. The new
prescaler ratio is taken into account at the next update event.
Figure 205 and Figure 206 give some examples of the counter behavior when the prescaler
ratio is changed on the fly.
Figure 205. Counter timing diagram with prescaler division change from 1 to 2
&.B36&
&(1
7LPHUFORFN
&.B&17
&RXQWHUUHJLVWHU ) ) ) )$ )% )&
8SGDWHHYHQW 8(9
3UHVFDOHUFRQWUROUHJLVWHU
:ULWHDQHZYDOXHLQ7,0[B36&
3UHVFDOHUEXIIHU
3UHVFDOHUFRXQWHU
069
Figure 206. Counter timing diagram with prescaler division change from 1 to 4
&.B36&
&(1
7LPHUFORFN
&.B&17
) ) ) )$ )% )&
&RXQWHUUHJLVWHU
8SGDWHHYHQW 8(9
3UHVFDOHUFRQWUROUHJLVWHU
:ULWHDQHZYDOXHLQ7,0[B36&
3UHVFDOHUEXIIHU
3UHVFDOHUFRXQWHU
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
069
&.B36&
&17B(1
7LPHUFORFN &.B&17
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
069
&.B36&
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
069
Figure 211. Counter timing diagram, update event when ARPE = 0 (TIMx_ARR not
preloaded)
&.B36&
&(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
$XWRUHORDGSUHORDG
UHJLVWHU ))
:ULWHDQHZYDOXHLQ7,0[B$55
069
Figure 212. Counter timing diagram, update event when ARPE=1 (TIMx_ARR
preloaded)
&.B36&
&(1
7LPHUFORFN &.B&17
&RXQWHUUHJLVWHU ) ) ) ) ) )
&RXQWHURYHUIORZ
8SGDWHHYHQW 8(9
8SGDWHLQWHUUXSWIODJ
8,)
$XWRUHORDGSUHORDG
)
UHJLVWHU
$XWRUHORDGVKDGRZ
UHJLVWHU )
:ULWHDQHZYDOXHLQ7,0[B$55 069
,QWHUQDOFORFN
&(1 &17B(1
8*
&17B,1,7
&RXQWHUUHJLVWHU
069
rw rw rw
rw rw
rc_w0
Offset Register
15
14
13
12
10
11
0
ARPE
UDIS
OPM
CEN
URS
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_CR1
0x00
Reset value 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TIMx_CR2 MMS[2:0]
0x04
Reset value 0 0 0
0x08 Res.
UDE
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
UIE
TIMx_DIER
0x0C
Reset value 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
UIF
TIMx_SR
0x10
Reset value 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
UG
TIMx_EGR
0x14
Reset value 0
0x18 Res.
0x1C Res.
0x20 Res.
TIMx_CNT CNT[15:0]
0x24
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
TIMx_PSC PSC[15:0]
0x28
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
TIMx_ARR ARR[15:0]
0x2C
Reset value 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
21.1 Introduction
The LPTIM is a 16-bit timer that benefits from the ultimate developments in power
consumption reduction. Thanks to its diversity of clock sources, the LPTIM is able to keep
running in all power modes except for Standby mode. Given its capability to run even with
no internal clock source, the LPTIM can be used as a “Pulse Counter” which can be useful
in some applications. Also, the LPTIM capability to wake up the system from low-power
modes, makes it suitable to realize “Timeout functions” with extremely low power
consumption.
The LPTIM introduces a flexible clock scheme that provides the needed functionalities and
performance, while minimizing the power consumption.
Encoder mode X
1. X = supported.
/37,0
$3%B,7)
.HUQHO
8SGRZQ
*OLWFK ,QSXW
(QFRGHU $) SDGLQSXW
ILOWHU
7,0'$&WULJJHU
*OLWFK ,QSXW 3%SDG
ILOWHU 3$SDG
XSWRH[W $) SDGLQSXW
WULJJHU
*OLWFK VZ
ILOWHU WULJJHU
ELW$55 /37,0B25
5&&
0X[WULJJHU
2XW
&2817 ELWFRXQWHU
$3%FORFN
/6( &/.08;
02'(
3UHVFDOHU
/6,
+6,
ELWFRPSDUH
06Y9
lptim_ext_trig6 Reserved
lptim_ext_trig7 Reserved
&/.08;
,QSXW
)LOWHURXW
Note: In case no internal clock signal is provided, the digital filter must be deactivated by setting
the CKFLT and TRGFLT bits to ‘0’. In that case, an external analog filter may be used to
protect the LPTIM external inputs against glitches.
21.4.6 Prescaler
The LPTIM 16-bit counter is preceded by a configurable power-of-2 prescaler. The prescaler
division ratio is controlled by the PRESC[2:0] 3-bit field. The table below lists all the possible
division ratios:
000 /1
001 /2
010 /4
011 /8
100 /16
101 /32
110 /64
111 /128
One-shot mode
To enable the one-shot counting, the SNGSTRT bit must be set.
A new trigger event will re-start the timer. Any trigger event occurring after the counter starts
and before the counter reaches ARR will be discarded.
In case an external trigger is selected, each external trigger event arriving after the
SNGSTRT bit is set, and after the counter register has stopped (contains zero value), will
start the counter for a new one-shot counting cycle as shown in Figure 216.
/37,0B$55
&RPSDUH
3:0
([WHUQDOWULJJHUHYHQW
06Y9
/37,0B$55
&RPSDUH
'LVFDUGHGWULJJHU
3:0
([WHUQDOWULJJHUHYHQW
06Y9
In case of software start (TRIGEN[1:0] = ‘00’), the SNGSTRT setting will start the counter for
one-shot counting.
Continous mode
To enable the continuous counting, the CNTSTRT bit must be set.
In case an external trigger is selected, an external trigger event arriving after CNTSTRT is
set will start the counter for continuous counting. Any subsequent external trigger event will
be discarded as shown in Figure 218.
In case of software start (TRIGEN[1:0] = ‘00’), setting CNTSTRT will start the counter for
continuous counting.
/37,0B$55
&RPSDUH
3:0
([WHUQDOWULJJHUHYHQW
06Y9
SNGSTRT and CNTSTRT bits can only be set when the timer is enabled (The ENABLE bit
is set to ‘1’). It is possible to change “on the fly” from One-shot mode to Continuous mode.
If the Continuous mode was previously selected, setting SNGSTRT will switch the LPTIM to
the One-shot mode. The counter (if active) will stop as soon as it reaches ARR.
If the One-shot mode was previously selected, setting CNTSTRT will switch the LPTIM to
the Continuous mode. The counter (if active) will restart as soon as it reaches ARR.
The LPTIM output waveform can be configured through the WAVE bit as follow:
• Resetting the WAVE bit to ‘0’ forces the LPTIM to generate either a PWM waveform or
a One pulse waveform depending on which bit is set: CNTSTRT or SNGSTRT.
• Setting the WAVE bit to ‘1’ forces the LPTIM to generate a Set-once mode waveform.
The WAVPOL bit controls the LPTIM output polarity. The change takes effect immediately,
so the output default value will change immediately after the polarity is re-configured, even
before the timer is enabled.
Signals with frequencies up to the LPTIM clock frequency divided by 2 can be generated.
Figure 219 below shows the three possible waveforms that can be generated on the LPTIM
output. Also, it shows the effect of the polarity change using the WAVPOL bit.
/37,0B$55
&RPSDUH
3:0
2QHVKRW 3RO
6HWRQFH
3:0
2QHVKRW 3RO
6HWRQFH
069
counter comparator. Within this latency period, any additional write into these registers must
be avoided.
The ARROK flag and the CMPOK flag in the LPTIM_ISR register indicate when the write
operation is completed to respectively the LPTIM_ARR register and the LPTIM_CMP
register.
After a write to the LPTIM_ARR register or the LPTIM_CMP register, a new write operation
to the same register can only be performed when the previous write operation is completed.
Any successive write before respectively the ARROK flag or the CMPOK flag be set, will
lead to unpredictable results.
The LPTIM_CFGR and LPTIM_IER registers must be modified only when the LPTIM is
disabled.
The following figure shows a counting sequence for Encoder mode where both-edge
sensitivity is configured.
Caution: In this mode the LPTIM must be clocked by an internal clock source, so the CKSEL bit must
be maintained to its reset value which is equal to ‘0’. Also, the prescaler division ratio must
be equal to its reset value which is 1 (PRESC[2:0] bits must be ‘000’).
7
7
&RXQWHU
XS GRZQ XS
069
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ARRO CMP EXTTR
Res. Res. Res. Res. Res. Res. Res. Res. Res. DOWN UP ARRM CMPM
K OK IG
r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DOWN ARRO CMPO EXTTR ARRM CMPM
Res. Res. Res. Res. Res. Res. Res. Res. Res. UPCF
CF KCF KCF IGCF CF CF
w w w w w w w
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DOWNI ARRO CMPO EXT ARRM CMPM
Res. Res. Res. Res. Res. Res. Res. Res. Res. UPIE
E KIE KIE TRIGIE IE IE
rw rw rw rw rw rw rw
Caution: The LPTIM_IER register must only be modified when the LPTIM is disabled (ENABLE bit reset to ‘0’)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
COUNT
Res. Res. Res. Res. Res. Res. Res. ENC PRELOAD WAVPOL WAVE TIMOUT TRIGEN[1:0] Res.
MODE
rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TRIGSEL[2:0] Res. PRESC[2:0] Res. TRGFLT[1:0] Res. CKFLT[1:0] CKPOL[1:0] CKSEL
rw rw rw rw rw rw rw rw rw rw rw rw rw
Caution: The LPTIM_CFGR register must only be modified when the LPTIM is disabled (ENABLE bit
reset to ‘0’).
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CNT SNG ENA
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
STRT STRT BLE
rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CMP[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Caution: The LPTIM_CMP register must only be modified when the LPTIM is enabled (ENABLE bit
set to ‘1’).
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ARR[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Caution: The LPTIM_ARR register must only be modified when the LPTIM is enabled (ENABLE bit
set to ‘1’).
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CNT[15:0]
r r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TIM9_ITR1 TIM5_ITR1 TIM1_ITR2 LPT_IN1
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
_RMP _RMP _RMP _RMP
rw rw rw rw
0x01C
0x00C
676/1324
21.6.10
LPTIM_CR
LPTIM_OR
LPTIM_IER
LPTIM_ISR
LPTIM_ICR
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
LPTIM_CNT
LPTIM_ARR
LPTIM_CMP
LPTIM_CFGR
Offset Register name
Res. Res. Res. Res. Res. Res. Res. Res. Res. 31
Low-power timer (LPTIM)
RM0430 Rev 8
TRIGEN
0 0 0 0 0 0 0 0
Res. Res. Res. Res. Res. Res. Res. Res. 17
Res. Res. Res. Res. Res. Res. Res. Res. Res. 16
The following table summarizes the LPTIM registers.
0 0 0
Res. Res. Res. Res. Res. 13
Res. Res. Res. Res. Res. Res. 12
Res. Res. Res. Res. Res. 11
Table 120. LPTIM register map and reset values
0 0 0
Res. Res. Res. Res. Res. 9
Res. Res. Res. Res. Res. Res. 8
Res. Res. Res. Res. Res. 7
TRGFLT
0 0
CNT[15:0]
ARR[15:0]
CMP[15:0]
Res. Res. Res. UPIE UPCF UP 5
0
TIM9_ITR1_RMP RSTARE ARROKIE ARROKCF ARROK 4
CKFLT
TIM5_ITR1_RMP Res. CMPOKIE CMPOKCF CMPOK 3
0 0 0
TIM1_ITR2_RMP CNTSTRT EXTTRIGIE EXTTRIGCF EXTTRIG 2
CKPOL
SNGSTRT ARRMIE ARRMCF ARRM 1
0
LPT_IN1_RMP
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0
0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
A status register is available to indicate that an update of the prescaler or the down-counter
reload value is on going.
#/2%
0RESCALER REGISTER 3TATUS REGISTER 2ELOAD REGISTER +EY REGISTER
)7$'?02 )7$'?32 )7$'?2,2 )7$'?+2
-36
Note: The watchdog function is implemented in the VDD voltage domain that is still functional in
Stop and Standby modes.
/4 0 0.125 512
/8 1 0.25 1024
/16 2 0.5 2048
/32 3 1 4096
/64 4 2 8192
/128 5 4 16384
/256 6 8 32768
1. These timings are given for a 32 kHz clock but the microcontroller internal RC frequency can vary. Refers
to LSI oscillator characteristics table in device datasheet for from max and min values.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[15:0]
w w w w w w w w w w w w w w w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. PR[2:0]
rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. RL[11:0]
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. RVU PVU
r r
Note: If several reload values or prescaler values are used by application, it is mandatory to wait
until RVU bit is reset before changing the reload value and to wait until PVU bit is reset
before changing the prescaler value. However, after updating the prescaler and/or the
reload value it is not necessary to wait until RVU or PVU is reset before continuing code
execution (even in case of low-power mode entry, the write operation is taken into account
and will complete)
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
IWDG_KR KEY[15:0]
0x00
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
IWDG_PR PR[2:0]
0x04
Reset value 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
IWDG_RLR RL[11:0]
0x08
Reset value 1 1 1 1 1 1 1 1 1 1 1 1
RVU
PVU
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
IWDG_SR
0x0C
Reset value 0 0
: : : : : : :
FRPSDUDWRU
ZKHQ
7!:
:ULWH::'*B&5
:DWFKGRJFRQWUROUHJLVWHU ::'*B&5
:'*$ 7 7 7 7 7 7 7
ELWGRZQFRXQWHU &17
3&/.
IURP5&&FORFNFRQWUROOHU
:'*SUHVFDOHU
:'*7%
06Y9
The application program must write in the WWDG_CR register at regular intervals during
normal operation to prevent an MCU reset. This operation must occur only when the counter
value is lower than the window register value. The value to be stored in the WWDG_CR
register must be between 0xFF and 0xC0.
In some applications, the EWI interrupt can be used to manage a software system check
and/or system recovery/graceful degradation, without generating a WWDG reset. In this
case, the corresponding interrupt service routine (ISR) should reload the WWDG counter to
avoid the WWDG reset, then trigger the required actions.
The EWI interrupt is cleared by writing '0' to the EWIF bit in the WWDG_SR register.
Note: When the EWI interrupt cannot be served, e.g. due to a system lock in a higher priority task,
the WWDG reset will eventually be generated.
7;=
X&
4 BIT
2%3%4
AIC
where:
tWWDG: WWDG timeout
tPCLK1: APB1 clock period measured in ms
4096: value corresponding to internal divider.
Refer to the datasheets for the minimum and maximum values of the tWWDG.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. WDGA T[6:0]
rs rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. EWI WDGTB[1:0] W[6:0]
rs rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. EWIF
rc_w0
690/1324
Register
Reset value
Reset value
Reset value
WWDG_SR
WWDG_CR
WWDG_CFR
Res. Res. Res. 31
Res. Res. Res. 30
Res. Res. Res. 29
Window watchdog (WWDG)
RM0430 Rev 8
Res. Res. Res. 17
Res. Res. Res. 16
Res. Res. Res. 15
Res. Res. Res. 14
Res. Res. Res. 13
Res. Res. Res. 12
Res. Res. Res. 11
Table 123. WWDG register map and reset values
Res. 6
1
1
Res. 5
1
1
Res. 4
1
1
Res. 3
T[6:0]
W[6:0]
1
1
Res. 2
1
1
Res. 1
0
1
1
EWIF 0
RM0430
RM0430 AES hardware accelerator (AES)
24.1 Introduction
The AES hardware accelerator (AES) encrypts or decrypts data, using an algorithm and
implementation fully compliant with the advanced encryption standard (AES) defined in
Federal information processing standards (FIPS) publication 197.
Multiple chaining modes are supported (ECB, CBC, CTR, GCM, GMAC, CCM), for key
sizes of 128 or 256 bits.
The AES accelerator is a 32-bit AHB peripheral. It supports DMA single transfers for
incoming and outgoing data (two DMA channels required).
The AES peripheral provides hardware acceleration to AES cryptographic algorithms
packaged in STM32 cryptographic library.
AES is an AMBA AHB slave peripheral, accessible through 32-bit word single accesses only
(otherwise an AHB bus error is generated and write accesses are ignored).
$(6 ELW
DFFHVV %DQNHGUHJLVWHUV
VWDWXV $(6B65
$+%
LQWHUIDFH FRQWURO $(6B&5
VZDS $(6
DHVBKFON
GDWDLQ $(6B',15 ',1 &RUH
$($
GDWDRXW $(6B'2875 '287
$(6B68635[ 6DYH5HVWRUH
DHVBLQBGPD '0$
DHVBRXWBGPD LQWHUIDFH &RQWURO/RJLF
,54
DHVBLW
LQWHUIDFH
06Y9
Chaining modes
The following chaining modes are supported by AES, selected through the CHMOD[2:0]
bitfield of the AES_CR register:
• Electronic code book (ECB)
• Cipher block chaining (CBC)
• Counter (CTR)
• Galois counter mode (GCM)
• Galois message authentication code (GMAC)
• Counter with CBC-MAC (CCM)
Note: The chaining mode may be changed only when AES is disabled (bit EN of the AES_CR
register set).
Principle of each AES chaining mode is provided in the following subsections.
Detailed information is in dedicated sections, starting from Section 24.4.8: AES basic
chaining modes (ECB, CBC).
'HFU\SWLRQ
3ODLQWH[WEORFN 3ODLQWH[WEORFN 3ODLQWH[WEORFN
RXWSXW
NH\
VFKHGXOLQJ &LSKHUWH[WEORFN &LSKHUWH[WEORFN &LSKHUWH[WEORFN
06Y9
ECB is the simplest mode of operation. There are no chaining operations, and no special
initialization stage. The message is divided into blocks and each block is encrypted or
decrypted separately.
Note: For decryption, a special key scheduling is required before processing the first block.
(QFU\SWLRQ
3ODLQWH[WEORFN 3ODLQWH[WEORFN 3ODLQWH[WEORFN
LQLWLDOL]DWLRQ
YHFWRU
'HFU\SWLRQ
3ODLQWH[WEORFN 3ODLQWH[WEORFN 3ODLQWH[WEORFN
LQLWLDOL]DWLRQ
YHFWRU
/HJHQG NH\ NH\ NH\
'HFU\SW 'HFU\SW 'HFU\SW
LQSXW
RXWSXW
NH\
VFKHGXOLQJ &LSKHUWH[WEORFN &LSKHUWH[WEORFN &LSKHUWH[WEORFN
06Y9
In CBC mode the output of each block chains with the input of the following block. To make
each message unique, an initialization vector is used during the first block processing.
Note: For decryption, a special key scheduling is required before processing the first block.
'HFU\SWLRQ
&RXQWHU &RXQWHU &RXQWHU
RXWSXW
3ODLQWH[WEORFN 3ODLQWH[WEORFN 3ODLQWH[WEORFN
;25
&LSKHUWH[WEORFN &LSKHUWH[WEORFN &LSKHUWH[WEORFN
06Y9
The CTR mode uses the AES core to generate a key stream. The keys are then XORed
with the plaintext to obtain the ciphertext as specified in NIST Special Publication 800-38A,
Recommendation for Block Cipher Modes of Operation.
Note: Unlike with ECB and CBC modes, no key scheduling is required for the CTR decryption,
since in this chaining scheme the AES core is always used in encryption mode for producing
the key stream, or counter blocks.
/HJHQG
RXWSXW
;25
)LQDO 7$*
06Y9
,QLWLDOL]DWLRQ
YHFWRU
LQSXW
RXWSXW
)LQDO 7$*
;25
06Y9
GMAC is similar to GCM, except that it is applied on a message composed only by plaintext
authenticated data (that is, only header, no payload).
/HJHQG
RXWSXW
;25
)LQDO 7$*
06Y9
In Counter with cipher block chaining-message authentication code (CCM) mode, the
plaintext message is encrypted while a message authentication code (MAC) is computed in
parallel, thus generating the corresponding ciphertext and the corresponding MAC (also
known as tag). It is described by NIST in Special Publication 800-38C, Recommendation for
Block Cipher Modes of Operation - The CCM Mode for Authentication and Confidentiality.
CCM mode is based on AES in counter mode for confidentiality and it uses CBC for
computing the message authentication code. It requires an initial value.
Like GCM, the CCM chaining mode can be applied on a message composed only by
plaintext authenticated data (that is, only header, no payload). Note that this way of using
CCM is not called CMAC (it is not similar to GCM/GMAC), and its usage is not
recommended by NIST.
$(6B[HQFU\SWLQLW $(6B[GHFU\SWLQLW
(UURUVWDWXV (UURUVWDWXV
VXFFHVV VXFFHVV
$(6B[HQFU\SW $(6B[GHFU\SW
DSSHQG DSSHQG
'DWDWRDSSHQG 'DWDWRDSSHQG
(UURUVWDWXV (UURUVWDWXV
VXFFHVV VXFFHVV
$(6B[HQFU\SWILQLVK $(6B[GHFU\SWILQLVK
ILQDO ILQDO
(UURUVWDWXV (UURUVWDWXV
VXFFHVV VXFFHVV
(QG (QG
06Y9
%HJLQ %HJLQ
$(6B[HQFU\SWLQLW $(6B[GHFU\SWLQLW
(UURUVWDWXV (UURUVWDWXV
VXFFHVV VXFFHVV
VXFFHVV VXFFHVV
VXFFHVV VXFFHVV
$(6B[HQFU\SW $(6B[GHFU\SW
ILQLVKILQDO ILQLVKILQDO
(UURUVWDWXV (UURUVWDWXV
VXFFHVV VXFFHVV
0$&7DJ
5HWUHLYH7DJ
FRPSDULVRQ
(QG (QG
06Y9
Initialization of AES
To initialize AES, first disable it by clearing the EN bit of the AES_CR register. Then perform
the following steps in any order:
• Configure the AES mode, by programming the MODE[1:0] bitfield of the AES_CR
register.
– For encryption, Mode 1 must be selected (MODE[1:0] = 00).
– For decryption, Mode 3 must be selected (MODE[1:0] = 10), unless ECB or CBC
chaining modes are used. In this latter case, an initial key derivation of the
encryption key must be performed, as described in Section 24.4.5: AES
decryption key preparation.
• Select the chaining mode, by programming the CHMOD[2:0] bitfield of the AES_CR
register
• Configure the key size (128-bit or 256-bit), with the KEYSIZE bitfield of the AES_CR
register.
• Write a symmetric key into the AES_KEYRx registers (4 or 8 registers depending on
the key size).
• Configure the data type (1-, 8-, 16- or 32-bit), with the DATATYPE[1:0] bitfield in the
AES_CR register.
• When it is required (for example in CBC or CTR chaining modes), write the initialization
vectors into the AES_IVRx register.
Data append
This section describes different ways of appending data for processing, where the size of
data to process is not a multiple of 128 bits.
For ECB, CBC and GCM encryption mode, refer to Section 24.4.6: AES ciphertext stealing
and data padding. The second-last and the last block management in these cases is more
complex than in the sequence described in this section.
Data append through polling
This method uses flag polling to control the data append.
For all other cases, the data is appended through the following sequence:
1. Enable the AES peripheral by setting the EN bit of the AES_CR register.
2. Repeat the following sub-sequence until the payload is entirely processed:
a) Write four input data words into the AES_DINR register.
b) Wait until the status flag CCF is set in the AES_SR, then read the four data words
from the AES_DOUTR register.
c) Clear the CCF flag, by setting the CCFC bit of the AES_CR register.
d) If the data block just processed is the second-last block of the message and the
significant data in the last block to process is inferior to 128 bits, pad the
remainder of the last block with zeros
3. Discard the data that is not part of the payload, then disable the AES peripheral by
clearing the EN bit of the AES_CR register.
Note: Up to three wait cycles are automatically inserted between two consecutive writes to the
AES_DINR register, to allow sending the key to the AES processor.
Data append using interrupt
The method uses interrupt from the AES peripheral to control the data append, through the
following sequence:
1. Enable interrupts from AES by setting the CCFIE bit of the AES_CR register.
2. Enable the AES peripheral by setting the EN bit of the AES_CR register.
3. Write first four input data words into the AES_DINR register.
4. Handle the data in the AES interrupt service routine, upon interrupt:
a) Read four output data words from the AES_DOUTR register.
b) Clear the CCF flag and thus the pending interrupt, by setting the CCFC bit of the
AES_CR register
c) If the data block just processed is the second-last block of an message and the
significant data in the last block to process is inferior to 128 bits, pad the
remainder of the last block with zeros. Then proceed with point 4e).
d) If the data block just processed is the last block of the message, discard the data
that is not part of the payload, then disable the AES peripheral by clearing the EN
bit of the AES_CR register and quit the interrupt service routine.
e) Write next four input data words into the AES_DINR register and quit the interrupt
service routine.
Note: AES is tolerant of delays between consecutive read or write operations, which allows, for
example, an interrupt from another peripheral to be served between two AES computations.
If the software stores the initial key prepared for decryption, it is enough to do the key
schedule operation only once for all the data to be decrypted with a given cipher key.
Note: The operation of the key preparation lasts 80 or 109 clock cycles, depending on the key size
(128- or 256-bit).
Note: Alternative key preparation is to select Mode 4 by setting to 11 the MODE[1:0] bitfield of the
AES_CR register. In this case Mode 3 cannot be used.
1. Disable the AES peripheral by clearing the EN bit of the AES_CR register
2. Change the mode to CTR by writing 010 to the CHMOD[2:0] bitfield of the AES_CR
register.
3. Pad the last block (smaller than 128 bits) with zeros to have a complete block of 128
bits, then write it into AES_DINR register.
4. Upon encryption completion, read the 128-bit ciphertext from the AES_DOUTR register
and store it as intermediate data.
5. Change again the mode to GCM by writing 011 to the CHMOD[2:0] bitfield of the
AES_CR register.
6. Select Final phase by writing 11 to the GCMPH[1:0] bitfield of the AES_CR register.
7. In the intermediate data, set to zero the bits corresponding to the padded bits of the last
block of payload, then insert the resulting data into AES_DINR register.
8. Wait for operation completion, and read data on AES_DOUTR. This data is to be
discarded.
9. Apply the normal Final phase as described in Section 24.4.10: AES Galois/counter
mode (GCM) on page 712
0HVVDJH 0HVVDJH
ELWEORFN
1HZKLJKHUSULRULW\ ELWEORFN
PHVVDJHWREH
$(6VXVSHQG
SURFHVVHG
VHTXHQFH
ELWEORFN
ELWEORFN
ELWEORFN
ELWEORFN
$(6UHVXPH
ELWEORFN
VHTXHQFH
ELWEORFN
06Y9
2 2
/HJHQG 6ZDS $(6FRUH 6ZDS
'$7$7<3(>@ PDQDJHPHQW '$7$7<3(>@ PDQDJHPHQW
LQSXW
In ECB encrypt mode, the 128-bit plaintext input data block Px in the AES_DINR register
first goes through bit/byte/half-word swapping. The swap result Ix is processed with the AES
core set in encrypt mode, using a 128- or 256-bit key. The encryption result Ox goes through
bit/byte/half-word swapping, then is stored in the AES_DOUTR register as 128-bit ciphertext
output data block Cx. The ECB encryption continues in this way until the last complete
plaintext block is encrypted.
Figure 236 illustrates the electronic codebook (ECB) decryption.
2 2
/HJHQG 6ZDS 6ZDS
'$7$7<3(>@ PDQDJHPHQW '$7$7<3(>@ PDQDJHPHQW
LQSXW
RXWSXW
$(6B'2875 SODLQWH[W3 $(6B'2875 SODLQWH[W3
06Y9
To perform an AES decryption in the ECB mode, the secret key has to be prepared by
collecting the last-round encryption key (which requires to first execute the complete key
schedule for encryption), and using it as the first-round key for the decryption of the
ciphertext. This preparation is supported by the AES core.
In ECB decrypt mode, the 128-bit ciphertext input data block C1 in the AES_DINR register
first goes through bit/byte/half-word swapping. The keying sequence is reversed compared
to that of the ECB encryption. The swap result I1 is processed with the AES core set in
decrypt mode, using the formerly prepared decryption key. The decryption result goes
through bit/byte/half-word swapping, then is stored in the AES_DOUTR register as 128-bit
plaintext output data block P1. The ECB decryption continues in this way until the last
complete ciphertext block is decrypted.
Figure 237 illustrates the cipher block chaining (CBC) encryption mode.
RXWSXW
$(6B'2875 FLSKHUWH[W& $(6B'2875 FLSKHUWH[W&
;25
06Y9
In CBC encrypt mode, the first plaintext input block, after bit/byte/half-word swapping (P1’),
is XOR-ed with a 128-bit IVI bitfield (initialization vector and counter), producing the I1 input
data for encrypt with the AES core, using a 128- or 256-bit key. The resulting 128-bit output
block O1, after swapping operation, is used as ciphertext C1. The O1 data is then XOR-ed
with the second-block plaintext data P2’ to produce the I2 input data for the AES core to
produce the second block of ciphertext data. The chaining of data blocks continues in this
way until the last plaintext block in the message is encrypted.
If the message size is not a multiple of 128 bits, the final partial data block is encrypted in
the way explained in Section 24.4.6: AES ciphertext stealing and data padding.
Figure 238 illustrates the cipher block chaining (CBC) decryption mode.
, ,
$(6B.(<5[ .(< $(6B.(<5[ .(<
'HFU\SW 'HFU\SW
$(6B,95[ ,9 2 2
,9,
3 3
/HJHQG
'$7$7<3(>@ 6ZDS '$7$7<3(>@ 6ZDS
PDQDJHPHQW PDQDJHPHQW
LQSXW
RXWSXW
$(6B'2875 SODLQWH[W3 $(6B'2875 SODLQWH[W3
;25
06Y9
In CBC decrypt mode, like in ECB decrypt mode, the secret key must be prepared to
perform an AES decryption.
After the key preparation process, the decryption goes as follows: the first 128-bit ciphertext
block (after the swap operation) is used directly as the AES core input block I1 for decrypt
operation, using the 128-bit or 256-bit key. Its output O1 is XOR-ed with the 128-bit IVI field
(that must be identical to that used during encryption) to produce the first plaintext block P1.
The second ciphertext block is processed in the same way as the first block, except that the
I1 data from the first block is used in place of the initialization vector.
The decryption continues in this way until the last complete ciphertext block is decrypted.
If the message size is not a multiple of 128 bits, the final partial data block is decrypted in
the way explained in Section 24.4.6: AES ciphertext stealing and data padding.
For more information on data swapping, refer to Section 24.4.13: .AES data registers and
data swapping.
then stop the DMA transfers from the OUT FIFO by clearing the DMAOUTEN bit of the
AES_CR register.
3. If DMA is not used, poll the CCF flag of the AES_SR register until it becomes 1
(computation completed).
4. Clear the CCF flag by setting the CCFC bit of the AES_CR register.
5. Save initialization vector registers (only required in CBC mode as AES_IVRx registers
are altered during the data processing).
6. Disable the AES peripheral by clearing the bit EN of the AES_CR register.
7. Save the current AES configuration in the memory (except AES initialization vector
values).
8. If DMA is used, save the DMA controller status (pointers for IN and OUT data transfers,
number of remaining bytes, and so on).
Note: In point 7, the derived key information stored in AES_KEYRx registers can optionally be
saved in memory if the interrupted process is a decryption. Otherwise those registers do not
need to be saved as the original key value is known by the application
To resume the processing of a message, proceed as follows:
1. If DMA is used, configure the DMA controller so as to complete the rest of the FIFO IN
and FIFO OUT transfers.
2. Ensure that AES is disabled (the EN bit of the AES_CR must be 0).
3. Restore the AES_CR and AES_KEYRx register setting, using the values of the saved
configuration. In case of decryption, derived key information can be written in
AES_KEYRx register instead of the original key value.
4. Prepare the decryption key as described in Section 24.4.5: AES decryption key
preparation (only required for ECB or CBC decryption). This step is not necessary if
derived key information has been loaded in AES_KEYRx registers.
5. Restore AES_IVRx registers using the saved configuration (only required in CBC
mode).
6. Enable the AES peripheral by setting the EN bit of the AES_CR register.
7. If DMA is used, enable AES DMA transfers by setting the DMAINEN and DMAOUTEN
bits of the AES_CR register.
E\WHERXQGDULHV
=HUR
,&% &LSKHUWH[W & SDGGLQJ
GHFU\SW
E\WHERXQGDULHV
3ODLQWH[W 3
,QLWLDOL]DWLRQYHFWRU ,9 &RXQWHU
06Y9
RXWSXW
$(6B'2875 SODLQWH[W3 $(6B'2875 SODLQWH[W3
;25
06Y9
In CTR mode, the cryptographic core output (also called keystream) Ox is XOR-ed with
relevant input block (Px' for encryption, Cx' for decryption), to produce the correct output
block (Cx' for encryption, Px' for decryption). Initialization vectors in AES must be initialized
as shown in Table 125.
Unlike in CBC mode that uses the AES_IVRx registers only once when processing the first
data block, in CTR mode AES_IVRx registers are used for processing each data block, and
the AES peripheral increments the counter bits of the initialization vector (leaving the nonce
bits unchanged).
CTR decryption does not differ from CTR encryption, since the core always encrypts the
current counter block to produce the key stream that is then XOR-ed with the plaintext (CTR
encryption) or ciphertext (CTR decryption) input. In CTR mode, the MODE[1:0] bitfield
settings 11, 10 or 00 default all to encryption mode, and the setting 01 (key derivation) is
forbidden.
The sequence of events to perform an encryption or a decryption in CTR chaining mode:
1. Ensure that AES is disabled (the EN bit of the AES_CR must be 0).
2. Select CTR chaining mode by setting to 010 the CHMOD[2:0] bitfield of the AES_CR
register. Set MODE[1:0] bitfield to any value other than 01.
3. Initialize the AES_KEYRx registers, and load the AES_IVRx registers as described in
Table 125.
4. Set the EN bit of the AES_CR register, to start encrypting the current counter (EN is
automatically reset when the calculation finishes).
5. If it is the last block, pad the data with zeros to have a complete block, if needed.
6. Append data in AES, and read the result. The three possible scenarios are described in
Section 24.4.4: AES procedure to perform a cipher operation.
7. Repeat the previous step till the second-last block is processed. For the last block,
apply the two previous steps and discard the bits that are not part of the payload (if the
size of the significant data in the last input block is less than 16 bytes).
HQFU\SW
DXWKHQWLFDWH
DXWKHQWLFDWH
E\WHERXQGDULHV
$XWKHQWLFDWHG HQFU\SWHGFLSKHUWH[W &
,QLWLDOL]DWLRQYHFWRU ,9 &RXQWHU
DXWK
$XWKHQWLFDWLRQWDJ 7
=HURSDGGLQJ]HURHGELWV
06Y9
GCM processing
Figure 245 describes the GCM implementation in the AES peripheral. The GCM is selected
by writing 011 to the CHMOD[2:0] bitfield of the AES_CR register.
+
6ZDS '$7$7<3( 6ZDS '$7$7<3(
PDQDJHPHQW >@ PDQDJHPHQW >@
+ *)PXO
$(6B,95[
/HJHQG ,9ELWFRXQWHU [
6
LQSXW (QFU\SW
RXWSXW
;25 $(6B'2875
$(6B.(<5[ NH\ $XWKHQWLFDWLRQ7$*7
06Y9
The mechanism for the confidentiality of the plaintext in GCM mode is similar to that in the
Counter mode, with a particular increment function (denoted 32-bit increment) that
generates the sequence of input counter blocks.
AES_IVRx registers keeping the counter block of data are used for processing each data
block. The AES peripheral automatically increments the Counter[31:0] bitfield. The first
counter block (CB1) is derived from the initial counter block ICB by the application software
(see Table 127).
Note: In GCM mode, the settings 01 and 11 of the MODE[1:0] bitfield are forbidden.
The authentication mechanism in GCM mode is based on a hash function called GF2mul
that performs multiplication by a fixed parameter, called hash subkey (H), within a binary
Galois field.
A GCM message is processed through the following phases, further described in next
subsections:
• Init phase: AES prepares the GCM hash subkey (H).
• Header phase: AES processes the additional authenticated data (AAD), with hash
computation only.
• Payload phase: AES processes the plaintext (P) with hash computation, counter block
encryption and data XOR-ing. It operates in a similar way for ciphertext (C).
• Final phase: AES generates the authenticated tag (T) using the last block of the
message.
/HQ $
E\WH
ERXQGDULHV
/DVW
,&% $XWKHQWLFDWHGGDWD EORFN
DXWK
E\WHERXQGDULHV
$XWKHQWLFDWLRQWDJ 7
,QLWLDOL]DWLRQYHFWRU ,9 &RXQWHU
=HURSDGGLQJ
06Y9
,QLW )LQDO
>@ $(6B,95[
$(6B.(<5[ .(< ,9ELWFRXQWHU [
(QFU\SW
$(6B.(<5[ .(<
+
(QFU\SW
+HDGHU
$(6B',15 $(6B',15 $(6B',15
PHVVDJHEORFN PHVVDJHEORFNQ OHQ $ __OHQ &
6ZDS 6ZDS
PDQDJHPHQW '$7$7<3( PDQDJHPHQW
>@
+ *)PXO
6
+ *)PXO + *)PXO
/HJHQG
LQSXW $(6B'2875
DXWKHQWLFDWLRQWDJ7
RXWSXW
;25
06Y9
The GMAC algorithm corresponds to the GCM algorithm applied on a message only
containing a header. As a consequence, all steps and settings are the same as with the
GCM, except that the payload phase is omitted.
/HQ &
/HQ $ /HQ 3 /HQ 7
E\WH
ERXQGDULHV
% >D@ $VVRFLDWHGGDWD $ 3ODLQWH[W 3 (QF
>D@ HQFU\SW 7
DXWKHQWLFDWH
E\WHERXQGDULHV
$XWKHQWLFDWHG HQFU\SWHGFLSKHUWH[W &
IODJV 1RQFH 1 4
=HURSDGGLQJ
06Y9
standard also states that, on MSB bits of the first message block (B1), the associated
data length expressed in bytes (a) must be encoded as follows:
– If 0 < a < 216 - 28, then it is encoded as [a]16, that is, on two bytes.
– If 216 - 28 < a < 232, then it is encoded as 0xff || 0xfe || [a]32, that is, on six bytes.
– If 232 < a < 264, then it is encoded as 0xff || 0xff || [a]64, that is, on ten bytes.
• 16-byte blocks (B) associated to the plaintext message P, which is both authenticated
and encrypted as ciphertext C, with a known length Len(P). This length can be a non-
multiple of 16 bytes (see Figure 248).
• Encrypted MAC (T) of length Len(T) appended to the ciphertext C of overall length
Len(C).
When a part of the message (A or P) has a length that is a non-multiple of 16-bytes, a
special padding scheme is required.
Note: CCM chaining mode can also be used with associated data only (that is, no payload).
As an example, the C.1 section in NIST Special Publication 800-38C gives the following
values (hexadecimal numbers):
N: 10111213 141516 (Len(N)= 56 bits or 7 bytes)
A: 00010203 04050607 (Len(A)= 64 bits or 8 bytes)
P: 20212223 (Len(P)= 32 bits or 4 bytes)
T: 6084341B (Len(T)= 32 bits or t = 4)
B0: 4F101112 13141516 00000000 00000004
B1: 00080001 02030405 06070000 00000000
B2: 20212223 00000000 00000000 00000000
CTR0: 0710111213 141516 00000000 00000000
CTR1: 0710111213 141516 00000000 00000001
Generation of formatted input data blocks Bx (especially B0 and B1) must be managed by
the application.
CCM processing
Figure 249 describes the CCM implementation within the AES peripheral (decryption
example).
$(6B.(<5[ .(<
(QFU\SW (QFU\SW (QFU\SW (QFU\SW
$(6B',15 &75
$(6B.(<5[ .(< $(6B.(<5[ .(< $(6B.(<5[ .(<
0$& 7
%ORFNFLSKHU 6
/HJHQG HQFU\SWLRQ
LQSXW
$(6B'2875
RXWSXW DXWKHQWLFDWLRQWDJ7
$(6B.(<5[ .(<
;25 $(6&&0ILQDO
06Y9
The data input to the generation-encryption process are a valid nonce, a valid payload
string, and a valid associated data string, all properly formatted. The CBC chaining
mechanism is applied to the formatted plaintext data to generate a MAC, with a known
length. Counter mode encryption that requires a sufficiently long sequence of counter blocks
as input, is applied to the payload string and separately to the MAC. The resulting ciphertext
C is the output of the generation-encryption process on plaintext P.
AES_IVRx registers are used for processing each data block, AES automatically
incrementing the CTR counter with a bit length defined by the first block B0. Table 128
shows how the application must load the B0 data.
A CCM message is processed through two distinct processes - first, payload encryption or
decryption, in which the AES peripheral is configured in CTR mode, then associated data
and payload authentication, in which the AES peripheral first executes the CCM header
phase, then the CCM final phase.
Payload encryption/decryption
This step is performed independently of the tag computation. It uses standard CTR chaining
mode. Refer to Section 24.4.9: AES counter (CTR) mode for details. The construction of the
CTR1 initialization vector (see Figure 249) to load into AES_IVRx registers is defined in
NIST Special Publication 800-38C.
Note: This phase can be skipped if there is no payload data, that is, when Len(P) = 0 or
Len(C) = Len(T).
Remove LSBLen(T)(C) encrypted tag information when decrypting ciphertext C.
In final phase, the AES peripheral generates the CCM authentication tag and stores it in the
AES_DOUTR register:
11. Indicate the final phase, by setting to 11 the GCMPH[1:0] bitfield of the AES_CR
register. Keep as-is the encryption mode in the MODE[1:0] bitfield.
12. Write four times the last data input into the AES_DIN register. This input must be the
128-bit value CTR0, formatted from the original B0 packet (that is, 5 flag bits set to 0,
and Q length bits set to 0).
13. Wait until the end-of-computation flag CCF of the AES_SR register is set.
14. Read four times the AES_DOUTR register: the output corresponds to the encrypted
CCM authentication tag.
15. Clear the CCF flag of the AES_SR register by setting the CCFC bit of the AES_CR
register.
16. Disable the AES peripheral, by clearing the EN bit of the AES_CR register.
17. For authenticated decryption, compare the generated encrypted tag with the encrypted
tag padded in the ciphertext.
Note: In this final phase, data must be swapped according to the DATATYPE[1:0] bitfield of the
AES_CR register.
When transiting from the header phase to the final phase, the AES peripheral must not be
disabled, otherwise the result is wrong.
Application must mask the authentication tag output with tag length to obtain a valid tag.
Data swapping
The AES peripheral can be configured to perform a bit-, a byte-, a half-word-, or no
swapping on the input data word in the AES_DINR register, before loading it to the AES
processing core, and on the data output from the AES processing core, before sending it to
the AES_DOUTR register. The choice depends on the type of data. For example, a byte
swapping is used for an ASCII text stream.
The data swap type is selected through the DATATYPE[1:0] bitfield of the AES_CR register.
The selection applies both to the input and the output of the AES core.
For different data swap types, Figure 250 shows the construction of AES processing core
input buffer data P127..0, from the input data entered through the AES_DINR register, or the
construction of the output data available through the AES_DOUTR register, from the AES
processing core output buffer data P127..0.
' ' '
3 ' ' ' ' '
06% /6%
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
06% /6%
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
06% /6%
'$7$7<3(>@ ELWVZDSSLQJ
06% /6%
:RUG :RUG :RUG :RUG
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
06% /6%
Note: The data in AES key registers (AES_KEYRx) and initialization registers (AES_IVRx) are not
sensitive to the swap mode selection.
Data padding
Figure 250 also gives an example of memory data block padding with zeros such that the
zeroed bits after the data swap form a contiguous zone at the MSB end of the AES core
input buffer. The example shows the padding of an input data block containing:
• 48 message bits, with DATATYPE[1:0] = 01
• 56 message bits, with DATATYPE[1:0] = 10
• 34 message bits, with DATATYPE[1:0] = 11
Table 129. Key endianness in AES_KEYRx registers (128- or 256-bit key length)
AES_KEYR7 AES_KEYR6 AES_KEYR5 AES_KEYR4 AES_KEYR3 AES_KEYR2 AES_KEYR1 AES_KEYR0
[31:0] [31:0] [31:0] [31:0] [31:0] [31:0] [31:0] [31:0]
The key for encryption or decryption may be written into these registers when the AES
peripheral is disabled.
The key registers are not affected by the data swapping controlled by DATATYPE[1:0]
bitfield of the AES_CR register.
Figure 251. DMA transfer of a 128-bit data block during input phase
&KURQRORJLFDORUGHU
,QFUHDVLQJDGGUHVV
0HPRU\DFFHVVHGWKURXJK'0$
:RUG :RUG :RUG :RUG
6\VWHP
' ',1>@ ' ' ',1>@ ' ' ',1>@ ' ' ',1>@ '
06% /6%
$(6B',15
1RVZDSSLQJ SHULSKHUDO
$(6
$(6FRUHLQSXWEXIIHU
, , , , , , , ,
06% /6%
2UGHURIZULWHWR$(6B',15 06Y9
Figure 252. DMA transfer of a 128-bit data block during output phase
&KURQRORJLFDORUGHU
,QFUHDVLQJDGGUHVV
0HPRU\DFFHVVHGWKURXJK'0$
:RUG :RUG :RUG :RUG
6\VWHP
' '287>@ ' ' '287>@ ' ' '287>@ ' ' '287>@ '
06% /6%
$(6B'2875
SHULSKHUDO
1RVZDSSLQJ
$(6
$(6FRUHRXWSXWEXIIHU
2 2 2 2 2 2 2 2
06% /6%
2UGHURIUHDGIURP$(6B'2875 06Y9
in ECB/CBC modes in Section 24.4.8: AES basic chaining modes (ECB, CBC) as example.
&&)
&&),(
5'(55
(55,(
06Y9
The status of the individual maskable interrupt sources can be read from the AES_SR
register.
Table 132 gives a summary of the interrupt sources, their event flags and enable bits.
Table 133. Processing latency (in clock cycle) for ECB, CBC and CTR
Input Computation Output
Key size Mode of operation Algorithm Total
phase phase phase
Table 134. Processing latency for GCM and CCM (in clock cycle)
Header Payload
Key size Mode of operation Algorithm Init Phase Tag phase
phase phase
Mode 1: Encryption/
GCM 215 67 202 202
Mode 3: Decryption
128-bit
CCM
- - 206 - 202
authentication
Mode 1: Encryption/
GCM 299 67 286 286
Mode 3: Decryption
256-bit
CCM
- - 290 - 286
authentication
Note: Data insertion can include wait states forced by AES on the AHB bus (maximum 3 cycles,
typical 1 cycle). This applies to all header/payload/tag phases.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEYSI CHMO
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
ZE D[2]
rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DMAO DMAIN
Res. GCMPH[1:0] ERRIE CCFIE ERRC CCFC CHMOD[1:0] MODE[1:0] DATATYPE[1:0] EN
UTEN EN
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
The bit value change is allowed only when AES is disabled, so as to avoid an unpredictable
behavior.
Bit 17 Reserved, must be kept at zero
Bit 16 CHMOD[2]: Chaining mode selection, bit [2]
Refer to the bits [5:6] of the register for the description of the CHMOD[2:0] bitfield
Bit 15 Reserved, must be kept at zero
Bits 14:13 GCMPH[1:0]: GCM or CCM phase selection
This bitfield selects the phase of GCM, GMAC or CCM algorithm:
00: Init phase
01: Header phase
10: Payload phase
11: Final phase
The bitfield has no effect if other than GCM, GMAC or CCM algorithms are selected (through the
ALGOMODE bitfield).
When the bit is set, DMA requests are automatically generated by AES during the output data
phase. This feature is only effective when Mode 1 or Mode 3 is selected through the MODE[1:0]
bitfield. It is not effective for Mode 2 (key derivation).
Usage of DMA with Mode 4 (single decryption) is not recommended.
Bit 11 DMAINEN: DMA input enable
This bit enables/disables data transferring with DMA, in the input phase:
0: Disable
1: Enable
When the bit is set, DMA requests are automatically generated by AES during the input data phase.
This feature is only effective when Mode 1 or Mode 3 is selected through the MODE[1:0] bitfield. It is
not effective for Mode 2 (key derivation).
Usage of DMA with Mode 4 (single decryption) is not recommended.
Bit 10 ERRIE: Error interrupt enable
This bit enables or disables (masks) the AES interrupt generation when RDERR and/or WRERR is
set:
0: Disable (mask)
1: Enable
Bit 9 CCFIE: CCF interrupt enable
This bit enables or disables (masks) the AES interrupt generation when CCF (computation complete
flag) is set:
0: Disable (mask)
1: Enable
Bit 8 ERRC: Error flag clear
Upon written to 1, this bit clears the RDERR and WRERR error flags in the AES_SR register:
0: No effect
1: Clear RDERR and WRERR flags
The bitfield value change is allowed only when AES is disabled, so as to avoid an unpredictable
behavior.
Bits 4:3 MODE[1:0]: AES operating mode
This bitfield selects the AES operating mode:
00: Mode 1: encryption
01: Mode 2: key derivation (or key preparation for ECB/CBC decryption)
10: Mode 3: decryption
11: Mode 4: key derivation then single decryption
The bitfield value change is allowed only when AES is disabled, so as to avoid an unpredictable
behavior. Any attempt to selecting Mode 4 while either ECB or CBC chaining mode is not selected,
defaults to effective selection of Mode 3. It is not possible to select a Mode 3 following a Mode 4.
Bits 2:1 DATATYPE[1:0]: Data type selection
This bitfield defines the format of data written in the AES_DINR register or read from the
AES_DOUTR register, through selecting the mode of data swapping:
00: None
01: Half-word (16-bit)
10: Byte (8-bit)
11: Bit
For more details, refer to Section 24.4.13: .AES data registers and data swapping.
The bitfield value change is allowed only when AES is disabled, so as to avoid an unpredictable
behavior.
Bit 0 EN: AES enable
This bit enables/disables the AES peripheral:
0: Disable
1: Enable
At any moment, clearing then setting the bit re-initializes the AES peripheral.
This bit is automatically cleared by hardware when the key preparation process ends (Mode 2).
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. BUSY WRERR RDERR CCF
r r r r r r r r r r r r r r r r
The flag is controlled by hardware. When the flag indicates “idle”, the current message processing
may be suspended to process a higher-priority message.
This flag is effective only in GCM payload encryption phase. in other chaining modes, or in GCM
phases other than payload encryption, the flag must be ignored.
The flag is set by hardware. It is cleared by software upon setting the ERRC bit of the AES_CR
register.
Upon the flag setting, an interrupt is generated if enabled through the ERRIE bit of the AES_CR
register.
The flag setting has no impact on the AES operation.
The flag is not effective when key derivation mode, or GCM/CCM Init phase is selected.
Bit 1 RDERR: Read error flag
This flag indicates the detection of an unexpected read operation from the AES_DOUTR register
(during computation or data input phase):
0: Not detected
1: Detected
The flag is set by hardware. It is cleared by software upon setting the ERRC bit of the AES_CR
register.
Upon the flag setting, an interrupt is generated if enabled through the ERRIE bit of the AES_CR
register.
The flag setting has no impact on the AES operation.
The flag is not effective when key derivation mode, nor GCM/CCM init/header phase is selected.
Bit 0 CCF: Computation completed flag
This flag indicates whether the computation is completed:
0: Not completed
1: Completed
The flag is set by hardware upon the completion of the computation. It is cleared by software, upon
setting the CCFC bit of the AES_CR register.
Upon the flag setting, an interrupt is generated if enabled through the CCFIE bit of the AES_CR
register.
The flag is significant only when the DMAOUTEN bit is 0. It may stay high when DMA_EN is 1.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DIN[x+31:x+16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DIN[x+15:x]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Bits 31:0 DIN[x+31:x]: One of four 32-bit words of a 128-bit input data block being written into the peripheral
This bitfield feeds a 32-bit input buffer. A 4-fold sequential write to this bitfield during the input phase
virtually writes a complete 128-bit block of input data to the AES peripheral. Upon each write, the
data from the input buffer are handled by the data swap block according to the DATATYPE[1:0]
bitfield, then written into the AES core 128-bit input buffer.
The substitution for “x”, from the first to the fourth write operation, is: 96, 64, 32, and 0. In other
words, data from the first to the fourth write operation are: DIN[127:96], DIN[95:64], DIN[63:32], and
DIN[31:0].
The data signification of the input data block depends on the AES operating mode:
- Mode 1 (encryption): plaintext
- Mode 2 (key derivation): the bitfield is not used (AES_KEYRx registers used for input)
- Mode 3 (decryption) and Mode 4 (key derivation then single decryption): ciphertext
The data swap operation is described in Section 24.4.13: .AES data registers and data swapping on
page 724.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOUT[x+31:x+16]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DOUT[x+15:0]
r r r r r r r r r r r r r r r r
Bits 31:0 DOUT[x+31:x]: One of four 32-bit words of a 128-bit output data block being read from the peripheral
This bitfield fetches a 32-bit output buffer. A 4-fold sequential read of this bitfield, upon the
computation completion (CCF set), virtually reads a complete 128-bit block of output data from the
AES peripheral. Before reaching the output buffer, the data produced by the AES core are handled
by the data swap block according to the DATATYPE[1:0] bitfield.
The substitution for DOUT[x+31:x], from the first to the fourth read operation, is: 96, 64, 32, and 0. In
other words, data from the first to the fourth read operation are: DOUT[127:96], DOUT[95:64],
DOUT[63:32], and DOUT[31:0].
The data signification of the output data block depends on the AES operating mode:
- Mode 1 (encryption): ciphertext
- Mode 2 (key derivation): the bitfield is not used (AES_KEYRx registers used for output).
- Mode 3 (decryption) and Mode 4 (key derivation then single decryption): plaintext
The data swap operation is described in Section 24.4.13: .AES data registers and data swapping on
page 724.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[63:48]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[47:32]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[95:80]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[79:64]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[127:112]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[111:96]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
IVI[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IVI[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
IVI[63:48]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IVI[47:32]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
IVI[95:80]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IVI[79:64]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
IVI[127:112]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IVI[111:96]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[159:144]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[143:128]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[191:176]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[175:160]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[223:208]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[207:192]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[255:240]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
KEY[239:224]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: The key registers from 4 to 7 are used only when the key length of 256 bits is selected. They
have no effect when the key length of 128 bits is selected (only key registers 0 to 3 are used
in that case).
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SUSPx
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SUSPx
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
DATATYPE[1:0]
CHMOD[1:0]
DMAOUTEN
GCMPH[1:0]
MODE[1:0]
CHMOD[2]
DMAINEN
KEYSIZE
ERRIE
CCFIE
ERRC
CCFC
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
EN
AES_CR
0x0000
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
WRERR
RDERR
BUSY
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
CCF
AES_SR
0x0004
Reset value 0 0 0 0
AES_DINR
DIN[x+31:x]
0x0008 x=96,64,32,0
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_DOUTR
0x000 DOUT[x+31:x]
x=96,64,32,0
C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_KEYR0 KEY[31:0]
0x0010
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_KEYR1 KEY[63:32]
0x0014
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_KEYR2 KEY[95:64]
0x0018
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_KEYR3 KEY[127:96]
0x001
C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_IVR0 IVI[31:0]
0x0020
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_IVR1 IVI[63:32]
0x0024
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_IVR2 IVI[95:64]
0x0028
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_IVR3 IVI[127:96]
0x002
C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_KEYR4 KEY[159:128]
0x0030
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_KEYR5 KEY[191:160]
0x0034
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_KEYR6 KEY[223:192]
0x0038
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
AES_KEYR7 KEY[255:224]
0x003
C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_SUSP0R SUSP0[31:0]
0x0040
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_SUSP1R SUSP1[31:0]
0x0044
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_SUSP2R SUSP2[31:0]
0x0048
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_SUSP3R SUSP3[31:0]
0x004
C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_SUSP4R SUSP4[31:0]
0x0050
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_SUSP5R SUSP5[31:0]
0x0054
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_SUSP6R SUSP6[31:0]
0x0058
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_SUSP7R SUSP7[31:0]
0x005
C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25.1 Introduction
The real-time clock (RTC) is an independent BCD timer/counter. The RTC provides a
time-of-day clock/calendar, two programmable alarm interrupts, and a periodic
programmable wakeup flag with interrupt capability. The RTC also includes an automatic
wakeup unit to manage low power modes.
Two 32-bit registers contain the seconds, minutes, hours (12- or 24-hour format), day (day
of week), date (day of month), month, and year, expressed in binary coded decimal format
(BCD). The sub-seconds value is also available in binary format.
Compensations for 28-, 29- (leap year), 30-, and 31-day months are performed
automatically. Daylight saving time compensation can also be performed.
Additional 32-bit registers contain the programmable alarm subseconds, seconds, minutes,
hours, day, and date.
A digital calibration feature is available to compensate for any deviation in crystal oscillator
accuracy.
After backup domain reset, all RTC registers are protected against possible parasitic write
accesses.
As long as the supply voltage remains in the operating range, the RTC never stops,
regardless of the device status (Run mode, low power mode or under reset).
57&B76 7LPH
+] VWDPS 76)
UHJLVWHUV
+] 57&B&$/,%
&NBDSUH 57&B287
2XWSXW
GHIDXOW+]
FRQWURO 57&B$)
$ODUP$
&RDUVH 57&B$/50$5 $/5$)
6PRRWK 57&B35(5 57&B35(5 57&B$/50$665
&DOLEUDWLRQ FDOLEUDWLRQ FNBVSUH
$V\QFKURQRXV 6\QFKURQRXV UHJLVWHUV
57&B&$/ 57&B&$/ GHIDXOW
ELWSUHVFDOHU ELWSUHVFDOHU
5 ,%5 +]
GHIDXOW GHIDXOW &DOHQGDU
6KDGRZ 6KDGRZ
57&B$/$50
/6( 5HJLVWHUV 5HJLVWHUV
+] 57&B665 57&B75'5
+6(B57& 57&&/.
0+]PD[ $ODUP%
/6, :8&.6(/>@ 57&B$/50%5 $/5%)
57&B$/50%665
3UHVFDOHU UHJLVWHUV
57&B:875
:87)
ELWZDNHXS
DXWRUHORDGWLPHU
%DFNXSDQG
57&WDPSHU
57&B7$03
FRQWURO
UHJLVWHUV
7$03(
76(
06Y9
The ck_apre clock is used to clock the binary RTC_SSR subseconds downcounter. When it
reaches 0, RTC_SSR is reloaded with the content of PREDIV_S.
fck_spre is given by the following formula:
f RTCCLK
f CK_SPRE = -----------------------------------------------------------------------------------------------
( PREDIV_S + 1 ) × ( PREDIV_A + 1 )
The ck_spre clock can be used either to update the calendar or as timebase for the 16-bit
wakeup auto-reload timer. To obtain short timeout periods, the 16-bit wakeup auto-reload
timer can also run with the RTCCLK divided by the programmable 4-bit asynchronous
prescaler (see Section 25.3.4 for details).
Every two RTCCLK periods, the current calendar value is copied into the shadow registers,
and the RSF bit of RTC_ISR register is set (see Section 25.6.4). The copy is not performed
in Stop and Standby mode. When exiting these modes, the shadow registers are updated
after up to two RTCCLK periods.
When the application reads the calendar registers, it accesses the content of the shadow
registers.It is possible to make a direct access to the calendar registers by setting the
BYPSHAD control bit in the RTC_CR register. By default, this bit is cleared, and the user
accesses the shadow registers.
When reading the RTC_SSR, RTC_TR or RTC_DR registers in BYPSHAD=0 mode, the
frequency of the APB clock (fAPB) must be at least 7 times the frequency of the RTC clock
(fRTCCLK).
The shadow registers are reset by system reset.
complete (see Programming the wakeup timer), the timer starts counting
down.When the wakeup function is enabled, the down-counting remains active in
low power modes. In addition, when it reaches 0, the WUTF flag is set in the
RTC_ISR register, and the wakeup counter is automatically reloaded with its
reload value (RTC_WUTR register value).
The WUTF flag must then be cleared by software.
When the periodic wakeup interrupt is enabled by setting the WUTIE bit in the RTC_CR2
register, it can exit the device from low power modes.
The periodic wakeup flag can be routed to the RTC_ALARM output provided it has been
enabled through bits OSEL[1:0] of RTC_CR register. RTC_ALARM polarity can be
configured through the POL bit in the RTC_CR register.
System reset, as well as low power modes (Sleep, Stop and Standby) have no influence on
the wakeup timer.
factor. Even if only one of the two fields needs to be changed, 2 separate write
accesses must be performed to the RTC_PRER register.
4. Load the initial time and date values in the shadow registers (RTC_TR and RTC_DR),
and configure the time format (12 or 24 hours) through the FMT bit in the RTC_CR
register.
5. Exit the initialization mode by clearing the INIT bit. The actual calendar counter value is
then automatically loaded and the counting restarts after 4 RTCCLK clock cycles.
When the initialization sequence is complete, the calendar starts counting.
Note: After a system reset, the application can read the INITS flag in the RTC_ISR register to
check if the calendar has been initialized or not. If this flag equals 0, the calendar has not
been initialized since the year field is set at its backup domain reset default value (0x00).
To read the calendar after initialization, the software must first check that the RSF flag is set
in the RTC_ISR register.
When the BYPSHAD control bit is set in the RTC_CR register (bypass shadow
registers)
Reading the calendar registers gives the values from the calendar counters directly, thus
eliminating the need to wait for the RSF bit to be set. This is especially useful after exiting
from low power modes (STOP or Standby), since the shadow registers are not updated
during these modes.
When the BYPSHAD bit is set to 1, the results of the different registers might not be
coherent with each other if an RTCCLK edge occurs between two read accesses to the
registers. Additionally, the value of one of the registers may be incorrect if an RTCCLK edge
occurs during the read operation. The software must read all the registers twice, and then
compare the results to confirm that the data is coherent and correct. Alternatively, the
software can just compare the two results of the least-significant calendar register.
Note: While BYPSHAD=1, instructions which read the calendar registers require one extra APB
cycle to complete.
When positive calibration is enabled (DCS = ‘0’), 2 ck_apre cycles are added every minute
(around 15360 ck_apre cycles) for 2xDC minutes. This causes the calendar to be updated
sooner, thereby adjusting the effective RTC frequency to be a bit higher.
When negative calibration is enabled (DCS = ‘1’), 1 ck_apre cycle is removed every minute
(around 15360 ck_apre cycles) for 2xDC minutes. This causes the calendar to be updated
later, thereby adjusting the effective RTC frequency to be a bit lower.
DC is configured through bits DC[4:0] of RTC_CALIBR register. This number ranges from 0
to 31 corresponding to a time interval (2xDC) ranging from 0 to 62.
The coarse digital calibration can be configured only in initialization mode, and starts when
the INIT bit is cleared. The full calibration cycle lasts 64 minutes. The first 2xDC minutes of
the 64 -minute cycle are modified as just described.
Negative calibration can be performed with a resolution of about 2 ppm while positive
calibration can be performed with a resolution of about 4 ppm. The maximum calibration
ranges from -63 ppm to 126 ppm.
The calibration can be performed either on the LSE or on the HSE clock.
Caution: Digital calibration may not work correctly if PREDIV_A < 6.
The smooth calibration register (RTC_CALR) specifies the number of RTCCLK clock cycles
to be masked during the 32-second cycle:
• Setting the bit CALM[0] to 1 causes exactly one pulse to be masked during the 32-
second cycle.
• Setting CALM[1] to 1 causes two additional cycles to be masked
• Setting CALM[2] to 1 causes four additional cycles to be masked
• and so on up to CALM[8] set to 1 which causes 256 clocks to be masked.
Note: CALM[8:0] (RTC_CALRx) specifies the number of RTCCLK pulses to be masked during the
32-second cycle. Setting the bit CALM[0] to ‘1’ causes exactly one pulse to be masked
during the 32-second cycle at the moment when cal_cnt[19:0] is 0x80000; CALM[1]=1
causes two other cycles to be masked (when cal_cnt is 0x40000 and 0xC0000); CALM[2]=1
causes four other cycles to be masked (cal_cnt = 0x20000/0x60000/0xA0000/ 0xE0000);
and so on up to CALM[8]=1 which causes 256 clocks to be masked (cal_cnt = 0xXX800).
While CALM allows the RTC frequency to be reduced by up to 487.1 ppm with fine
resolution, the bit CALP can be used to increase the frequency by 488.5 ppm. Setting CALP
to ‘1’ effectively inserts an extra RTCCLK pulse every 211 RTCCLK cycles, which means
that 512 clocks are added during every 32-second cycle.
Using CALM together with CALP, an offset ranging from -511 to +512 RTCCLK cycles can
be added during the 32-second cycle, which translates to a calibration range of -487.1 ppm
to +488.5 ppm with a resolution of about 0.954 ppm.
The formula to calculate the effective calibrated frequency (FCAL) given the input frequency
(FRTCCLK) is as follows:
FCAL = FRTCCLK x [1 + (CALP x 512 - CALM) / (220 + CALM - CALP x 512)]
Re-calibration on-the-fly
The calibration register (RTC_CALR) can be updated on-the-fly while RTC_ISR/INITF=0, by
using the follow process:
1. Poll the RTC_ISR/RECALPF (re-calibration pending flag).
2. If it is set to 0, write a new value to RTC_CALR, if necessary. RECALPF is then
automatically set to 1
3. Within three ck_apre cycles after the write operation to RTC_CALR, the new calibration
settings take effect.
If a new timestamp event is detected while the timestamp flag (TSF) is already set, the
timestamp overflow flag (TSOVF) flag is set and the timestamp registers (RTC_TSTR and
RTC_TSDR) maintain the results of the previous event.
Note: TSF is set 2 ck_apre cycles after the timestamp event occurs due to synchronization
process.
There is no delay in the setting of TSOVF. This means that if two timestamp events are
close together, TSOVF can be seen as '1' while TSF is still '0'. As a consequence, it is
recommended to poll TSOVF only after TSF has been set.
Caution: If a timestamp event occurs immediately after the TSF bit is supposed to be cleared, then
both TSF and TSOVF bits are set. To avoid masking a timestamp event occurring at the
same moment, the application must not write ‘0’ into TSF bit unless it has already read it to
‘1’.
Optionally, a tamper event can cause a timestamp to be recorded. See the description of the
TAMPTS control bit in Section 25.6.17: RTC tamper and alternate function configuration
register (RTC_TAFCR). If the timestamp event is on the same pin as a tamper event
configured in filtered mode (TAMPFLT set to a non-zero value), the timestamp on tamper
detection event mode must be selected by setting TAMPTS='1' in RTC_TAFCR register.
No effect
Sleep
RTC interrupts cause the device to exit the Sleep mode.
The RTC remains active when the RTC clock source is LSE or LSI. RTC alarm, RTC
Stop tamper event, RTC time stamp event, and RTC Wakeup cause the device to exit the Stop
mode.
The RTC remains active when the RTC clock source is LSE or LSI. RTC alarm, RTC
Standby tamper event, RTC time stamp event, and RTC Wakeup cause the device to exit the
Standby mode.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. PM HT[1:0] HU[3:0]
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. MNT[2:0] MNU[3:0] Res. ST[2:0] SU[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. YT[3:0] YU[3:0]
rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
WDU[2:0] MT MU[3:0] Res. Res. DT[1:0] DU[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. COE OSEL[1:0] POL COSEL BKP SUB1H ADD1H
rw rw rw rw rw rw w w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TSIE WUTIE ALRBIE ALRAIE TSE WUTE ALRBE ALRAE DCE FMT BYPSHAD REFCKON TSEDGE WUCKSEL[2:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: WUT = Wakeup unit counter value. WUT = (0x0000 to 0xFFFF) + 0x10000 added when
WUCKSEL[2:1 = 11].
Bits 7, 6 and 4 of this register can be written in initialization mode only (RTC_ISR/INITF = 1).
Bits 2 to 0 of this register can be written only when RTC_CR WUTE bit = 0 and RTC_ISR
WUTWF bit = 1.
It is recommended not to change the hour during the calendar hour increment as it could
mask the incrementation of the calendar hour.
ADD1H and SUB1H changes are effective in the next second.
This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. RECALPF
r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res TAMP1F TSOVF TSF WUTF ALRBF ALRAF INIT INITF RSF INITS SHPF WUT WF ALRB WF ALRA WF
rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rc_w0 rw r rc_w0 r r r r r
Note: The ALRAF, ALRBF, WUTF and TSF bits are cleared 2 APB clock cycles after programming
them to 0.
This register is write protected (except for RTC_ISR[13:8] bits). The write access procedure
is described in RTC register write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. PREDIV_A[6:0]
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. PREDIV_S[14:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: This register must be written in initialization mode only. The initialization must be performed
in two separate write accesses. Refer to Calendar initialization and configuration
This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
WUT[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: This register can be written only when WUTWF is set to 1 in RTC_ISR.
This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. DCS Res. Res. DC[4:0]
rw rw rw rw rw rw
Note: This register can be written in initialization mode only (RTC_ISR/INITF = ‘1’).
This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MSK4 WDSEL DT[1:0] DU[3:0] MSK3 PM HT[1:0] HU[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MSK2 MNT[2:0] MNU[3:0] MSK1 ST[2:0] SU[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: This register can be written only when ALRAWF is set to 1 in RTC_ISR, or in initialization
mode.
This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MSK4 WDSEL DT[1:0] DU[3:0] MSK3 PM HT[1:0] HU[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MSK2 MNT[2:0] MNU[3:0] MSK1 ST[2:0] SU[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: This register can be written only when ALRBWF is set to 1 in RTC_ISR, or in initialization
mode.
This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. KEY
w w w w w w w w
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ADD1S Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
w
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. SUBFS[14:0]
w w w w w w w w w w w w w w w
Note: This register is write protected. The write access procedure is described in RTC register
write protection
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. PM HT[1:0] HU[3:0]
r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. MNT[2:0] MNU[3:0] Res. ST[2:0] SU[3:0]
r r r r r r r r r r r r r r
Note: The content of this register is valid only when TSF is set to 1 in RTC_ISR. It is cleared when
TSF bit is reset.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
WDU[1:0] MT MU[3:0] Res. Res. DT[1:0] DU[3:0]
r r r r r r r r r r r r r r
Note: The content of this register is valid only when TSF is set to 1 in RTC_ISR. It is cleared when
TSF bit is reset.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SS[15:0]
r r r r r r r r r r r r r r r r
Note: The content of this register is valid only when RTC_ISR/TSF is set. It is cleared when the
RTC_ISR/TSF bit is reset.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CALP CALW8 CALW16 Res. Res. Res. Res. CALM[8:0]
rw rw rw r r r r rw rw rw rw rw rw rw rw rw
Note: This register is write protected. The write access procedure is described in RTC register
write protection.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ALARMOUT TSIN TAMP1I
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
TYPE SEL NSEL
rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TAMP TAMP TAMP TAMP
TAMPTS Res. Res. Res. Res. TAMPIE TAMP1TRG TAMP1E
PUDIS PRCH[1:0] FLT[1:0] FREQ[2:0]
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. MASKSS[3:0] Res. Res. Res. Res. Res. Res. Res. Res.
rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. SS[14:0]
rw rw rw rw rw rw rw rw rw rw rw rw w rw rw
Note: This register can be written only when ALRAE is reset in RTC_CR register, or in initialization
mode.
This register is write protected. The write access procedure is described in RTC register
write protection on page 748
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. MASKSS[3:0] Res. Res. Res. Res. Res. Res. Res. Res.
r r r r rw rw rw rw r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. SS[14:0]
r rw rw rw rw rw rw rw rw rw rw rw rw w rw rw
Note: This register can be written only when ALRBIE is reset in RTC_CR register, or in
initialization mode.
This register is write protected.The write access procedure is described in RTC register
write protection
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BKP[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BKP[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw w rw rw
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
HT
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
PM
DT
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
MT
TSEDGE
ALRBIE
ALRAIE
COSEL
ADD1H
SUB1H
ALRBE
ALRAE
WUTIE
WUTE
OSEL WCKSEL
TSIE
COE
DCE
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FMT
POL
BKP
TSE
RTC_CR
0x08 [1:0] [2:0]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ALRBWF
ALRAWF
TAMP1F
WUTWF
TSOVF
ALRBF
ALRAF
WUTF
SHPF
INITS
INITF
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RSF
TSF
INIT
RTC_ISR
0x0C
Reset value 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RTC_WUTR WUT[15:0]
0x14
Reset value 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
DCS
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RTC_CALIBR DC[4:0]
0x18
Reset value 0 0 0 0 0 0
0x3C
0x2C
0x1C
Offset
780/1324
RTC_
RTC_
RTC_SSR
RTC_WPR
Register
RTC_TSTR
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
RTC_ CALR
ALRMBSSR
ALRMASSR
RTC_TAFCR
RTC_TSSSR
RTC_SHIFTR
RTC_ALRMBR
RTC_ALRMAR
0
0
0
Res. Res. Res. Res. Res. Res. ADD1S Res. Res. MSK4 MSK4 31
Real-time clock (RTC)
0
0 30
Res. Res. Res. Res. Res. Res. Res. Res. Res. WDSEL WDSEL
0
0
[1:0]
[1:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
MASKSS[3:0]
MASKSS[3:0]
Res. Res. Res. Res. Res. Res. Res. 24
0
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. MSK3 MSK3 23
0
0
0
0
0
0
[1:0]
[1:0]
0
0
0
0
0
0
0
0
0
0
Res. Res. ALARMOUTTYPE Res. Res. Res. Res. Res. 18
RM0430 Rev 8
0
0
0
0
Res. Res. TSINSEL Res. Res. Res. Res. Res. 17
HU[3:0]
HU[3:0]
HU[3:0]
0
0
0
0
Res. Res. TAMP1INSEL Res. Res. Res. Res. Res. 16
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
CALW8 Res. 14
TAMPPRCH[1:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
MNT[2:0]
MNT[2:0]
Res. Res. 12
TAMPFLT[1:0] 0
0
0
0
0
0
0
0
0
Res. Res. 11
0
0
0
0
0
0
0
0
0
Res. Res. 10
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Table 138. RTC register map and reset values (continued)
Res. 8
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
SS[14:0]
SS[14:0]
Res. 6
SUBFS[14:0]
0
0
0
0
0
0
0
0
0
0
Res. 5
ST[2:0]
ST[2:0]
ST[2:0]
0
0
0
0
0
0
0
0
0
0
0
Res. 4
0
0
0
0
0
0
0
0
0
0
0
Res. 3
CALM[8:0]
KEY[7:0]
0
0
0
0
0
0
0
0
0
0
0
TAMPIE 2
0
0
0
0
0
0
0
0
0
0
0
TAMP1ETRG 1
SU[3:0]
SU[3:0]
SU[3:0]
0
0
0
0
0
0
0
0
0
0
0
RM0430
TAMP1E 0
RM0430 Real-time clock (RTC)
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
RTC_BKP0R BKP[31:0]
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26.1 Introduction
The I2C (inter-integrated circuit) bus interface handles communications between the
microcontroller and the serial I2C bus. It provides multimaster capability, and controls all I2C
bus-specific sequencing, protocol, arbitration and timing. It supports Standard-mode (Sm),
Fast-mode (Fm) and Fast-mode Plus (Fm+).
It is also SMBus (system management bus) and PMBus (power management bus)
compatible.
DMA can be used to reduce CPU overload.
The following additional features are also available depending on the product
implementation (see Section 26.3: FMPI2C implementation):
• SMBus specification rev 3.0 compatibility:
– Hardware PEC (Packet Error Checking) generation and verification with ACK
control
– Command and data acknowledge control
– Address resolution protocol (ARP) support
– Host and Device support
– SMBus alert
– Timeouts and idle condition detection
• PMBus rev 1.3 standard compatibility
• Independent clock: a choice of independent clock sources allowing the FMPI2C
communication speed to be independent from the PCLK reprogramming
,&&/.
,FBNHUBFN
'DWDFRQWURO
'LJLWDO $QDORJ
6KLIWUHJLVWHU QRLVH QRLVH *3,2
ILOWHU ,&B6'$
ILOWHU ORJLF
60%86
3(&
JHQHUDWLRQ
FKHFN
:DNHXS
RQ
DGGUHVV
PDWFK &ORFNFRQWURO
0DVWHUFORFN
JHQHUDWLRQ 'LJLWDO $QDORJ
QRLVH QRLVH
6ODYHFORFN *3,2 ,&B6&/
ILOWHU ILOWHU
VWUHWFKLQJ ORJLF
60%XV
7LPHRXW
FKHFN
60%XV$OHUW
FRQWURO ,&B60%$
VWDWXV
3&/.
,FBSFON 5HJLVWHUV
$3%EXV
06Y9
The FMPI2C is clocked by an independent clock source which allows to the FMPI2C to
operate independently from the PCLK frequency.
This independent clock source can be selected from the following clock sources:
• PCLK1: APB1 clock (default value)
• HSI: high speed internal oscillator
• SYSCLK: system clock
Refer to Section 6: Reset and clock control (RCC) for STM32F413/423 for more details.
Communication flow
In Master mode, the FMPI2C interface initiates a data transfer and generates the clock
signal. A serial data transfer always begins with a START condition and ends with a STOP
condition. Both START and STOP conditions are generated in master mode by software.
In Slave mode, the interface is capable of recognizing its own addresses (7 or 10-bit), and
the General Call address. The General Call address detection can be enabled or disabled
by software. The reserved SMBus addresses can also be enabled by software.
Data and addresses are transferred as 8-bit bytes, MSB first. The first byte(s) following the
START condition contain the address (one in 7-bit mode, two in 10-bit mode). The address
is always transmitted in Master mode.
A 9th clock pulse follows the 8 clock cycles of a byte transfer, during which the receiver must
send an acknowledge bit to the transmitter. Refer to the following figure.
6'$
06% $&.
6&/
6WDUW 6WRS
FRQGLWLRQ FRQGLWLRQ
069
Acknowledge can be enabled or disabled by software. The FMPI2C interface addresses can
be selected by software.
Noise filters
Before enabling the FMPI2C peripheral by setting the PE bit in FMPI2C_CR1 register, the
user must configure the noise filters, if needed. By default, an analog noise filter is present
on the SDA and SCL inputs. This analog filter is compliant with the I2C specification which
requires the suppression of spikes with a pulse width up to 50 ns in Fast-mode and Fast-
mode Plus. The user can disable this analog filter by setting the ANFOFF bit, and/or select a
digital filter by configuring the DNF[3:0] bit in the FMPI2C_CR1 register.
When the digital filter is enabled, the level of the SCL or the SDA line is internally changed
only if it remains stable for more than DNF x FMPI2CCLK periods. This allows to suppress
spikes with a programmable length of 1 to 15 FMPI2CCLK periods.
Caution: Changing the filter configuration is not allowed when the FMPI2C is enabled.
FMPI2C timings
The timings must be configured in order to guarantee a correct data hold and setup time,
used in master and slave modes. This is done by programming the PRESC[3:0],
SCLDEL[3:0] and SDADEL[3:0] bits in the FMPI2C_TIMINGR register.
The STM32CubeMX tool calculates and provides the I2C_TIMINGR content in the I2C
configuration window
W6<1& 6'$'(/6&/VWUHWFKHGORZE\WKH,&
6'$RXWSXWGHOD\
6&/
6'$
W+''$7
'DWDKROGWLPHLQFDVHRIWUDQVPLVVLRQWKHGDWDLVVHQWRQ6'$RXWSXWDIWHU
WKH6'$'(/GHOD\LILWLVDOUHDG\DYDLODEOHLQ,&B7;'5
d^dhWd/D
6&/'(/
6&/VWUHWFKHGORZE\WKH,&
6&/
6'$
W68'$7
6867$
'DWDVHWXSWLPHLQFDVHRIWUDQVPLVVLRQWKH6&/'(/FRXQWHUVWDUWV
ZKHQWKHGDWDLVVHQWRQ6'$RXWSXW 06Y9
069
• When the SCL falling edge is internally detected, a delay is inserted before sending
SDA output. This delay is tSDADEL = SDADEL x tPRESC + tI2CCLK where tPRESC = (PRESC+1)
x tI2CCLK.
TSDADEL impacts the hold time tHD;DAT.
In order to bridge the undefined region of the SDA transition (rising edge usually worst
case), the user must program SCLDEL in such a way that:
{[tr (max) + tSU;DAT (min)] / [(PRESC+1)] x tI2CCLK]} - 1 <= SCLDEL
Refer to Table 140: I2C-SMBUS specification data setup and hold times for tr and tSU;DAT
standard values.
The SDA and SCL transition time values to be used are the ones in the application. Using
the maximum values from the standard increases the constraints for the SDADEL and
SCLDEL calculation, but ensures the feature whatever the application.
Note: At every clock pulse, after SCL falling edge detection, the I2C master or slave stretches SCL
low during at least [(SDADEL+SCLDEL+1) x (PRESC+1) + 1] x tI2CCLK, in both transmission
and reception modes. In transmission mode, in case the data is not yet written in I2C_TXDR
when SDADEL counter is finished, the I2C keeps on stretching SCL low until the next data
is written. Then new data MSB is sent on SDA output, and SCLDEL counter starts,
continuing stretching SCL low to guarantee the data setup time.
If NOSTRETCH=1 in slave mode, the SCL is not stretched. Consequently the SDADEL
must be programmed in such a way to guarantee also a sufficient setup time.
Additionally, in master mode, the SCL clock high and low levels must be configured by
programming the PRESC[3:0], SCLH[7:0] and SCLL[7:0] bits in the FMPI2C_TIMINGR
register.
• When the SCL falling edge is internally detected, a delay is inserted before releasing
the SCL output. This delay is tSCLL = (SCLL+1) x tPRESC where tPRESC = (PRESC+1) x
tI2CCLK.
tSCLL impacts the SCL low time tLOW .
• When the SCL rising edge is internally detected, a delay is inserted before forcing the
SCL output to low level. This delay is tSCLH = (SCLH+1) x tPRESC where tPRESC =
(PRESC+1) x tI2CCLK. tSCLH impacts the SCL high time tHIGH .
,QLWLDOVHWWLQJV
&OHDU3(ELWLQ)03,&B&5
&RQILJXUH$1)2))DQG'1)>@LQ
)03,&B&5
&RQILJXUH35(6&>@
6'$'(/>@6&/'(/>@6&/+>@
6&//>@LQ)03,&B7,0,1*5
&RQILJXUH12675(7&+LQ)03,&B&5
6HW3(ELWLQ)03,&B&5
(QG
D^ǀϯϱϵϲϮsϭ
Reception
The SDA input fills the shift register. After the 8th SCL pulse (when the complete data byte is
received), the shift register is copied into FMPI2C_RXDR register if it is empty (RXNE=0). If
RXNE=1, meaning that the previous received data byte has not yet been read, the SCL line
is stretched low until FMPI2C_RXDR is read. The stretch is inserted between the 8th and
9th SCL pulse (before the Acknowledge pulse).
<ƉƵůƐĞ <ƉƵůƐĞ
ůĞŐĞŶĚ͗
^> ^>
ƐƚƌĞƚĐŚ
^ŚŝĨƚƌĞŐŝƐƚĞƌ dždž ĚĂƚĂϭ dždž ĚĂƚĂϮ dždž
ZyE
ƌĚĚĂƚĂϬ ƌĚĚĂƚĂϭ
D^ǀϯϱϵϳϲsϭ
Transmission
If the FMPI2C_TXDR register is not empty (TXE=0), its content is copied into the shift
register after the 9th SCL pulse (the Acknowledge pulse). Then the shift register content is
shifted out on SDA line. If TXE=1, meaning that no data is written yet in FMPI2C_TXDR,
SCL line is stretched low until FMPI2C_TXDR is written. The stretch is done after the 9th
SCL pulse.
<ƉƵůƐĞ <ƉƵůƐĞ
ůĞŐĞŶĚ͗
^>
^>
ƐƚƌĞƚĐŚ
ĚĂƚĂϮ
ĚĂƚĂϭ
^ŚŝĨƚƌĞŐŝƐƚĞƌ dždž dždž dždž
dy
ǁƌĚĂƚĂϭ ǁƌĚĂƚĂϮ
D^ǀϯϱϵϳϳsϭ
By default, the slave uses its clock stretching capability, which means that it stretches the
SCL signal at low level when needed, in order to perform software actions. If the master
does not support clock stretching, the FMPI2C must be configured with NOSTRETCH=1 in
the FMPI2C_CR1 register.
After receiving an ADDR interrupt, if several addresses are enabled the user must read the
ADDCODE[6:0] bits in the FMPI2C_ISR register in order to check which address matched.
DIR flag must also be checked in order to know the transfer direction.
6ODYH
LQLWLDOL]DWLRQ
,QLWLDOVHWWLQJV
&OHDU^2$(12$(1`LQ)03,&B2$5DQG)03,&B2$5
&RQILJXUH^2$>@2$02'(2$(1
2$>@2$06.>@2$(1*&(1`
&RQILJXUH6%&LQ)03,&B&5
(QDEOHLQWHUUXSWVDQGRU
'0$LQ)03,&B&5
(QG
6%&PXVWEHVHWWRVXSSRUW60%XVIHDWXUHV
D^ǀϯϱϵϲϯsϭ
Slave transmitter
A transmit interrupt status (TXIS) is generated when the FMPI2C_TXDR register becomes
empty. An interrupt is generated if the TXIE bit is set in the FMPI2C_CR1 register.
The TXIS bit is cleared when the FMPI2C_TXDR register is written with the next data byte
to be transmitted.
When a NACK is received, the NACKF bit is set in the FMPI2C_ISR register and an
interrupt is generated if the NACKIE bit is set in the FMPI2C_CR1 register. The slave
automatically releases the SCL and SDA lines in order to let the master perform a STOP or
a RESTART condition. The TXIS bit is not set when a NACK is received.
When a STOP is received and the STOPIE bit is set in the FMPI2C_CR1 register, the
STOPF flag is set in the FMPI2C_ISR register and an interrupt is generated. In most
applications, the SBC bit is usually programmed to ‘0’. In this case, If TXE = 0 when the
slave address is received (ADDR=1), the user can choose either to send the content of the
FMPI2C_TXDR register as the first data byte, or to flush the FMPI2C_TXDR register by
setting the TXE bit in order to program a new data byte.
In Slave Byte Control mode (SBC=1), the number of bytes to be transmitted must be
programmed in NBYTES in the address match interrupt subroutine (ADDR=1). In this case,
the number of TXIS events during the transfer corresponds to the value programmed in
NBYTES.
Caution: When NOSTRETCH=1, the SCL clock is not stretched while the ADDR flag is set, so the
user cannot flush the FMPI2C_TXDR register content in the ADDR subroutine, in order to
program the first data byte. The first data byte to be sent must be previously programmed in
the FMPI2C_TXDR register:
• This data can be the data written in the last TXIS event of the previous transmission
message.
• If this data byte is not the one to be sent, the FMPI2C_TXDR register can be flushed by
setting the TXE bit in order to program a new data byte. The STOPF bit must be
cleared only after these actions, in order to guarantee that they are executed before the
first data transmission starts, following the address acknowledge.
If STOPF is still set when the first data transmission starts, an underrun error will be
generated (the OVR flag is set).
If a TXIS event is needed, (Transmit Interrupt or Transmit DMA request), the user must
set the TXIS bit in addition to the TXE bit, in order to generate a TXIS event.
6ODYH
WUDQVPLVVLRQ
6ODYHLQLWLDOL]DWLRQ
1R
)03,&B,65$''5
"
<HV
6&/
VWUHWFKHG
5HDG$''&2'(DQG',5LQ)03,&B,65
2SWLRQDO6HW)03,&B,657;(
6HW)03,&B,&5$''5&)
1R
)03,&B,657;,6
"
<HV
:ULWH)03,&B7;'57;'$7$
D^ǀϯϱϵϲϰsϭ
6ODYH
WUDQVPLVVLRQ
6ODYHLQLWLDOL]DWLRQ
1R
1R
)03,&B,657;,6 )03,&B,656723)
" "
<HV <HV
:ULWH)03,&B7;'57;'$7$ 2SWLRQDO6HW)03,&B,657;(
DQG)03,&B,657;,6
6HW)03,&B,&56723&)
D^ǀϯϱϵϲϱsϭ
OHJHQG
([DPSOH)03,&VODYHWUDQVPLWWHUE\WHVZLWKVWGDWDIOXVKHG
12675(7&+ WUDQVPLVVLRQ
$''5 7;,6 7;,6 7;,6 7;,6 UHFHSWLRQ
7;(
(9$''5,65FKHFN$''&2'(DQG',5VHW7;(VHW$''5&)
(97;,6,65ZUGDWD
(97;,6,65ZUGDWD
(97;,6,65ZUGDWD
(97;,6,65ZUGDWD QRWVHQW
OHJHQG
([DPSOH)03,&VODYHWUDQVPLWWHUE\WHVZLWKRXWVWGDWDIOXVK
12675(7&+ WUDQVPLVVLRQ
$''5 7;,6 7;,6 7;,6 UHFHSWLRQ
6&/VWUHWFK
6 $GGUHVV $ GDWD $ GDWD $ GDWD 1$ 3
7;(
(9$''5,65FKHFN$''&2'(DQG',5VHW$''5&)
(97;,6,65ZUGDWD
(97;,6,65ZUGDWD
(97;,6,65ZUGDWD QRWVHQW
OHJHQG
([DPSOH)03,&VODYHWUDQVPLWWHUE\WHV12675(7&+
WUDQVPLVVLRQ
7;,6 7;,6 7;,6 6723)
UHFHSWLRQ
7;(
(9ZUGDWD
(97;,6,65ZUGDWD
(97;,6,65ZUGDWD
(97;,6,65ZUGDWD QRWVHQW
(96723),65 RSWLRQDOVHW7;(DQG7;,6 VHW6723&)
069
Slave receiver
RXNE is set in FMPI2C_ISR when the FMPI2C_RXDR is full, and generates an interrupt if
RXIE is set in FMPI2C_CR1. RXNE is cleared when FMPI2C_RXDR is read.
When a STOP is received and STOPIE is set in FMPI2C_CR1, STOPF is set in
FMPI2C_ISR and an interrupt is generated.
Figure 265. Transfer sequence flowchart for slave receiver with NOSTRETCH=0
6ODYHUHFHSWLRQ
6ODYHLQLWLDOL]DWLRQ
1R
)03,&B,65$''5
"
<HV
6&/
VWUHWFKHG
5HDG$''&2'(DQG',5LQ)03,&B,65
6HW)03,&B,&5$''5&)
1R
)03,&B,655;1(
"
<HV
:ULWH)03,&B5;'55;'$7$
D^ǀϯϱϵϲϲsϭ
Figure 266. Transfer sequence flowchart for slave receiver with NOSTRETCH=1
6ODYHUHFHSWLRQ
6ODYHLQLWLDOL]DWLRQ
1R
1R
)03,&B,655;1( )03,&B,656723)
" "
<HV <HV
5HDG)03,&B5;'55;'$7$ 6HW)03,&B,&56723&)
D^ǀϯϱϵϲϳsϭ
6&/VWUHWFK
4 $GGUHVV $ GDWD $ GDWD $ GDWD $
5;1(
(9$''5,65FKHFN$''&2'(DQG',5VHW$''5&)
(95;1(,65UGGDWD
(95;1(,65UGGDWD
(95;1(,65UGGDWD
([DPSOH)03,&VODYHUHFHLYHUE\WHV12675(7&+ OHJHQG
WUDQVPLVVLRQ
5;1( 5;1( 5;1( UHFHSWLRQ
5;1(
(95;1(,65UGGDWD
(95;1(,65UGGDWD
(95;1(,65UGGDWD
(96723),65VHW6723&)
069
6&/PDVWHUFORFNJHQHUDWLRQ
6&/KLJKOHYHOGHWHFWHG
6&/+FRXQWHUVWDUWV
W6<1& 6&/+
6&//
W6<1&
6&/
6&/ORZOHYHOGHWHFWHG
6&/UHOHDVHG
6&//FRXQWHUVWDUWV
6&/GULYHQORZ
6&/PDVWHUFORFNV\QFKURQL]DWLRQ
6&// 6&//
6&/GULYHQORZE\ 6&/GULYHQORZE\
DQRWKHUGHYLFH DQRWKHUGHYLFH
6&/ORZOHYHOGHWHFWHG
6&//FRXQWHUVWDUWV
6&/ORZOHYHOGHWHFWHG
6&//FRXQWHUVWDUWV 6&/UHOHDVHG
069
Caution: In order to be I2C or SMBus compliant, the master clock must respect the timings given
below:
Note: SCLL is also used to generate the tBUF and tSU:STA timings.
SCLH is also used to generate the tHD:STA and tSU:STO timings.
Refer to Section 26.4.9: FMPI2C_TIMINGR register configuration examples for examples of
FMPI2C_TIMINGR settings vs. FMPI2CCLK frequency.
master will re-launch automatically the slave address transmission until ACK is received. In
this case ADDRCF must be set if a NACK is received from the slave, in order to stop
sending the slave address.
If the FMPI2C is addressed as a slave (ADDR=1) while the START bit is set, the FMPI2C
switches to slave mode and the START bit is cleared when the ADDRCF bit is set.
Note: The same procedure is applied for a Repeated Start condition. In this case BUSY=1.
0DVWHU
LQLWLDOL]DWLRQ
,QLWLDOVHWWLQJV
(QDEOHLQWHUUXSWVDQGRU'0$LQ)03,&B&5
(QG
D^ǀϯϱϵϲϴsϭ
:ULWH 5HDG
D^ǀϰϭϬϲϲsϭ
• If the master addresses a 10-bit address slave, transmits data to this slave and then
reads data from the same slave, a master transmission flow must be done first. Then a
repeated start is set with the 10 bit slave address configured with HEAD10R=1. In this
case the master sends this sequence: ReStart + Slave address 10-bit header Read.
;;
6ODYHDGGUHVV 6ODYHDGGUHVV
6 5: $ $ '$7$ $ '$7$ $$
VWELWV QGE\WH
:ULWH
;;
6ODYHDGGUHVV
6U 5: $ '$7$ $ '$7$ $ 3
VWELWV
5HDG
D^ϭϵϴϮϯsϭ
Master transmitter
In the case of a write transfer, the TXIS flag is set after each byte transmission, after the 9th
SCL pulse when an ACK is received.
A TXIS event generates an interrupt if the TXIE bit is set in the FMPI2C_CR1 register. The
flag is cleared when the FMPI2C_TXDR register is written with the next data byte to be
transmitted.
The number of TXIS events during the transfer corresponds to the value programmed in
NBYTES[7:0]. If the total number of data bytes to be sent is greater than 255, reload mode
must be selected by setting the RELOAD bit in the FMPI2C_CR2 register. In this case,
when NBYTES data have been transferred, the TCR flag is set and the SCL line is stretched
low until NBYTES[7:0] is written to a non-zero value.
The TXIS flag is not set when a NACK is received.
• When RELOAD=0 and NBYTES data have been transferred:
– In automatic end mode (AUTOEND=1), a STOP is automatically sent.
– In software end mode (AUTOEND=0), the TC flag is set and the SCL line is
stretched low in order to perform software actions:
A RESTART condition can be requested by setting the START bit in the
FMPI2C_CR2 register with the proper slave address configuration, and number of
bytes to be transferred. Setting the START bit clears the TC flag and the START
condition is sent on the bus.
A STOP condition can be requested by setting the STOP bit in the FMPI2C_CR2
register. Setting the STOP bit clears the TC flag and the STOP condition is sent on
the bus.
• If a NACK is received: the TXIS flag is not set, and a STOP condition is automatically
sent after the NACK reception. the NACKF flag is set in the FMPI2C_ISR register, and
an interrupt is generated if the NACKIE bit is set.
Figure 272. Transfer sequence flowchart for FMPI2C master transmitter for N≤255
bytes
0DVWHU
WUDQVPLVVLRQ
0DVWHULQLWLDOL]DWLRQ
1%<7(6 1
$872(1' IRU5(67$57IRU6723
&RQILJXUHVODYHDGGUHVV
6HW)03,&B&567$57
1R
1R
)03,&B,651$&.) )03,&B,657;,6
" "
<HV <HV
:ULWH)03,&B7;'5
(QG
1%<7(6 1R
WUDQVPLWWHG"
<HV
<HV
)03,&B,657&
"
6HW)03,&B&567$57
1R ZLWKVODYHDGGHVV1%<7(6
(QG
D^ǀϯϱϵϲϵsϭ
Figure 273. Transfer sequence flowchart for FMPI2C master transmitter for N>255
bytes
0DVWHU
WUDQVPLVVLRQ
0DVWHULQLWLDOL]DWLRQ
1R
1R
)03,&B,651$&.) )03,&B,657;,6
" "
<HV <HV
:ULWH)03,&B7;'5
(QG
1R
1%<7(6
WUDQVPLWWHG "
<HV
<HV
)03,&B,657&
"
6HW)03,&B&567$57
ZLWKVODYHDGGHVV 1R
1%<7(6
)03,&B,657&5
"
<HV
,)1
1%<7(6 11 5(/2$'
$872(1' IRU5(67$57IRU6723
(QG
(/6(
1%<7(6 [))1 1
5(/2$'
06Y9
([DPSOH)03,&PDVWHUWUDQVPLWWHUE\WHVDXWRPDWLFHQGPRGH 6723
OHJHQG
UHFHSWLRQ
6 $GGUHVV $ GDWD $ GDWD $ 3
6&/VWUHWFK
,1,7 (9 (9
7;(
1%<7(6 [[
([DPSOH)03,&PDVWHUWUDQVPLWWHUE\WHVVRIWZDUHHQGPRGH 5(67$57
WUDQVPLVVLRQ
6 $GGUHVV $ GDWD $ GDWD $ 5H6 $GGUHVV
UHFHSWLRQ
1%<7(6 [[
069
Master receiver
In the case of a read transfer, the RXNE flag is set after each byte reception, after the 8th
SCL pulse. An RXNE event generates an interrupt if the RXIE bit is set in the FMPI2C_CR1
register. The flag is cleared when FMPI2C_RXDR is read.
If the total number of data bytes to be received is greater than 255, reload mode must be
selected by setting the RELOAD bit in the FMPI2C_CR2 register. In this case, when
NBYTES[7:0] data have been transferred, the TCR flag is set and the SCL line is stretched
low until NBYTES[7:0] is written to a non-zero value.
• When RELOAD=0 and NBYTES[7:0] data have been transferred:
– In automatic end mode (AUTOEND=1), a NACK and a STOP are automatically
sent after the last received byte.
– In software end mode (AUTOEND=0), a NACK is automatically sent after the last
received byte, the TC flag is set and the SCL line is stretched low in order to allow
software actions:
A RESTART condition can be requested by setting the START bit in the
FMPI2C_CR2 register with the proper slave address configuration, and number of
bytes to be transferred. Setting the START bit clears the TC flag and the START
condition, followed by slave address, are sent on the bus.
A STOP condition can be requested by setting the STOP bit in the FMPI2C_CR2
register. Setting the STOP bit clears the TC flag and the STOP condition is sent on
the bus.
Figure 275. Transfer sequence flowchart for FMPI2C master receiver for N≤255 bytes
0DVWHUUHFHSWLRQ
0DVWHULQLWLDOL]DWLRQ
1%<7(6 1
$872(1' IRU5(67$57IRU6723
&RQILJXUHVODYHDGGUHVV
6HW)03,&B&567$57
1R
)03,&B,655;1(
"
<HV
5HDG)03,&B5;'5
1%<7(6 1R
UHFHLYHG"
<HV
<HV
)03,&B,657&
"
6HW)03,&B&567$57
1R ZLWKVODYHDGGHVV1%<7(6
(QG
D^ǀϯϱϵϳϭsϭ
Figure 276. Transfer sequence flowchart for FMPI2C master receiver for N >255 bytes
0DVWHUUHFHSWLRQ
0DVWHULQLWLDOL]DWLRQ
1R
)03,&B,655;1(
"
<HV
5HDG)03,&B5;'5
1%<7(6 1R
UHFHLYHG"
<HV
<HV
)03,&B,657&
"
6HW)03,&B&567$57
ZLWKVODYHDGGHVV 1R
1%<7(6
1R
)03,&B,657&5
"
<HV
,)1
1%<7(6 11 5(/2$'
$872(1' IRU5(67$57IRU6723
(/6(
1%<7(6 [))1 1
5(/2$'
(QG
D^ǀϯϱϵϳϮsϭ
([DPSOH)03,&PDVWHUUHFHLYHUE\WHVDXWRPDWLFHQGPRGH 6723
5;1( 5;1(
OHJHQG
UHFHSWLRQ
,1,7 (9 (9
6&/VWUHWFK
1%<7(6 [[
([DPSOH)03,&PDVWHUUHFHLYHUE\WHVVRIWZDUHHQGPRGH 5(67$57
WUDQVPLVVLRQ
6 $GGUHVV $ GDWD $ GDWD 1$ 5H6 $GGUHVV
UHFHSWLRQ
1%<7(6
[[ 1
069
PRESC 1 1 0 0
SCLL 0xC7 0x13 0x9 0x6
tSCLL 200x250 ns = 50 µs 20x250 ns = 5.0 µs 10x125 ns = 1250 ns 7x125 ns = 875 ns
SCLH 0xC3 0xF 0x3 0x3
tSCLH 196x250 ns = 49 µs 16x250 ns = 4.0µs 4x125ns = 500ns 4x125 ns = 500 ns
(1)
tSCL ~100 µs(2) ~10 µs(2) ~2500 ns(3) ~2000 ns(4)
SDADEL 0x2 0x2 0x1 0x0
tSDADEL 2x250 ns = 500 ns 2x250 ns = 500 ns 1x125 ns = 125 ns 0 ns
SCLDEL 0x4 0x4 0x3 0x1
tSCLDEL 5x250 ns = 1250 ns 5x250 ns = 1250 ns 4x125 ns = 500 ns 2x125 ns = 250 ns
1. SCL period tSCL is greater than tSCLL + tSCLH due to SCL internal detection delay. Values provided for tSCL are examples
only.
2. tSYNC1 + tSYNC2 minimum value is 4 x tI2CCLK = 500 ns. Example with tSYNC1 + tSYNC2 = 1000 ns
3. tSYNC1 + tSYNC2 minimum value is 4 x tI2CCLK = 500 ns. Example with tSYNC1 + tSYNC2 = 750 ns
4. tSYNC1 + tSYNC2 minimum value is 4 x tI2CCLK = 500 ns. Example with tSYNC1 + tSYNC2 = 655 ns
PRESC 3 3 1 0
SCLL 0xC7 0x13 0x9 0x4
tSCLL 200 x 250 ns = 50 µs 20 x 250 ns = 5.0 µs 10 x 125 ns = 1250 ns 5 x 62.5 ns = 312.5 ns
SCLH 0xC3 0xF 0x3 0x2
tSCLH 196 x 250 ns = 49 µs 16 x 250 ns = 4.0 µs 4 x 125ns = 500 ns 3 x 62.5 ns = 187.5 ns
(1)
tSCL ~100 µs(2) ~10 µs(2) ~2500 ns(3) ~1000 ns(4)
SDADEL 0x2 0x2 0x2 0x0
tSDADEL 2 x 250 ns = 500 ns 2 x 250 ns = 500 ns 2 x 125 ns = 250 ns 0 ns
SCLDEL 0x4 0x4 0x3 0x2
tSCLDEL 5 x 250 ns = 1250 ns 5 x 250 ns = 1250 ns 4 x 125 ns = 500 ns 3 x 62.5 ns = 187.5 ns
1. SCL period tSCL is greater than tSCLL + tSCLH due to SCL internal detection delay. Values provided for tSCL are examples
only.
2. tSYNC1 + tSYNC2 minimum value is 4 x tI2CCLK = 250 ns. Example with tSYNC1 + tSYNC2 = 1000 ns
3. tSYNC1 + tSYNC2 minimum value is 4 x tI2CCLK = 250 ns. Example with tSYNC1 + tSYNC2 = 750 ns
4. tSYNC1 + tSYNC2 minimum value is 4 x tI2CCLK = 250 ns. Example with tSYNC1 + tSYNC2 = 500 ns
Introduction
The System Management Bus (SMBus) is a two-wire interface through which various
devices can communicate with each other and with the rest of the system. It is based on I2C
principles of operation. SMBus provides a control bus for system and power management
related tasks.
This peripheral is compatible with the SMBUS specification (http://smbus.org).
The System Management Bus Specification refers to three types of devices.
• A slave is a device that receives or responds to a command.
• A master is a device that issues commands, generates the clocks and terminates the
transfer.
• A host is a specialized master that provides the main interface to the system’s CPU. A
host must be a master-slave and must support the SMBus host notify protocol. Only
one host is allowed in a system.
This peripheral can be configured as master or slave device, and also as a host.
Bus protocols
There are eleven possible command protocols for any given device. A device may use any
or all of the eleven protocols to communicate. The protocols are Quick Command, Send
Byte, Receive Byte, Write Byte, Write Word, Read Byte, Read Word, Process Call, Block
Read, Block Write and Block Write-Block Read Process Call. These protocols should be
implemented by the user software.
For more details of these protocols, refer to SMBus specification (http://smbus.org).
SMBus alert
The SMBus ALERT optional signal is supported. A slave-only device can signal the host
through the SMBALERT# pin that it wants to talk. The host processes the interrupt and
simultaneously accesses all SMBALERT# devices through the Alert Response Address
(0b0001 100). Only the device(s) which pulled SMBALERT# low will acknowledge the Alert
Response Address.
When configured as a slave device(SMBHEN=0), the SMBA pin is pulled low by setting the
ALERTEN bit in the FMPI2C_CR1 register. The Alert Response Address is enabled at the
same time.
When configured as a host (SMBHEN=1), the ALERT flag is set in the FMPI2C_ISR register
when a falling edge is detected on the SMBA pin and ALERTEN=1. An interrupt is
generated if the ERRIE bit is set in the FMPI2C_CR1 register. When ALERTEN=0, the
ALERT line is considered high even if the external SMBA pin is low.
If the SMBus ALERT pin is not needed, the SMBA pin can be used as a standard GPIO if
ALERTEN=0.
Timeouts
This peripheral embeds hardware timers in order to be compliant with the 3 timeouts defined
in SMBus specification.
6WDUW 6WRS
W/2:6(;7
&ON$FN &ON$FN
W/2:0(;7 W/2:0(;7 W/2:0(;7
60%&/.
60%'$7
069
Timeout detection
The timeout detection is enabled by setting the TIMOUTEN and TEXTEN bits in the
FMPI2C_TIMEOUTR register. The timers must be programmed in such a way that they
detect a timeout before the maximum time given in the SMBus specification.
• tTIMEOUT check
In order to enable the tTIMEOUT check, the 12-bit TIMEOUTA[11:0] bits must be
programmed with the timer reload value in order to check the tTIMEOUT parameter. The
TIDLE bit must be configured to ‘0’ in order to detect the SCL low level timeout.
Then the timer is enabled by setting the TIMOUTEN in the FMPI2C_TIMEOUTR
register.
If SCL is tied low for a time greater than (TIMEOUTA+1) x 2048 x tI2CCLK, the TIMEOUT
flag is set in the FMPI2C_ISR register.
Refer to Table 147: Examples of TIMEOUTA settings for various FMPI2CCLK
frequencies (max tTIMEOUT = 25 ms).
Caution: Changing the TIMEOUTA[11:0] bits and TIDLE bit configuration is not allowed when the
TIMEOUTEN bit is set.
• tLOW:SEXT and tLOW:MEXT check
Depending on if the peripheral is configured as a master or as a slave, The 12-bit
TIMEOUTB timer must be configured in order to check tLOW:SEXT for a slave and
tLOW:MEXT for a master. As the standard specifies only a maximum, the user can choose
the same value for the both.
Then the timer is enabled by setting the TEXTEN bit in the FMPI2C_TIMEOUTR
register.
If the SMBus peripheral performs a cumulative SCL stretch for a time greater than
(TIMEOUTB+1) x 2048 x tI2CCLK, and in the timeout interval described in Bus idle
detection on page 818 section, the TIMEOUT flag is set in the FMPI2C_ISR register.
Refer to Table 148: Examples of TIMEOUTB settings for various FMPI2CCLK
frequencies
Caution: Changing the TIMEOUTB configuration is not allowed when the TEXTEN bit is set.
Refer to Table 149: Examples of TIMEOUTA settings for various FMPI2CCLK frequencies
(max tIDLE = 50 µs)
Caution: Changing the TIMEOUTA and TIDLE configuration is not allowed when the TIMEOUTEN is
set.
Figure 279. Transfer sequence flowchart for SMBus slave transmitter N bytes + PEC
60%XVVODYH
WUDQVPLVVLRQ
6ODYHLQLWLDOL]DWLRQ
1R
)03,&B,65$''5
"
<HV
5HDG$''&2'(DQG',5LQ)03,&B,65 6&/
)03,&B&51%<7(6 1 VWUHWFKHG
3(&%<7(
6HW)03,&B,&5$''5&)
1R
)03,&B,657;,6
"
<HV
:ULWH)03,&B7;'57;'$7$
D^ǀϯϱϵϳϯsϭ
Figure 280. Transfer bus diagrams for SMBus slave transmitter (SBC=1)
OHJHQG
([DPSOH60%XVVODYHWUDQVPLWWHUE\WHV3(&
WUDQVPLVVLRQ
$''5 7;,6 7;,6 UHFHSWLRQ
1%<7(6
(9$''5,65FKHFN$''&2'(SURJUDP1%<7(6 VHW3(&%<7(VHW$''5&)
(97;,6,65ZUGDWD
(97;,6,65ZUGDWD
069
Figure 281. Transfer sequence flowchart for SMBus slave receiver N Bytes + PEC
60%XVVODYH
UHFHSWLRQ
6ODYHLQLWLDOL]DWLRQ
1R
)03,&B,65$''5
"
<HV
5HDG$''&2'(DQG',5LQ)03,&B,65 6&/
)03,&B&51%<7(6 5(/2$' VWUHWFKHG
3(&%<7(
6HW)03,&B,&5$''5&)
1R
)03,&B,655;1( "
)03,&B,657&5 "
<HV
5HDG)03,&B5;'55;'$7$
3URJUDP)03,&B&51$&.
)03,&B&51%<7(6
1 1
1R
1 "
<HV
5HDG)03,&B5;'55;'$7$
3URJUDP5(/2$'
1$&. DQG1%<7(6
1R
)03,&B,655;1(
"
<HV
5HDG)03,&B5;'55;'$7$
(QG
D^ǀϯϱϵϳϰsϭ
Figure 282. Bus transfer diagrams for SMBus slave receiver (SBC=1)
OHJHQG
([DPSOH60%XVVODYHUHFHLYHUE\WHV3(&
WUDQVPLVVLRQ
$''5 5;1( 5;1( 5;1(
UHFHSWLRQ
1%<7(6
([DPSOH60%XVVODYHUHFHLYHUE\WHV3(&ZLWK$&.FRQWURO OHJHQG
1%<7(6
069
This section is relevant only when SMBus feature is supported. Refer to Section 26.3:
FMPI2C implementation.
In addition to FMPI2C master transfer management (refer to Section 26.4.8: FMPI2C
master mode) some additional software flowcharts are provided to support SMBus.
When the SMBus master wants to send a RESTART condition after the PEC, software
mode must be selected (AUTOEND=0). In this case, once NBYTES-1 have been
transmitted, the FMPI2C_PECR register content is transmitted and the TC flag is set after
the PEC transmission, stretching the SCL line low. The RESTART condition must be
programmed in the TC interrupt subroutine.
Caution: The PECBYTE bit has no effect when the RELOAD bit is set.
([DPSOH60%XVPDVWHUWUDQVPLWWHUE\WHV3(&DXWRPDWLFHQGPRGH 6723
7;,6 7;,6
OHJHQG
UHFHSWLRQ
,1,7 (9 (9
6&/VWUHWFK
7;(
1%<7(6 [[
([DPSOH60%XVPDVWHUWUDQVPLWWHUE\WHV3(&VRIWZDUHHQGPRGH 5(67$57
7& OHJHQG
7;,6 7;,6
WUDQVPLVVLRQ
6 $GGUHVV $ GDWD $ GDWD $ 3(& $ 5VWDUW $GGUHVV
UHFHSWLRQ
[[ 1
1%<7(6
069
([DPSOH60%XVPDVWHUUHFHLYHUE\WHV3(&DXWRPDWLFHQGPRGH 6723
UHFHSWLRQ
,1,7 (9 (9 (9
6&/VWUHWFK
1%<7(6 [[
([DPSOH60%XVPDVWHUUHFHLYHUE\WHV3(&VRIWZDUHHQGPRGH 5(67$57
WUDQVPLVVLRQ
6 $GGUHVV $ GDWD $ GDWD $ 3(& 1$ 5HVWDUW $GGUHVV
UHFHSWLRQ
1%<7(6
[[ 1
069
In case of a misplaced START or RESTART detection in slave mode, the FMPI2C enters
address recognition state like for a correct START condition.
When a bus error is detected, the BERR flag is set in the FMPI2C_ISR register, and an
interrupt is generated if the ERRIE bit is set in the FMPI2C_CR1 register.
Alert (ALERT)
This section is relevant only when the SMBus feature is supported. Refer to Section 26.3:
FMPI2C implementation.
The ALERT flag is set when the FMPI2C interface is configured as a Host (SMBHEN=1),
the alert pin detection is enabled (ALERTEN=1) and a falling edge is detected on the SMBA
pin. An interrupt is generated if the ERRIE bit is set in the FMPI2C_CR1 register.
No effect
Sleep
FMPI2C interrupts cause the device to exit the Sleep mode.
Stop The contents of FMPI2C registers are kept.
Standby The FMPI2C peripheral is powered down and must be reinitialized after exiting Standby.
Read
Receive buffer not
RXNE RXIE FMPI2C_RXDR
empty
register
Write
Transmit buffer
TXIS TXIE FMPI2C_TXDR
interrupt status
register
Stop detection
STOPF STOPIE Write STOPCF=1
interrupt flag
No
Write
I2C_EV Transfer Complete Yes
TCR FMPI2C_CR2 with
Reload
TCIE NBYTES[7:0] ≠ 0
Write START=1 or
Transfer complete TC
STOP=1
Address matched ADDR ADDRIE Write ADDRCF=1
NACK reception NACKF NACKIE Write NACKCF=1
Bus error BERR Write BERRCF=1
Arbitration loss ARLO Write ARLOCF=1
Overrun/Underrun OVR Write OVRCF=1
Depending on the product implementation, all these interrupts events can either share the
same interrupt vector (FMPI2C global interrupt), or be grouped into 2 interrupt vectors
(FMPI2C event interrupt and FMPI2C error interrupt). Refer to Table 40: Vector table for
STM32F413/423 for details.
Access: No wait states, except if a write access occurs while a write access to this register is
ongoing. In this case, wait states are inserted in the second write access until the previous
one is completed. The latency of the second write access can be up to 2 x PCLK1 + 6 x
FMPI2CCLK.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PEC AUTO RE
Res. Res. Res. Res. Res. NBYTES[7:0]
BYTE END LOAD
rs rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HEAD RD_
NACK STOP START ADD10 SADD[9:0]
10R WRN
rs rs rs rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OA1
OA1EN Res. Res. Res. Res. OA1[9:8] OA1[7:1] OA1[0]
MODE
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OA2EN Res. Res. Res. Res. OA2MSK[2:0] OA2[7:1] Res.
rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SCLH[7:0] SCLL[7:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: This register must be configured when the FMPI2C is disabled (PE = 0).
Note: The STM32CubeMX tool calculates and provides the I2C_TIMINGR content in the I2C
Configuration window.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TEXTEN Res. Res. Res. TIMEOUTB[11:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TIMOUTEN Res. Res. TIDLE TIMEOUTA[11:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: If the SMBus feature is not supported, this register is reserved and forced by hardware to
“0x00000000”. Refer to Section 26.3: FMPI2C implementation.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. ADDCODE[6:0] DIR
r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TIME PEC
BUSY Res. ALERT OVR ARLO BERR TCR TC STOPF NACKF ADDR RXNE TXIS TXE
OUT ERR
r r r r r r r r r r r r r rs rs
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ALERT TIM ARLO BERR STOP NACK ADDR
Res. Res. PECCF OVRCF Res. Res. Res. Res. Res.
CF OUTCF CF CF CF CF CF
w w w w w w w w w
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r r r r r r r r
Note: If the SMBus feature is not supported, this register is reserved and forced by hardware to
“0x00000000”. Refer to Section 26.3: FMPI2C implementation.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. RXDATA[7:0]
r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. TXDATA[7:0]
rw rw rw rw rw rw rw rw
0xC
0x24
0x20
0x18
0x14
0x10
0x1C
Offset
846/1324
26.7.12
R
name
FMPI2C_
Register
TIMEOUTR
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
FMPI2C_ISR
FMPI2C_ICR
FMPI2C_CR2
FMPI2C_CR1
FMPI2C_OAR2
FMPI2C_OAR1
FMPI2C_PECR
FMPI2C_RXDR
FMPI2C_TIMING
0
0
Res. Res. Res. Res. TEXTEN Res. Res. Res. Res. 31
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. 30
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. 29
PRESC[3:0]
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. 28
0
Res. Res. Res. Res. Res. Res. Res. Res. Res. 27
0
0
Res. Res. Res. Res. Res. Res. Res. PECBYTE Res. 26
0
0
FMPI2C register map
0
0
Res. Res. Res. Res. Res. Res. Res. RELOAD Res. 24
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
SCLDEL[3:0
Res. Res. Res. Res. Res. SMBHEN 20
TIMEOUTB[11:0]
0
0
0
0
0
ADDCODE[6:0]
0
0
0
0
NBYTES[7:0]
0]
RM0430 Rev 8
0
0
0
0
0
SDADEL[3:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
SCLH[7:0]
0
0
0
0
0
0
0
0
Table 152. FMPI2C register map and reset values
0
0
0
0
0
0
0
0
K [2:0]
OA2MS
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Res. TC TCIE 6
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
TIMEOUTA[11:0]
SADD[9:0]
0
0
0
0
0
0
0
0
0
0
OA2[7:1]
PEC[7:0]
SCLL[7:0]
0
0
0
0
0
0
0
0
0
RXDATA[7:0]
Res. RXNE RXIE 2
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
name
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
FMPI2C_TXDR TXDATA[7:0]
0x28
Reset value 0 0 0 0 0 0 0 0
Note: Some of the above features may not be available in certain products. The user should refer
to the product data sheet, to identify the specific features supported by the I2C interface
implementation.
Communication flow
In Master mode, the I2C interface initiates a data transfer and generates the clock signal. A
serial data transfer always begins with a start condition and ends with a stop condition. Both
start and stop conditions are generated in master mode by software.
In Slave mode, the interface is capable of recognizing its own addresses (7 or 10-bit), and
the General Call address. The General Call address detection may be enabled or disabled
by software.
Data and addresses are transferred as 8-bit bytes, MSB first. The first byte(s) following the
start condition contain the address (one in 7-bit mode, two in 10-bit mode). The address is
always transmitted in Master mode.
A 9th clock pulse follows the 8 clock cycles of a byte transfer, during which the receiver must
send an acknowledge bit to the transmitter. Refer to Figure 285.
SDA
MSB ACK
SCL
1 2 8 9
Start Stop
condition condition
Acknowledge may be enabled or disabled by software. The I2C interface addresses (dual
addressing 7-bit/ 10-bit and/or general call address) can be selected by software.
$ATA REGISTER
.OISE $ATA
3$! $ATA SHIFT REGISTER
FILTER CONTROL
#LOCK CONTROL
2EGISTER ##2
#ONTROL REGISTERS
#2#2
#ONTROL
3TATUS REGISTERS LOGIC
3232
3-"!
1. SMBA is an optional signal in SMBus mode. This signal is not applicable if SMBus is disabled.
Note: In 10-bit addressing mode, the comparison includes the header sequence (11110xx0),
where xx denotes the two most significant bits of the address.
Header or address not matched: the interface ignores it and waits for another Start
condition.
Header matched (10-bit mode only): the interface generates an acknowledge pulse if the
ACK bit is set and waits for the 8-bit slave address.
Address matched: the interface generates in sequence:
• An acknowledge pulse if the ACK bit is set
• The ADDR bit is set by hardware and an interrupt is generated if the ITEVFEN bit is
set.
• If ENDUAL=1, the software has to read the DUALF bit to check which slave address
has been acknowledged.
In 10-bit mode, after receiving the address sequence the slave is always in Receiver mode.
It will enter Transmitter mode on receiving a repeated Start condition followed by the header
sequence with matching address bits and the least significant bit set (11110xx1).
The TRA bit indicates whether the slave is in Receiver or Transmitter mode.
Slave transmitter
Following the address reception and after clearing ADDR, the slave sends bytes from the
DR register to the SDA line via the internal shift register.
The slave stretches SCL low until ADDR is cleared and DR filled with the data to be sent
(see Figure 287 Transfer sequencing EV1 EV3).
When the acknowledge pulse is received:
• The TxE bit is set by hardware with an interrupt if the ITEVFEN and the ITBUFEN bits
are set.
If TxE is set and some data were not written in the I2C_DR register before the end of the
next data transmission, the BTF bit is set and the interface waits until BTF is cleared by a
read to I2C_SR1 followed by a write to the I2C_DR register, stretching SCL low.
ELWVODYHWUDQVPLWWHU
6 +HDGHU $ $GGUHVV $
(9
1. The EV1 and EV3_1 events stretch SCL low until the end of the corresponding software sequence.
2. The EV3 event stretches SCL low if the software sequence is not completed before the end of the next byte
transmission
Slave receiver
Following the address reception and after clearing ADDR, the slave receives bytes from the
SDA line into the DR register via the internal shift register. After each byte the interface
generates in sequence:
• An acknowledge pulse if the ACK bit is set
• The RxNE bit is set by hardware and an interrupt is generated if the ITEVFEN and
ITBUFEN bit is set.
If RxNE is set and the data in the DR register is not read before the end of the next data
reception, the BTF bit is set and the interface waits until BTF is cleared by a read from the
I2C_DR register, stretching SCL low (see Figure 288 Transfer sequencing).
ELWVODY HUHFHLYHU
6 +HDGHU $ $GGUHVV $ 'DWD $ 'DWD1 $ 3
(9 (9 (9
(9$''5 FOHDUHGE\UHDGLQJ65IROORZHGE\UHDGLQJ65
(95[1( FOHDUHGE\UHDGLQJ'5UHJLVWHU
(96723) FOHDUHGE\UHDGLQJ65UHJLVWHUIROORZHGE\ZULWLQJWRWKH&5UHJLVWHU
DL9
1. The EV1 event stretches SCL low until the end of the corresponding software sequence.
2. The EV2 event stretches SCL low if the software sequence is not completed before the end of the next byte
reception.
3. After checking the SR1 register content, the user should perform the complete clearing sequence for each
flag found set.
Thus, for ADDR and STOPF flags, the following sequence is required inside the I2C interrupt routine:
READ SR1
if (ADDR == 1) {READ SR1; READ SR2}
if (STOPF == 1) {READ SR1; WRITE CR1}
The purpose is to make sure that both ADDR and STOPF flags are cleared if both are found set.
Start condition
Setting the START bit causes the interface to generate a Start condition and to switch to
Master mode (MSL bit set) when the BUSY bit is cleared.
Note: In master mode, setting the START bit causes the interface to generate a ReStart condition
at the end of the current byte transfer.
Once the Start condition is sent:
• The SB bit is set by hardware and an interrupt is generated if the ITEVFEN bit is set.
Then the master waits for a read of the SR1 register followed by a write in the DR register
with the Slave address (see Figure 289 and Figure 290 Transfer sequencing EV5).
The master can decide to enter Transmitter or Receiver mode depending on the LSB of the
slave address sent.
• In 7-bit addressing mode,
– To enter Transmitter mode, a master sends the slave address with LSB reset.
– To enter Receiver mode, a master sends the slave address with LSB set.
• In 10-bit addressing mode,
– To enter Transmitter mode, a master sends the header (11110xx0) and then the
slave address, (where xx denotes the two most significant bits of the address).
– To enter Receiver mode, a master sends the header (11110xx0) and then the
slave address. Then it should send a repeated Start condition followed by the
header (11110xx1), (where xx denotes the two most significant bits of the
address).
The TRA bit indicates whether the master is in Receiver or Transmitter mode.
Master transmitter
Following the address transmission and after clearing ADDR, the master sends bytes from
the DR register to the SDA line via the internal shift register.
The master waits until the first data byte is written into I2C_DR (see Figure 289 Transfer
sequencing EV8_1).
When the acknowledge pulse is received, the TxE bit is set by hardware and an interrupt is
generated if the ITEVFEN and ITBUFEN bits are set.
If TxE is set and a data byte was not written in the DR register before the end of the last data
transmission, BTF is set and the interface waits until BTF is cleared by a write to I2C_DR,
stretching SCL low.
Closing the communication
After the last byte is written to the DR register, the STOP bit is set by software to generate a
Stop condition (see Figure 289 Transfer sequencing EV8_2). The interface automatically
goes back to slave mode (MSL bit cleared).
Note: Stop condition should be programmed during EV8_2 event, when either TxE or BTF is set.
ELWPDVWHUWUDQVPLWWHU
6 $GGUHVV $ 'DWD $ 'DWD $ 'DWD1 $ 3
(9 (9 (9B (9 (9 (9 (9B
ELWPDVWHUWUDQVPLWWHU
6 +HDGHU $ $GGUHVV $ 'DWD $ 'DWD1 $ 3
(9 (9 (9 (9B (9 (9 (9B
1. The EV5, EV6, EV9, EV8_1 and EV8_2 events stretch SCL low until the end of the corresponding software sequence.
2. The EV8 event stretches SCL low if the software sequence is not complete before the end of the next byte transmission.
Master receiver
Following the address transmission and after clearing ADDR, the I2C interface enters
Master Receiver mode. In this mode the interface receives bytes from the SDA line into the
DR register via the internal shift register. After each byte the interface generates in
sequence:
1. An acknowledge pulse if the ACK bit is set
2. The RxNE bit is set and an interrupt is generated if the ITEVFEN and ITBUFEN bits are
set (see Figure 290 Transfer sequencing EV7).
If the RxNE bit is set and the data in the DR register is not read before the end of the last
data reception, the BTF bit is set by hardware and the interface waits until BTF is cleared by
a read in the DR register, stretching SCL low.
Closing the communication
The master sends a NACK for the last byte received from the slave. After receiving this
NACK, the slave releases the control of the SCL and SDA lines. Then the master can send
a Stop/Restart condition.
1. To generate the nonacknowledge pulse after the last received data byte, the ACK bit
must be cleared just after reading the second last data byte (after second last RxNE
event).
2. In order to generate the Stop/Restart condition, software must set the STOP/START bit
after reading the second last data byte (after the second last RxNE event).
3. In case a single byte has to be received, the Acknowledge disable is made during EV6
(before ADDR flag is cleared) and the STOP condition generation is made after EV6.
After the Stop condition generation, the interface goes automatically back to slave mode
(MSL bit cleared).
AID
Note: For each frequency range, the constraint is given based on the worst case which is the
minimum frequency of the range. Greater DNF values can be used if the system can
support maximum hold time violation.
27.3.7 SMBus
Introduction
The System Management Bus (SMBus) is a two-wire interface through which various
devices can communicate with each other and with the rest of the system. It is based on I2C
principles of operation. SMBus provides a control bus for system and power management
related tasks. A system may use SMBus to pass messages to and from devices instead of
toggling individual control lines.
The System Management Bus Specification refers to three types of devices. A slave is a
device that is receiving or responding to a command. A master is a device that issues
commands, generates the clocks, and terminates the transfer. A host is a specialized
master that provides the main interface to the system's CPU. A host must be a master-slave
and must support the SMBus host notify protocol. Only one host is allowed in a system.
Device identification
Any device that exists on the System Management Bus as a slave has a unique address
called the Slave Address. For the list of reserved slave addresses, refer to the SMBus
specification version. 2.0 (http://smbus.org/).
Bus protocols
The SMBus specification supports up to 9 bus protocols. For more details of these protocols
and SMBus address types, refer to SMBus specification version. 2.0. These protocols
should be implemented by the user software.
Timeout error
There are differences in the timing specifications between I2C and SMBus.
SMBus defines a clock low timeout, TIMEOUT of 35 ms. Also SMBus specifies TLOW:
SEXT as the cumulative clock low extend time for a slave device. SMBus specifies TLOW:
MEXT as the cumulative clock low extend time for a master device. For more details on
these timeouts, refer to SMBus specification version 2.0.
The status flag Timeout or Tlow Error in I2C_SR1 shows the status of this feature.
be set before the ACK of the CRC reception in slave mode. It must be set when
the ACK is set low in master mode.
• A PECERR error flag/interrupt is also available in the I2C_SR1 register.
• If DMA and PEC calculation are both enabled:-
– In transmission: when the I2C interface receives an EOT signal from the DMA
controller, it automatically sends a PEC after the last byte.
– In reception: when the I2C interface receives an EOT_1 signal from the DMA
controller, it will automatically consider the next byte as a PEC and will check it. A
DMA request is generated after PEC reception.
• To allow intermediate PEC transfers, a control bit is available in the I2C_CR2 register
(LAST bit) to determine if it is really the last DMA transfer or not. If it is the last DMA
request for a master receiver, a NACK is automatically sent after the last received byte.
• PEC calculation is corrupted by an arbitration loss.
Note: SB, ADDR, ADD10, STOPF, BTF, RxNE and TxE are logically ORed on the same interrupt
channel.
BERR, ARLO, AF, OVR, PECERR, TIMEOUT and SMBALERT are logically ORed on the
same interrupt channel.
STOPF
it_event
BTF
TxE
ITBUFEN
RxNE
ITERREN
BERR
ARLO
it_error
AF
OVR
PECERR
TIMEOUT
SMBALERT
Note: When the STOP, START or PEC bit is set, the software must not perform any write access
to I2C_CR1 before this bit is cleared by hardware. Otherwise there is a risk of setting a
second STOP, START or PEC request.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SMB
SMB GEN
PEC[7:0] DUALF DEFAU Res. TRA BUSY MSL
HOST CALL
LT
r r r r r r r r r r r r r r r
Note: Reading I2C_SR2 after reading I2C_SR1 clears the ADDR flag, even if the ADDR flag was
set after reading I2C_SR1. Consequently, I2C_SR2 must be read only when ADDR is found
set in I2C_SR1 or when the STOPF bit is cleared.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
F/S DUTY Res. Res. CCR[11:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. ANOFF DNF[3:0]
rw rw rw rw rw
0x1C
0x0C
Offset
882/1324
27.6.11
I2C_DR
I2C_SR2
I2C_SR1
I2C_CR2
I2C_CR1
I2C_CCR
I2C_FLTR
I2C_OAR2
I2C_OAR1
I2C_TRISE
Register
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 31
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 30
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 29
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 28
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 27
I2C register map
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 26
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 25
Inter-integrated circuit (I2C) interface
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 24
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 23
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 22
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 21
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 20
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 19
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 18
RM0430 Rev 8
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 17
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. 16
0
0
0
0
0
0
0
0
Res. Res. DUTY TIMEOUT Res. Res. Res. Res. Res. 14
0
0
0
0
0
0
0
Table 156. I2C register map and reset values
PEC[7:0]
The table below provides the I2C register map and reset values.
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
ADD[
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
CCR[11:0]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
ADD[7:1]
Res.
ADD2[7:1]
ADD10 SMBTYPE 3
DR[7:0]
0
0
0
0
0
0
0
0
0
TRISE[5:0]
0
0
0
0
0
1
0
0
0
0
DNF[3:0]
0
0
0
0
0
0
0
0
0
0
Asynchronous
X X X X X X X X X X
mode
Hardware flow
X X X NA NA X NA NA NA NA
control
Multibuffer
communication X X X X X X X X X X
(DMA)
Multiprocessor
X X X X X X X X X X
communication
Synchronous
X X X NA NA X NA NA NA NA
mode
Smartcard mode X X X NA NA X NA NA NA NA
Half-duplex
X X X X X X X X X X
(single-wire mode)
IrDA SIR ENDEC
X X X X X X X X X X
block
IrDA mode X X X X X X X X X X
LIN mode X X X X X X X X X X
1. X = supported.
RX: Receive Data Input is the serial data input. Oversampling techniques are used for data
recovery by discriminating between valid incoming data and noise.
TX: Transmit Data Output. When the transmitter is disabled, the output pin returns to its I/O
port configuration. When the transmitter is enabled and nothing is to be transmitted, the TX
pin is at high level. In single-wire and smartcard modes, this I/O is used to transmit and
receive the data (at USART level, data are then received on SW_RX).
Through these pins, serial data is transmitted and received in normal USART mode as
frames comprising:
• An Idle Line prior to transmission or reception
• A start bit
• A data word (8 or 9 bits) least significant bit first
• 0.5,1, 1.5, 2 Stop bits indicating that the frame is complete
• This interface uses a fractional baud rate generator - with a 12-bit mantissa and 4-bit
fraction
• A status register (USART_SR)
• Data Register (USART_DR)
• A baud rate register (USART_BRR) - 12-bit mantissa and 4-bit fraction.
• A Guardtime Register (USART_GTPR) in case of Smartcard mode.
Refer to Section 28.6: USART registers for the definition of each bit.
The following pin is required to interface in synchronous mode:
• SCLK: Transmitter clock output. This pin outputs the transmitter data clock for
synchronous transmission corresponding to SPI master mode (no clock pulses on start
bit and stop bit, and a software option to send a clock pulse on the last data bit). In
parallel data can be received synchronously on RX. This can be used to control
peripherals that have shift registers (e.g. LCD drivers). The clock phase and polarity
are software programmable. In smartcard mode, SCLK can provide the clock to the
smartcard.
The following pins are required in Hardware flow control mode:
• nCTS: Clear To Send blocks the data transmission at the end of the current transfer
when high
• nRTS: Request to send indicates that the USART is ready to receive a data (when
low).
PWDATA PRDATA
Write Read (Data register) DR
RX IrDA
SIR
SW_RX Receive Shift Register
ENDEC Transmit Shift Register
block
IRDA_OUT
IRDA_IN GTPR
GT PSC SCLK control SCLK
CR3 CR2
DMAT DMAR SCEN NACK HD IRLP IREN LINE STOP[1:0] CKEN CPOL CPHA LBCL
CR2 CR1
USART Address UE M WAKE PCE PS PEIE
nRTS Hardware
flow
nCTS controller
Wakeup Receiver
Transmit Receiver clock
control unit
control
CR1 SR
TXEIE TCIE RXNE
IE
IDLE TE RE RWU SBK CTS LBD TXE TC RXNE IDLE ORE NF FE PE
IE
USART
interrupt
control
CR1 USART_BRR
OVER8
TE Transmitter rate
Transmitter control
clock
/ [8 x (2 - OVER8)] /USARTDIV
SAMPLING
DIVIDER DIV_Mantissa DIV_Fraction
15 4 0
fPCLKx(x=1,2)
Receiver rate
RE control
&ORFN
6WDUW
,GOHIUDPH ELW
&ORFN
6WDUW
,GOHIUDPH ELW
/%&/ELWFRQWUROVODVWGDWDFORFNSXOVH
069
28.4.2 Transmitter
The transmitter can send data words of either 8 or 9 bits depending on the M bit status.
When the transmit enable bit (TE) is set, the data in the transmit shift register is output on
the TX pin and the corresponding clock pulses are output on the SCLK pin.
Character transmission
During an USART transmission, data shifts out least significant bit first on the TX pin. In this
mode, the USART_DR register consists of a buffer (TDR) between the internal bus and the
transmit shift register (see Figure 292).
Every character is preceded by a start bit that is a logic level low for one bit period. The
character is terminated by a configurable number of stop bits.
The following stop bits are supported by USART: 0.5, 1, 1.5 and 2 stop bits.
Note: The TE bit should not be reset during transmission of data. Resetting the TE bit during the
transmission will corrupt the data on the TX pin as the baud rate counters will get frozen.
The current data being transmitted will be lost.
An idle frame will be sent after the TE bit is enabled.
a) 1 Stop Bit
Possible Next data frame
Parity
Data frame
Bit Next
Start start
Bit Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 bit
1 1/2 stop bits
b) 1 1/2 stop Bits
Possible Next data frame
parity
Data frame
bit Next
Start 2 Stop Start
Bit Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Bits Bit
Procedure:
1. Enable the USART by writing the UE bit in USART_CR1 register to 1.
2. Program the M bit in USART_CR1 to define the word length.
3. Program the number of stop bits in USART_CR2.
4. Select DMA enable (DMAT) in USART_CR3 if Multi buffer Communication is to take
place. Configure the DMA register as explained in multibuffer communication.
5. Select the desired baud rate using the USART_BRR register.
6. Set the TE bit in USART_CR1 to send an idle frame as first transmission.
7. Write the data to send in the USART_DR register (this clears the TXE bit). Repeat this
for each data to be transmitted in case of single buffer.
8. After writing the last data into the USART_DR register, wait until TC=1. This indicates
that the transmission of the last frame is complete. This is required for instance when
the USART is disabled or enters the Halt mode to avoid corrupting the last
transmission.
When a transmission is taking place, a write instruction to the USART_DR register stores
the data in the TDR register and which is copied in the shift register at the end of the current
transmission.
When no transmission is taking place, a write instruction to the USART_DR register places
the data directly in the shift register, the data transmission starts, and the TXE bit is
immediately set.
If a frame is transmitted (after the stop bit) and the TXE bit is set, the TC bit goes high. An
interrupt is generated if the TCIE bit is set in the USART_CR1 register.
After writing the last data into the USART_DR register, it is mandatory to wait for TC=1
before disabling the USART or causing the microcontroller to enter the low power mode
(see Figure 295: TC/TXE behavior when transmitting).
The TC bit is cleared by the following software sequence:
1. A read from the USART_SR register
2. A write to the USART_DR register
Note: The TC bit can also be cleared by writing a ‘0 to it. This clearing sequence is recommended
only for Multibuffer communication.
Break characters
Setting the SBK bit transmits a break character. The break frame length depends on the M
bit (see Figure 293).
If the SBK bit is set to ‘1 a break character is sent on the TX line after completing the current
character transmission. This bit is reset by hardware when the break character is completed
(during the stop bit of the break character). The USART inserts a logic 1 bit at the end of the
last break frame to guarantee the recognition of the start bit of the next frame.
Note: If the software resets the SBK bit before the commencement of break transmission, the
break character will not be transmitted. For two consecutive breaks, the SBK bit should be
set after the stop bit of the previous break.
Idle characters
Setting the TE bit drives the USART to send an idle frame before the first data frame.
28.4.3 Receiver
The USART can receive data words of either 8 or 9 bits depending on the M bit in the
USART_CR1 register.
5;VWDWH
,GOH 6WDUWELW
5;OLQH
,GHDO
VDPSOH
FORFN
6DPSOHGYDOXHV
5HDO
VDPSOH ; ; ; ; ; ; ; ;
FORFN
2QHELWWLPH
&RQGLWLRQV
WRYDOLGDWH ; ; ; ; ; ; ; ; ;
WKHVWDUWELW
)DOOLQJHGJH $WOHDVWELWV $WOHDVWELWV
GHWHFWLRQ RXWRIDW RXWRIDW
DLE
Note: If the sequence is not complete, the start bit detection aborts and the receiver returns to the
idle state (no flag is set) where it waits for a falling edge.
The start bit is confirmed (RXNE flag set, interrupt generated if RXNEIE=1) if the 3 sampled
bits are at 0 (first sampling on the 3rd, 5th and 7th bits finds the 3 bits at 0 and second
sampling on the 8th, 9th and 10th bits also finds the 3 bits at 0).
The start bit is validated (RXNE flag set, interrupt generated if RXNEIE=1) but the NE noise
flag is set if, for both samplings, at least 2 out of the 3 sampled bits are at 0 (sampling on the
3rd, 5th and 7th bits and sampling on the 8th, 9th and 10th bits). If this condition is not met,
the start detection aborts and the receiver returns to the idle state (no flag is set).
If, for one of the samplings (sampling on the 3rd, 5th and 7th bits or sampling on the 8th, 9th
and 10th bits), 2 out of the 3 bits are found at 0, the start bit is validated but the NE noise
flag bit is set.
Character reception
During an USART reception, data shifts in least significant bit first through the RX pin. In this
mode, the USART_DR register consists of a buffer (RDR) between the internal bus and the
received shift register.
Procedure:
1. Enable the USART by writing the UE bit in USART_CR1 register to 1.
2. Program the M bit in USART_CR1 to define the word length.
3. Program the number of stop bits in USART_CR2.
4. Select DMA enable (DMAR) in USART_CR3 if multibuffer communication is to take
place. Configure the DMA register as explained in multibuffer communication. STEP 3
5. Select the desired baud rate using the baud rate register USART_BRR
6. Set the RE bit USART_CR1. This enables the receiver that begins searching for a start
bit.
When a character is received
• The RXNE bit is set. It indicates that the content of the shift register is transferred to the
RDR. In other words, data has been received and can be read (as well as its
associated error flags).
• An interrupt is generated if the RXNEIE bit is set.
• The error flags can be set if a frame error, noise or an overrun error has been detected
during reception.
• In multibuffer, RXNE is set after every byte received and is cleared by the DMA read to
the Data Register.
• In single buffer mode, clearing the RXNE bit is performed by a software read to the
USART_DR register. The RXNE flag can also be cleared by writing a zero to it. The
RXNE bit must be cleared before the end of the reception of the next character to avoid
an overrun error.
Note: The RE bit should not be reset while receiving data. If the RE bit is disabled during
reception, the reception of the current byte will be aborted.
Break character
When a break character is received, the USART handles it as a framing error.
Idle character
When an idle frame is detected, there is the same procedure as a data received character
plus an interrupt if the IDLEIE bit is set.
Overrun error
An overrun error occurs when a character is received when RXNE has not been reset. Data
can not be transferred from the shift register to the RDR register until the RXNE bit is
cleared.
The RXNE flag is set after every byte received. An overrun error occurs if RXNE flag is set
when the next data is received or the previous DMA request has not been serviced. When
an overrun error occurs:
• The ORE bit is set.
• The RDR content will not be lost. The previous data is available when a read to
USART_DR is performed.
• The shift register will be overwritten. After that point, any data received during overrun
is lost.
• An interrupt is generated if either the RXNEIE bit is set or both the EIE and DMAR bits
are set.
• The ORE bit is reset by a read to the USART_SR register followed by a USART_DR
register read operation.
Note: The ORE bit, when set, indicates that at least 1 data has been lost. There are two
possibilities:
• if RXNE=1, then the last valid data is stored in the receive register RDR and can be
read,
• if RXNE=0, then it means that the last valid data has already been read and thus there
is nothing to be read in the RDR. This case can occur when the last valid data is read in
the RDR at the same time as the new (and lost) data is received. It may also occur
when the new data is received during the reading sequence (between the USART_SR
register read access and the USART_DR read access).
receiver tolerance to clock deviation). In this case the NF bit will never be set.
When noise is detected in a frame:
• The NF bit is set at the rising edge of the RXNE bit.
• The invalid data is transferred from the Shift register to the USART_DR register.
• No interrupt is generated in case of single byte communication. However this bit rises
at the same time as the RXNE bit that itself generates an interrupt. In case of
multibuffer communication an interrupt will be issued if the EIE bit is set in the
USART_CR3 register.
The NF bit is reset by a USART_SR register read operation followed by a USART_DR
register read operation.
Note: Oversampling by 8 is not available in the Smartcard, IrDA and LIN modes. In those modes,
the OVER8 bit is forced to ‘0 by hardware.
5;OLQH
VDPSOHGYDOXHV
6DPSOHFORFN
2QHELWWLPH
06Y9
5;OLQH
VDPSOHGYDOXHV
6DPSOH
FORFN [
2QHELWWLPH
06Y9
Framing error
A framing error is detected when:
The stop bit is not recognized on reception at the expected time, following either a de-
synchronization or excessive noise.
When the framing error is detected:
• The FE bit is set by hardware
• The invalid data is transferred from the Shift register to the USART_DR register.
• No interrupt is generated in case of single byte communication. However this bit rises
at the same time as the RXNE bit that itself generates an interrupt. In case of
multibuffer communication an interrupt will be issued if the EIE bit is set in the
USART_CR3 register.
The FE bit is reset by a USART_SR register read operation followed by a USART_DR
register read operation.
be set. The second stop bit is not checked for framing error. The RXNE flag will be set
at the end of the first stop bit.
USARTDIV is an unsigned fixed point number that is coded on the USART_BRR register.
• When OVER8=0, the fractional part is coded on 4 bits and programmed by the
DIV_fraction[3:0] bits in the USART_BRR register
• When OVER8=1, the fractional part is coded on 3 bits and programmed by the
DIV_fraction[2:0] bits in the USART_BRR register, and bit DIV_fraction[3] must be kept
cleared.
Note: The baud counters are updated to the new value in the baud registers after a write operation
to USART_BRR. Hence the baud rate register value should not be changed during
communication.
Example 3:
To program USARTDIV = 0d50.99
Table 159. Error calculation for programmed baud rates at fPCLK = 8 MHz or fPCLK = 12 MHz,
oversampling by 16(1)
Oversampling by 16 (OVER8=0)
Table 160. Error calculation for programmed baud rates at fPCLK = 8 MHz or fPCLK = 12 MHz,
oversampling by 8(1)
Oversampling by 8 (OVER8 = 1)
% Error =
Value (Calculated - Value
programmed Desired) programmed
S.No Desired Actual Actual % Error
in the baud B.rate / in the baud
rate register Desired rate register
B.rate
Table 160. Error calculation for programmed baud rates at fPCLK = 8 MHz or fPCLK = 12 MHz,
oversampling by 8(1) (continued)
Oversampling by 8 (OVER8 = 1)
% Error =
Value (Calculated - Value
programmed Desired) programmed
S.No Desired Actual Actual % Error
in the baud B.rate / in the baud
rate register Desired rate register
B.rate
9 460.8 KBps 470.588 KBps 2.125 2.12 461.538 KBps 3.25 0.16
10 921.6 KBps 888.889 KBps 1.125 3.55 923.077 KBps 1.625 0.16
1. The lower the CPU clock the lower the accuracy for a particular baud rate. The upper limit of the achievable baud rate can
be fixed with these data.
Table 161. Error calculation for programmed baud rates at fPCLK = 16 MHz or fPCLK = 24 MHz,
oversampling by 16(1)
Oversampling by 16 (OVER8 = 0)
Table 162. Error calculation for programmed baud rates at fPCLK = 16 MHz or fPCLK = 24 MHz,
oversampling by 8(1)
Oversampling by 8 (OVER8=1)
Table 163. Error calculation for programmed baud rates at fPCLK = 8 MHz or fPCLK = 16 MHz,
oversampling by 16(1)
Oversampling by 16 (OVER8=0)
1 2.4 KBps 2.400 KBps 208.3125 0.00% 2.400 KBps 416.6875 0.00%
2 9.6 KBps 9.604 KBps 52.0625 0.04% 9.598 KBps 104.1875 0.02%
3 19.2 KBps 19.185 KBps 26.0625 0.08% 19.208 KBps 52.0625 0.04%
4 57.6 KBps 57.554 KBps 8.6875 0.08% 57.554 KBps 17.3750 0.08%
5 115.2 KBps 115.942 KBps 4.3125 0.64% 115.108 KBps 8.6875 0.08%
6 230.4 KBps 228.571 KBps 2.1875 0.79% 231.884 KBps 4.3125 0.64%
7 460.8 KBps 470.588 KBps 1.0625 2.12% 457.143 KBps 2.1875 0.79%
Table 163. Error calculation for programmed baud rates at fPCLK = 8 MHz or fPCLK = 16 MHz,
oversampling by 16(1) (continued)
Oversampling by 16 (OVER8=0)
Table 164. Error calculation for programmed baud rates at fPCLK = 8 MHz or fPCLK = 16 MHz,
oversampling by 8(1)
Oversampling by 8 (OVER8=1)
1 2.4 KBps 2.400 KBps 416.625 0.01% 2.400 KBps 833.375 0.00%
2 9.6 KBps 9.604 KBps 104.125 0.04% 9.598 KBps 208.375 0.02%
3 19.2 KBps 19.185 KBps 52.125 0.08% 19.208 KBps 104.125 0.04%
4 57.6 KBps 57.557 KBps 17.375 0.08% 57.554 KBps 34.750 0.08%
5 115.2 KBps 115.942 KBps 8.625 0.64% 115.108 KBps 17.375 0.08%
6 230.4 KBps 228.571 KBps 4.375 0.79% 231.884 KBps 8.625 0.64%
7 460.8 KBps 470.588 KBps 2.125 2.12% 457.143 KBps 4.375 0.79%
8 896 KBps 888.889 KBps 1.125 0.79% 888.889 KBps 2.250 0.79%
9 921.6 KBps 888.889 KBps 1.125 3.55% 941.176 KBps 2.125 2.12%
10 1.792 MBps NA NA NA 1.7777 MBps 1.125 0.79%
11 1.8432 MBps NA NA NA 1.7777 MBps 1.125 3.55%
1. The lower the CPU clock the lower the accuracy for a particular baud rate. The upper limit of the achievable baud rate can
be fixed with these data.
Table 165. Error calculation for programmed baud rates at fPCLK = 30 MHz or fPCLK = 60 MHz,
oversampling by 16(1)(2)
Oversampling by 16 (OVER8=0)
1 2.4 KBps 2.400 KBps 781.2500 0.00% 2.400 KBps 1562.5000 0.00%
2 9.6 KBps 9.600 KBps 195.3125 0.00% 9.600 KBps 390.6250 0.00%
3 19.2 KBps 19.194 KBps 97.6875 0.03% 19.200 KBps 195.3125 0.00%
4 57.6 KBps 57.582KBps 32.5625 0.03% 57.582 KBps 65.1250 0.03%
5 115.2 KBps 115.385 KBps 16.2500 0.16% 115.163 KBps 32.5625 0.03%
6 230.4 KBps 230.769 KBps 8.1250 0.16% 230.769 KBps 16.2500 0.16%
7 460.8 KBps 461.538 KBps 4.0625 0.16% 461.538 KBps 8.1250 0.16%
8 896 KBps 909.091 KBps 2.0625 1.46% 895.522 KBps 4.1875 0.05%
9 921.6 KBps 909.091 KBps 2.0625 1.36% 923.077 KBps 4.0625 0.16%
10 1.792 MBps 1.1764 MBps 1.0625 1.52% 1.8182 MBps 2.0625 1.36%
11 1.8432 MBps 1.8750 MBps 1.0000 1.73% 1.8182 MBps 2.0625 1.52%
12 3.584 MBps NA NA NA 3.2594 MBps 1.0625 1.52%
13 3.6864 MBps NA NA NA 3.7500 MBps 1.0000 1.73%
1. The lower the CPU clock the lower the accuracy for a particular baud rate. The upper limit of the achievable baud rate can
be fixed with these data.
2. Only USART1 and USART6 are clocked with PCLK2. Other USARTs are clocked with PCLK1. Refer to the device
datasheets for the maximum values for PCLK1 and PCLK2.
Table 166. Error calculation for programmed baud rates at fPCLK = 30 MHz or fPCLK = 60 MHz,
oversampling by 8(1) (2)
Oversampling by 8 (OVER8=1)
1 2.4 KBps 2.400 KBps 1562.5000 0.00% 2.400 KBps 3125.0000 0.00%
2 9.6 KBps 9.600 KBps 390.6250 0.00% 9.600 KBps 781.2500 0.00%
3 19.2 KBps 19.194 KBps 195.3750 0.03% 19.200 KBps 390.6250 0.00%
4 57.6 KBps 57.582 KBps 65.1250 0.16% 57.582 KBps 130.2500 0.03%
5 115.2 KBps 115.385 KBps 32.5000 0.16% 115.163 KBps 65.1250 0.03%
6 230.4 KBps 230.769 KBps 16.2500 0.16% 230.769 KBps 32.5000 0.16%
Table 166. Error calculation for programmed baud rates at fPCLK = 30 MHz or fPCLK = 60 MHz,
oversampling by 8(1) (2) (continued)
Oversampling by 8 (OVER8=1)
7 460.8 KBps 461.538 KBps 8.1250 0.16% 461.538 KBps 16.2500 0.16%
8 896 KBps 909.091 KBps 4.1250 1.46% 895.522 KBps 8.3750 0.05%
9 921.6 KBps 909.091 KBps 4.1250 1.36% 923.077 KBps 8.1250 0.16%
10 1.792 MBps 1.7647 MBps 2.1250 1.52% 1.8182 MBps 4.1250 1.46%
11 1.8432 MBps 1.8750 MBps 2.0000 1.73% 1.8182 MBps 4.1250 1.36%
12 3.584 MBps 3.7500 MBps 1.0000 4.63% 3.5294 MBps 2.1250 1.52%
13 3.6864 MBps 3.7500 MBps 1.0000 1.73% 3.7500 MBps 2.0000 1.73%
14 7.168 MBps NA NA NA 7.5000 MBps 1.0000 4.63%
15 7.3728 MBps NA NA NA 7.5000 MBps 1.0000 1.73%
1. The lower the CPU clock the lower the accuracy for a particular baud rate. The upper limit of the achievable baud rate can
be fixed with these data.
2. Only USART1 and USART6 are clocked with PCLK2. Other USARTs are clocked with PCLK1. Refer to the device
datasheets for the maximum values for PCLK1 and PCLK2.
Table 167. Error calculation for programmed baud rates at fPCLK = 42 MHz or fPCLK = 84 Hz,
oversampling by 16(1)(2)
Oversampling by 16 (OVER8=0)
Table 167. Error calculation for programmed baud rates at fPCLK = 42 MHz or fPCLK = 84 Hz,
oversampling by 16(1)(2) (continued)
Oversampling by 16 (OVER8=0)
10 921.6 KBps 913.043 KBps 2.875 0.93 923.076 KBps 5.6875 0.93
11 1.792 MBps 1.826 MBps 1.4375 1.9 1.787 MBps 2.9375 0.27
12 1.8432 MBps 1.826 MBps 1.4375 0.93 1.826 MBps 2.875 0.93
13 3.584 MBps NA NA NA 3.652 MBps 1.4375 1.9
14 3.6864 MBps NA NA NA 3.652 MBps 1.4375 0.93
1. The lower the CPU clock the lower the accuracy for a particular baud rate. The upper limit of the achievable baud rate can
be fixed with these data.
2. Only USART1 and USART6 are clocked with PCLK2. Other USARTs are clocked with PCLK1. Refer to the device
datasheets for the maximum values for PCLK1 and PCLK2.
Table 168. Error calculation for programmed baud rates at fPCLK = 42 MHz or fPCLK = 84 MHz,
oversampling by 8(1)(2)
Oversampling by 8 (OVER8=1)
Table 168. Error calculation for programmed baud rates at fPCLK = 42 MHz or fPCLK = 84 MHz,
oversampling by 8(1)(2) (continued)
Oversampling by 8 (OVER8=1)
Note: The figures specified in Table 169 and Table 170 may slightly differ in the special case when
the received frames contain some Idle frames of exactly 10-bit times when M=0 (11-bit times
when M=1).
5;1( 5;1(
0054ZULWWHQWR ,GOHIUDPHGHWHFWHG
06Y9
5; ,'/( $GGU 'DWD 'DWD ,'/( $GGU 'DWD 'DWD $GGU 'DWD
1RQPDWFKLQJDGGUHVV
06Y9
Even parity
The parity bit is calculated to obtain an even number of “1s” inside the frame made of the 7
or 8 LSB bits (depending on whether M is equal to 0 or 1) and the parity bit.
E.g.: data=00110101; 4 bits set => parity bit will be 0 if even parity is selected (PS bit in
USART_CR1 = 0).
Odd parity
The parity bit is calculated to obtain an odd number of “1s” inside the frame made of the 7 or
8 LSB bits (depending on whether M is equal to 0 or 1) and the parity bit.
E.g.: data=00110101; 4 bits set => parity bit will be 1 if odd parity is selected (PS bit in
USART_CR1 = 1).
LIN transmission
The same procedure explained in Section 28.4.2 has to be applied for LIN Master
transmission than for normal USART transmission with the following differences:
• Clear the M bit to configure 8-bit word length.
• Set the LINEN bit to enter LIN mode. In this case, setting the SBK bit sends 13 ‘0 bits
as a break character. Then a bit of value ‘1 is sent to allow the next start detection.
LIN reception
A break detection circuit is implemented on the USART interface. The detection is totally
independent from the normal USART receiver. A break can be detected whenever it occurs,
during Idle state or during a frame.
When the receiver is enabled (RE=1 in USART_CR1), the circuit looks at the RX input for a
start signal. The method for detecting start bits is the same when searching break
characters or data. After a start bit has been detected, the circuit samples the next bits
exactly like for the data (on the 8th, 9th and 10th samples). If 10 (when the LBDL = 0 in
USART_CR2) or 11 (when LBDL=1 in USART_CR2) consecutive bits are detected as ‘0,
and are followed by a delimiter character, the LBD flag is set in USART_SR. If the LBDIE
bit=1, an interrupt is generated. Before validating the break, the delimiter is checked for as it
signifies that the RX line has returned to a high level.
If a ‘1 is sampled before the 10 or 11 have occurred, the break detection circuit cancels the
current detection and searches for a start bit again.
If the LIN mode is disabled (LINEN=0), the receiver continues working as normal USART,
without taking into account the break detection.
If the LIN mode is enabled (LINEN=1), as soon as a framing error occurs (i.e. stop bit
detected at ‘0, which will be the case for any break frame), the receiver stops until the break
detection circuit receives either a ‘1, if the break word was not complete, or a delimiter
character if a break has been detected.
The behavior of the break detector state machine and the break flag is shown in Figure 301.
Examples of break frames are given on Figure 302, where we suppose that LBDL=1 (11-bit
break length), and M=0 (8-bit data).
Figure 301. Break detection in LIN mode (11-bit break length - LBDL bit is set)
&DVHEUHDNVLJQDOQRWORQJHQRXJK !EUHDNGLVFDUGHG/%')LVQRWVHW
%UHDNIUDPH
5;OLQH
&DSWXUHVWUREH
%UHDNVWDWH
,GOH %LW %LW %LW %LW %LW %LW %LW %LW %LW %LW %LW ,GOH
PDFKLQH
5HDGVDPSOHV
&DVHEUHDNVLJQDOMXVWORQJHQRXJK !EUHDNGHWHFWHG/%')LVVHW
%UHDNIUDPH
5;OLQH
'HOLPLWHULVLPPHGLDWH
&DSWXUHVWUREH
%UHDNVWDWH
,GOH %LW %LW %LW %LW %LW %LW %LW %LW %LW %LW % ,GOH
PDFKLQH
5HDGVDPSOHV
/%')
&DVHEUHDNVLJQDOORQJHQRXJK !EUHDNGHWHFWHG/%')LVVHW
%UHDNIUDPH
5;OLQH
&DSWXUHVWUREH
%UHDNVWDWH
,GOH %LW %LW %LW %LW %LW %LW %LW %LW %LW %LW %LW ZDLWGHOLPLWHU ,GOH
PDFKLQH
5HDGVDPSOHV
/%')
06Y9
Figure 302. Break detection in LIN mode vs. Framing error detection
&DVHEUHDNRFFXUULQJDIWHUDQ,GOH
5;1()(
/%')
&DVHEUHDNRFFXUULQJZKLOHGDWDLVEHLQJUHFHLYHG
5;1()(
/%')
06Y9
has been written). This means that it is not possible to receive a synchronous data without
transmitting data.
The LBCL, CPOL and CPHA bits have to be selected when both the transmitter and the
receiver are disabled (TE=RE=0) to ensure that the clock pulses function correctly. These
bits should not be changed while the transmitter or the receiver is enabled.
It is advised that TE and RE are set in the same instruction in order to minimize the setup
and the hold time of the receiver.
The USART supports master mode only: it cannot receive or send data related to an input
clock (SCLK is always an output).
5; 'DWDRXW
7; 'DWDLQ
6\QFKURQRXVGHYLFH
86$57
HJVODYH63,
6&/. &ORFN
06Y9
'DWDRQ7;
IURPPDVWHU
6WDUW /6% 06% 6WRS
'DWDRQ5;
IURPVODYH
/6% 06%
&DSWXUHVWUREH
/%&/ELWFRQWUROVODVWGDWDSXOVH
06Y9
'DWDRQ7;
IURPPDVWHU
6WDUW /6% 06% 6WRS
'DWDRQ5;
IURPVODYH
/6% 06%
&DSWXUH
VWUREH
/%&/ELWFRQWUROVODVWGDWDSXOVH
06Y9
6&/.
FDSWXUHVWUREHRQ6&/.
ULVLQJHGJHLQWKLVH[DPSOH
W6(783 W+2/'
W6(783 W+2/'ELWWLPH
06Y9
Note: The function of SCLK is different in Smartcard mode. Refer to the Smartcard mode chapter
for more details.
28.4.11 Smartcard
The Smartcard mode is selected by setting the SCEN bit in the USART_CR3 register. In
smartcard mode, the following bits must be kept cleared:
• LINEN bit in the USART_CR2 register,
• HDSEL and IREN bits in the USART_CR3 register.
Moreover, the CLKEN bit may be set in order to provide a clock to the smartcard.
The Smartcard interface is designed to support asynchronous protocol Smartcards as
defined in the ISO 7816-3 standard. The USART should be configured as:
• 8 bits plus parity: where M=1 and PCE=1 in the USART_CR1 register
• 1.5 stop bits when transmitting and receiving: where STOP=11 in the USART_CR2
register.
Note: It is also possible to choose 0.5 stop bit for receiving but it is recommended to use 1.5 stop
bits for both transmitting and receiving to avoid switching between the two configurations.
Figure 307 shows examples of what can be seen on the data line with and without parity
error.
:LWKRXW3DULW\HUURU
*XDUGWLPH
6 S
6WDUWELW
:LWK3DULW\HUURU
*XDUGWLPH
6 S
6WDUWELW
/LQHSXOOHGORZE\UHFHLYHU
GXULQJVWRSLQFDVHRISDULW\HUURU
06Y9
When connected to a Smartcard, the TX output of the USART drives a bidirectional line that
is also driven by the Smartcard. The TX pin must be configured as open-drain.
Smartcard is a single wire half duplex communication protocol.
• Transmission of data from the transmit shift register is guaranteed to be delayed by a
minimum of 1/2 baud clock. In normal operation a full transmit shift register will start
shifting on the next baud clock edge. In Smartcard mode this transmission is further
delayed by a guaranteed 1/2 baud clock.
• If a parity error is detected during reception of a frame programmed with a 0.5 or 1.5
stop bit period, the transmit line is pulled low for a baud clock period after the
completion of the receive frame. This is to indicate to the Smartcard that the data
transmitted to USART has not been correctly received. This NACK signal (pulling
transmit line low for 1 baud clock) will cause a framing error on the transmitter side
(configured with 1.5 stop bits). The application can handle re-sending of data according
to the protocol. A parity error is ‘NACK’ed by the receiver if the NACK control bit is set,
otherwise a NACK is not transmitted.
• The assertion of the TC flag can be delayed by programming the Guard Time register.
In normal operation, TC is asserted when the transmit shift register is empty and no
further transmit requests are outstanding. In Smartcard mode an empty transmit shift
register triggers the guard time counter to count up to the programmed value in the
Guard Time register. TC is forced low during this time. When the guard time counter
reaches the programmed value TC is asserted high.
• The de-assertion of TC flag is unaffected by Smartcard mode.
• If a framing error is detected on the transmitter end (due to a NACK from the receiver),
the NACK will not be detected as a start bit by the receive block of the transmitter.
According to the ISO protocol, the duration of the received NACK can be 1 or 2 baud
clock periods.
• On the receiver side, if a parity error is detected and a NACK is transmitted the receiver
will not detect the NACK as a start bit.
Note: A break character is not significant in Smartcard mode. A 0x00 data with a framing error will
be treated as data and not as a break.
No Idle frame is transmitted when toggling the TE bit. The Idle frame (as defined for the
other configurations) is not defined by the ISO protocol.
Figure 308 details how the NACK signal is sampled by the USART. In this example the
USART is transmitting a data and is configured with 1.5 stop bits. The receiver part of the
USART is enabled in order to check the integrity of the data and the NACK signal.
Figure 308. Parity error detection using the 1.5 stop bits
%LW 3DULW\ELW 6WRSELW
ELWWLPH ELWWLPH
6DPSOLQJDW 6DPSOLQJDW
WKWKWK WKWKWK
ELW
WLPH
6DPSOLQJDW 6DPSOLQJDW
WKWKWK WKWKWK
069
The USART can provide a clock to the smartcard through the SCLK output. In smartcard
mode, SCLK is not associated to the communication but is simply derived from the internal
peripheral input clock through a 5-bit prescaler. The division ratio is configured in the
6,5(1
7;
25 86$57B7;
6,5
7UDQVPLW ,U'$B287
(QFRGHU
86$57
6,5
5;
5HFHLYH ,U'$B,1
'(FRGHU
86$57B5;
06Y9
,U'$B287
%LWSHULRG
,U'$B,1
5;
06Y9
6HWE\KDUGZDUH 6HWE\KDUGZDUH
7;(IODJ FOHDUHGE\'0$UHDG FOHDUHGE\'0$UHDG 6HWE\KDUGZDUH
'0$UHTXHVW ,JQRUHGE\WKH'0$EHFDXVH
WKHWUDQVIHULVFRPSOHWH
86$57B7'5 ) ) )
7&IODJ 6HWE\
KDUGZDUH
'0$ZULWHV
86$57B7'5
&OHDUHG
'0$7&,)IODJ E\
6HWE\KDUGZDUH VRIWZDUH
WUDQVIHU
FRPSOHWH
6RIWZDUH 7KH'0$
FRQILJXUHV'0$ '0$ZULWHV '0$ZULWHV '0$ZULWHV WUDQVIHULV
WRVHQGGDWD )LQWR )LQWR )LQWR FRPSOHWH 6RIWZDUHZDLWVXQWLO7&
EORFNVDQG 86$57B7'5 86$57B7'5 86$57B7'5 7&,) LQ
HQDEOHV86$57 '0$B,65
AIB
6HWE\KDUGZDUH
5;1(IODJ FOHDUHGE\'0$UHDG
'0$UHTXHVW
86$57B7'5 ) ) )
'0$UHDGV
86$57B7'5
&OHDUHG
'0$7&,)IODJ 6HWE\KDUGZDUH E\
WUDQVIHUFRPSOHWH VRIWZDUH
6RIWZDUHFRQILJXUHVWKH 7KH'0$WUDQVIHU
'0$WRUHFHLYHGDWD '0$UHDGV) '0$UHDGV) '0$UHDGV) LVFRPSOHWH
EORFNVDQGHQDEOHV IURP86$57B7'5 IURP86$57B7'5 IURP86$57B7'5 7&,) LQ
WKH86$57 '0$B,65
DLE
86$57 86$57
7; 5;
7;FLUFXLW 5;FLUFXLW
Q&76 Q576
5; 7;
5;FLUFXLW 7;FLUFXLW
Q576 Q&76
06Y9
RTS and CTS flow control can be enabled independently by writing respectively RTSE and
CTSE bits to 1 (in the USART_CR3 register).
Q576
06Y9
Q&76
7UDQVPLWGDWDUHJLVWHU
:ULWLQJGDWDLQ7'5 7UDQVPLVVLRQRI'DWDLV
GHOD\HGXQWLOQ&76
06Y9
Note: Special behavior of break frames: when the CTS flow is enabled, the transmitter does not
check the nCTS input state to send a break.
The USART interrupt events are connected to the same interrupt vector (see Figure 316).
• During transmission: Transmission Complete, Clear to Send or Transmit Data Register
empty interrupt.
• While receiving: Idle Line detection, Overrun error, Receive Data register not empty,
Parity error, LIN break detection, Noise Flag (only in multi buffer communication) and
Framing Error (only in multi buffer communication).
These events generate an interrupt if the corresponding Enable Control Bit is set.
7&
7&,(
7;(
7;(,(
&76
&76,(
,'/(
,'/(,(
5;1(,(
25(
5;1(,(
5;1( 86$57
LQWHUUXSW
3(
3(,(
/%'
/%',(
)(
1(
25( (,(
'0$5
069
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. CTS LBD TXE TC RXNE IDLE ORE NF FE PE
rc_w0 rc_w0 r rc_w0 rc_w0 r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. DR[8:0]
rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DIV_Mantissa[11:0] DIV_Fraction[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OVER8 Res. UE M WAKE PCE PS PEIE TXEIE TCIE RXNEIE IDLEIE TE RE RWU SBK
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. LINEN STOP[1:0] CLKEN CPOL CPHA LBCL Res. LBDIE LBDL Res. ADD[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: These 3 bits (CPOL, CPHA, LBCL) should not be written while the transmitter is enabled.
rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GT[7:0] PSC[7:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
0x0C
Offset
28.6.8
934/1324
Register
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
USART_SR
USART_DR
USART_CR3
USART_CR2
USART_CR1
USART_BRR
USART_GTPR
Res. Res. Res. Res. Res. Res. Res. 31
Res. Res. Res. Res. Res. Res. Res. 30
Res. Res. Res. Res. Res. Res. Res. 29
Res. Res. Res. Res. Res. Res. Res. 28
Res. Res. Res. Res. Res. Res. Res. 27
Res. Res. Res. Res. Res. Res. Res. 26
Res. Res. Res. Res. Res. Res. Res. 25
USART register map
RM0430 Rev 8
Res. Res. Res. Res. Res. Res. Res. 16
0
0
0
0
0
0
0
0
0
0
0
0
0
0
STOP
0
0
0
0
0
GT[7:0]
ONEBIT CLKEN WAKE Res. Res. 11
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
HDSEL TE ORE 3
PSC[7:0]
0
0
0
0
0
0
0
IRLP RE NF 2
[3:0]
0
0
0
0
0
0
0
IREN RWU FE 1
ADD[3:0]
0
0
0
0
0
0
0
DIV_Fraction
Universal synchronous receiver transmitter (USART) /universal asynchronous receiver transmit-
EIE SBK PE 0
RM0430 Serial peripheral interface/ inter-IC sound (SPI/I2S)
29.1 Introduction
The SPI/I²S interface can be used to communicate with external devices using the SPI
protocol or the I2S audio protocol. SPI or I2S mode is selectable by software. SPI mode is
selected by default after a device reset.
The serial peripheral interface (SPI) protocol supports half-duplex, full-duplex and simplex
synchronous, serial communication with external devices. The interface can be configured
as master and in this case it provides the communication clock (SCK) to the external slave
device. The interface is also capable of operating in multimaster configuration.
The Inter-IC sound (I2S) protocol is also a synchronous serial communication interface. It
can operate in slave or master mode with full-duplex and half-duplex communication.
It can address four different audio standards including the Philips I2S standard, the MSB-
and LSB-justified standards and the PCM standard.
Warning: Since some SPI1 pins may be mapped onto some pins used
by the JTAG interface, you can either map SPI/I2S onto other
pins, disable the JTAG and use the SWD interface prior to
configuring the pins listed as SPI I/Os (when debugging the
application) or disable both JTAG/SWD interfaces (for
standalone applications). For more information on the
configuration of the JTAG/SWD interface pins, please refer to
Section 7.3.2: I/O pin multiplexer and mapping.
5HDG
5[
EXIIHU
&5&FRQWUROOHU
026,
0,62 6KLIWUHJLVWHU
/6%),567 &5&(1
&32/ &5&1(;7
&3+$
'))
7;
EXIIHU
:ULWH &RPPXQLFDWLRQ
%,',2( FRQWUROOHU
%,',02'(
5;2/1<
%DXGUDWH
6&.
JHQHUDWRU %5>@ ,QWHUQDO166
166
166 ORJLF
06Y9
Four I/O pins are dedicated to SPI communication with external devices.
• MISO: Master In / Slave Out data. In the general case, this pin is used to transmit data
in slave mode and receive data in master mode.
• MOSI: Master Out / Slave In data. In the general case, this pin is used to transmit data
in master mode and receive data in slave mode.
• SCK: Serial Clock output pin for SPI masters and input pin for SPI slaves.
• NSS: Slave select pin. Depending on the SPI and NSS settings, this pin can be used to
either:
– select an individual slave device for communication
– synchronize the data frame or
– detect a conflict between multiple masters
See Section 29.3.5: Slave select (NSS) pin management for details.
The SPI bus allows the communication between one master device and one or more slave
devices. The bus consists of at least two wires - one for the clock signal and the other for
synchronous data transfer. Other signals can be added depending on the data exchange
between SPI nodes and their slave select signal management.
Full-duplex communication
By default, the SPI is configured for full-duplex communication. In this configuration, the
shift registers of the master and slave are linked using two unidirectional lines between the
MOSI and the MISO pins. During SPI communication, data is shifted synchronously on the
SCK clock edges provided by the master. The master transmits the data to be sent to the
slave via the MOSI line and receives data from the slave via the MISO line. When the data
frame transfer is complete (all the bits are shifted) the information between the master and
slave is exchanged.
0,62 0,62
5[VKLIWUHJLVWHU 7[VKLIWUHJLVWHU
026, 026,
7[VKLIWUHJLVWHU 5[VKLIWUHJLVWHU
06Y9
1. The NSS pins can be used to provide a hardware control flow between master and slave. Optionally, the
pins can be left unused by the peripheral. Then the flow has to be handled internally for both master and
slave. For more details see Section 29.3.5: Slave select (NSS) pin management.
Half-duplex communication
The SPI can communicate in half-duplex mode by setting the BIDIMODE bit in the
SPIx_CR1 register. In this configuration, one single cross connection line is used to link the
shift registers of the master and slave together. During this communication, the data is
synchronously shifted between the shift registers on the SCK clock edge in the transfer
direction selected reciprocally by both master and slave with the BDIOE bit in their
SPIx_CR1 registers. In this configuration, the master’s MISO pin and the slave’s MOSI pin
are free for other application uses and act as GPIOs.
0,62 0,62
5[VKLIWUHJLVWHU 7[VKLIWUHJLVWHU
026, Nȍ
7[VKLIWUHJLVWHU 026, 5[VKLIWUHJLVWHU
06Y9
1. The NSS pins can be used to provide a hardware control flow between master and slave. Optionally, the
pins can be left unused by the peripheral. Then the flow has to be handled internally for both master and
slave. For more details see Section 29.3.5: Slave select (NSS) pin management.
2. In this configuration, the master’s MISO pin and the slave’s MOSI pin can be used as GPIOs.
3. A critical situation can happen when communication direction is changed not synchronously between two
nodes working at bidirectionnal mode and new transmitter accesses the common data line while former
transmitter still keeps an opposite value on the line (the value depends on SPI configuration and
communication data). Both nodes then fight while providing opposite output levels on the common line
temporary till next node changes its direction settings correspondingly, too. It is suggested to insert a serial
resistance between MISO and MOSI pins at this mode to protect the outputs and limit the current blowing
between them at this situation.
Simplex communications
The SPI can communicate in simplex mode by setting the SPI in transmit-only or in receive-
only using the RXONLY bit in the SPIx_CR2 register. In this configuration, only one line is
used for the transfer between the shift registers of the master and slave. The remaining
MISO and MOSI pins pair is not used for communication and can be used as standard
GPIOs.
• Transmit-only mode (RXONLY=0): The configuration settings are the same as for full-
duplex. The application has to ignore the information captured on the unused input pin.
This pin can be used as a standard GPIO.
• Receive-only mode (RXONLY=1): The application can disable the SPI output function
by setting the RXONLY bit. In slave configuration, the MISO output is disabled and the
pin can be used as a GPIO. The slave continues to receive data from the MOSI pin
while its slave select signal is active (see 29.3.5: Slave select (NSS) pin management).
Received data events appear depending on the data buffer configuration. In the master
configuration, the MOSI output is disabled and the pin can be used as a GPIO. The
clock signal is generated continuously as long as the SPI is enabled. The only way to
stop the clock is to clear the RXONLY bit or the SPE bit and wait until the incoming
pattern from the MISO pin is finished and fills the data buffer structure, depending on its
configuration.
0,62 0,62
5[VKLIWUHJLVWHU 7[VKLIWUHJLVWHU
026, 026,
7[VKLIWUHJLVWHU 5[VKLIWUHJLVWHU
06Y9
1. The NSS pins can be used to provide a hardware control flow between master and slave. Optionally, the
pins can be left unused by the peripheral. Then the flow has to be handled internally for both master and
slave. For more details see Section 29.3.5: Slave select (NSS) pin management.
2. An accidental input information is captured at the input of transmitter Rx shift register. All the events
associated with the transmitter receive flow must be ignored in standard transmit only mode (e.g. OVF
flag).
3. In this configuration, both the MISO pins can be used as GPIOs.
Note: Any simplex communication can be alternatively replaced by a variant of the half-duplex
communication with a constant setting of the transaction direction (bidirectional mode is
enabled while BDIO bit is not changed).
166
0,62 0,62
5[VKLIWUHJLVWHU 7[VKLIWUHJLVWHU
026, 026,
7[VKLIWUHJLVWHU 5[VKLIWUHJLVWHU
0,62
7[VKLIWUHJLVWHU
026,
5[VKLIWUHJLVWHU
6&.
166
6ODYH
0,62
7[VKLIWUHJLVWHU
026,
5[VKLIWUHJLVWHU
6&.
166
6ODYH
06Y9
1. NSS pin is not used on master side at this configuration. It has to be managed internally (SSM=1, SSI=1) to
prevent any MODF error.
2. As MISO pins of the slaves are connected together, all slaves must have the GPIO configuration of their
MISO pin set as alternate function open-drain (see Section 7.3.7: I/O alternate function input/output on
page 191).
0,62 0,62
5[ 7[ VKLIWUHJLVWHU 5[ 7[ VKLIWUHJLVWHU
026, 026,
7[ 5[ VKLIWUHJLVWHU 7[ 5[ VKLIWUHJLVWHU
06Y9
1. The NSS pin is configured at hardware input mode at both nodes. Its active level enables the MISO line
output control as the passive node is configured as a slave.
– NSS output enable (SSM=0,SSOE = 1): this configuration is only used when the
MCU is set as master. The NSS pin is managed by the hardware. The NSS signal
is driven low as soon as the SPI is enabled in master mode (SPE=1), and is kept
low until the SPI is disabled (SPE =0).
– NSS output disable (SSM=0, SSOE = 0): if the microcontroller is acting as the
master on the bus, this configuration allows multimaster capability. If the NSS pin
is pulled low in this mode, the SPI enters master mode fault state and the device is
automatically reconfigured in slave mode. In slave mode, the NSS pin works as a
standard “chip select” input and the slave is selected while NSS line is at low level.
66,FRQWUROELW
660FRQWUROELW
166 0DVWHU
6ODYHPRGH
,QS PRGH
9GG 2. 1RQDFWLYH
9VV &RQIOLFW $FWLYH
166,QSXW
166 *3,2
SLQ ORJLF
166 1662XWSXW
2XWSXW
&RQWURO XVHGLQ0DVWHUPRGH 166
+:PDQDJHPHQWRQO\
662(FRQWUROELW
166H[WHUQDOORJLF 166LQWHUQDOORJLF
DLYH
&32/
166
WRVODYH
&DSWXUHVWUREH
&3+$
&32/
&32/
0,62 06%LW /6%LW
166
WRVODYH
&DSWXUHVWUREH
DLG
Tx buffer handling
The data frame is loaded from the Tx buffer into the shift register during the first bit
transmission. Bits are then shifted out serially from the shift register to a dedicated output
pin depending on LSBFIRST bit setting.The TXE flag (Tx buffer empty) is set when the data
are transferred from the Tx buffer to the shift register. It indicates that the internal Tx buffer is
ready to be loaded with the next data. An interrupt can be generated if the TXEIE bit of the
SPI_CR2 register is set. Clearing the TXE bit is performed by writing to the SPI_DR register.
A continuous transmit stream can be achieved if the next data to be transmitted are stored
in the Tx buffer while previous frame transmission is still ongoing. When the software writes
to Tx buffer while the TXE flag is not set, the data waiting for transaction is overwritten.
Rx buffer handling
The RXNE flag (Rx buffer not empty) is set on the last sampling clock edge, when the data
are transferred from the shift register to the Rx buffer. It indicates that data are ready to be
read from the SPI_DR register. An interrupt can be generated if the RXNEIE bit in the
SPI_CR2 register is set. Clearing the RXNE bit is performed by reading the SPI_DR
register.
If a device has not cleared the RXNE bit resulting from the previous data byte transmitted,
an overrun condition occurs when the next value is buffered. The OVR bit is set and an
interrupt is generated if the ERRIE bit is set.
Another way to manage the data exchange is to use DMA (see Section 9.2: DMA main
features).
Sequence handling
The BSY bit is set when a current data frame transaction is ongoing. When the clock signal
runs continuously, the BSY flag remains set between data frames on the master side.
However, on the slave side, it becomes low for a minimum duration of one SPI clock cycle
between each data frame transfer.
For some configurations, the BSY flag can be used during the last data transfer to wait until
the completion of the transfer.
When a receive-only mode is configured on the master side, either in half-duplex
(BIDIMODE=1, BIDIOE=0) or simplex configuration (BIDIMODE=0, RXONLY=1), the
master starts the receive sequence as soon as the SPI is enabled. Then the clock signal is
provided by the master and it does not stop until either the SPI or the receive-only mode is
disabled by the master. The master receives data frames continuously up to this moment.
While the master can provide all the transactions in continuous mode (SCK signal is
continuous), it has to respect slave capability to handle data flow and its content at anytime.
When necessary, the master must slow down the communication and provide either a
slower clock or separate frames or data sessions with sufficient delays. Be aware there is no
underflow error signal for slave operating in SPI mode, and that data from the slave are
always transacted and processed by the master even if the slave cannot not prepare them
correctly in time. It is preferable for the slave to use DMA, especially when data frames are
shorter and bus rate is high.
Each sequence must be encased by the NSS pulse in parallel with the multislave system to
select just one of the slaves for communication. In single slave systems, using NSS to
control the slave is not necessary. However, the NSS pulse can be used to synchronize the
slave with the beginning of each data transfer sequence. NSS can be managed either by
software or by hardware (see Section 29.3.4: Multi-master communication).
Refer to Figure 325 and Figure 326 for a description of continuous transfers in master / full-
duplex and slave full-duplex mode.
6&.
VHWE\KDUGZDUH VHWE\KDUGZDUH
7;(IODJ FOHDUHGE\VRIWZDUH FOHDUHGE\VRIWZDUH VHWE\KDUGZDUH
VHWE\KDUGZDUH FOHDUHGE\VRIWZDUH
5;1(IODJ
6&.
VHWE\KDUGZDUH VHWE\KDUGZDUH
7;(IODJ FOHDUHGE\VRIWZDUH FOHDUHGE\VRIWZDUH VHWE\KDUGZDUH
VHWE\KDUGZDUH FOHDUHGE\VRIWZDUH
5;1(IODJ
Note: During discontinuous communications, there is a 2 APB clock period delay between the
write operation to the SPI_DR register and BSY bit setting. As a consequence it is
mandatory to wait first until TXE is set and then until BSY is cleared after writing the last
data.
The correct disable procedure for certain receive-only modes is:
1. Interrupt the receive flow by disabling SPI (SPE=0) in the specific time window while
the last data frame is ongoing.
2. Wait until BSY=0 (the last data frame is processed).
3. Read received data.
Note: To stop a continuous receive sequence, a specific time window must be respected during
the reception of the last data frame. It starts when the first bit is sampled and ends before
the last bit transfer starts.
6&.
VHWE\KDUGZDUH VHWE\KDUGZDUH
UHVHW
%6<IODJ VHWE\KDUGZDUH E\KDUGZDUH
'0$UHTXHVW LJQRUHGE\WKH'0$EHFDXVH
'0$WUDQVIHULVFRPSOHWH
'0$ZULWHVWR63,B'5
VHWE\KDUGZDUH FOHDUE\VRIWZDUH
'0$7&,)IODJ
'0$WUDQVIHUFRPSOHWH
6&.
VHWE\KDUGZDUH FOHDUE\'0$UHDG
5;1(IODJ
'0$UHTXHVW
5[EXIIHU
[$ [$ [$
UHDGIURP63,B'5
'0$UHDGIURP63,B'5
FOHDU
VHWE\KDUGZDUH
IODJ'0$7&,) E\VRIWZDUH
'0$WUDQVIHUFRPSOHWH
The BSY flag is cleared under any one of the following conditions:
• When the SPI is correctly disabled
• When a fault is detected in Master mode (MODF bit set to 1)
• In Master mode, when it finishes a data transmission and no new data is ready to be
sent
• In Slave mode, when the BSY flag is set to '0' for at least one SPI clock cycle between
each data transfer.
Note: It is recommended to use always the TXE and RXNE flags (instead of the BSY flags) to
handle data transmission or reception operations.
29.4.1 TI mode
TI protocol in master mode
The SPI interface is compatible with the TI protocol. The FRF bit of the SPIx_CR2 register
can be used to configure the SPI to be compliant with this protocol.
The clock polarity and phase are forced to conform to the TI protocol requirements whatever
the values set in the SPIx_CR1 register. NSS management is also specific to the TI protocol
which makes the configuration of NSS management through the SPIx_CR1 and SPIx_CR2
registers (SSM, SSI, SSOE) impossible in this case.
In slave mode, the SPI baud rate prescaler is used to control the moment when the MISO
pin state changes to HiZ when the current transaction finishes (see Figure 329). Any baud
rate can be used, making it possible to determine this moment with optimal flexibility.
However, the baud rate is generally set to the external master clock baud rate. The delay for
the MISO signal to become HiZ (trelease) depends on internal resynchronization and on the
baud rate value set in through the BR[2:0] bits in the SPIx_CR1 register. It is given by the
formula:
t baud_rate t baud_rate
---------------------
- + 4 × t pclk < t release < ---------------------
- + 6 × t pclk
2 2
If the slave detects a misplaced NSS pulse during a data frame transaction the TIFRE flag is
set.
This feature is not available for Motorola SPI communications (FRF bit set to 0).
Note: To detect TI frame errors in slave transmitter only mode by using the Error interrupt
(ERRIE=1), the SPI must be configured in 2-line unidirectional mode by setting BIDIMODE
and BIDIOE to 1 in the SPI_CR1 register. When BIDIMODE is set to 0, OVR is set to 1
because the data register is never read and error interrupts are always generated, while
when BIDIMODE is set to 1, data are not received and OVR is never set.
Figure 329 shows the SPI communication waveforms when TI mode is selected.
166
WUL QJ
J
W 5(/($6(
LQ
LQ
L
HU
HU
VD U
SO
SO
SO
H
JJ
JJ
JJ
P
P
VD
VD
WUL
WU L
6&.
)5$0( )5$0(
069
CRC principle
CRC calculation is enabled by setting the CRCEN bit in the SPIx_CR1 register before the
SPI is enabled (SPE = 1). The CRC value is calculated using an odd programmable
polynomial on each bit. The calculation is processed on the sampling clock edge defined by
the CPHA and CPOL bits in the SPIx_CR1 register. The calculated CRC value is checked
automatically at the end of the data block as well as for transfer managed by CPU or by the
DMA. When a mismatch is detected between the CRC calculated internally on the received
data and the CRC sent by the transmitter, a CRCERR flag is set to indicate a data corruption
error. The right procedure for handling the CRC calculation depends on the SPI
configuration and the chosen transfer management.
Note: The polynomial value should only be odd. No even values are supported.
The received CRC is stored in the Rx buffer like any other data frame.
A CRC-format transaction takes one more data frame to communicate at the end of data
sequence.
When the last CRC data is received, an automatic check is performed comparing the
received value and the value in the SPIx_RXCRC register. Software has to check the
CRCERR flag in the SPIx_SR register to determine if the data transfers were corrupted or
not. Software clears the CRCERR flag by writing '0' to it.
After the CRC reception, the CRC value is stored in the Rx buffer and must be read in the
SPIx_DR register in order to clear the RXNE flag.
$GGUHVVDQGGDWDEXV
7[EXIIHU
&5& &+
%6< 295 02') 8'5 7[( 5[1( )5(
(55 6,'(
ELW
026,6'
-)3/ 6KLIWUHJLVWHU
)3EXT?3$ /6%ILUVW &RPPXQLFDWLRQ
)3EXT?3$ ELW FRQWURO
5[EXIIHU
166:6
,6
02' ,6(
0DVWHUFRQWUROORJLF
%LGL %LGL &5& &5& 5[
')) 660 66,
PRGH 2( (1 1H[W RQO\
63, /6%
63( %5 %5 %5 0675 &32/ &3+$
EDXGUDWHJHQHUDWRU )LUVW
&.
,6FORFNJHQHUDWRU
,6B&.
,602'
0&. ,6[&/.
0&.2( 2'' ,6',9>@
069
1. I2S2ext_SD and I2S3ext_SD are the extended SD pins that control the I2S full-duplex mode.
2. MCK is mapped on the MISO pin.
The SPI can function as an audio I2S interface when the I2S capability is enabled (by setting
the I2SMOD bit in the SPIx_I2SCFGR register). This interface mainly uses the same pins,
flags and interrupts as the SPI.
The I2S shares three common pins with the SPI:
• SD: Serial Data (mapped on the MOSI pin) to transmit or receive the two time-
multiplexed data channels (in half-duplex mode only).
• WS: Word Select (mapped on the NSS pin) is the data control signal output in master
mode and input in slave mode.
• CK: Serial Clock (mapped on the SCK pin) is the serial clock output in master mode
and serial clock input in slave mode.
An additional pin can be used when a master clock output is needed for some external
audio devices:
• MCK: Master Clock (mapped separately) is used, when the I2S is configured in master
mode (and when the MCKOE bit in the SPIx_I2SPR register is set), to output this
additional clock generated at a preconfigured frequency rate equal to 256 × fS, where
fS is the audio sampling frequency.
The I2S uses its own clock generator to produce the communication clock when it is set in
master mode. This clock generator is also the source of the master clock output. Two
additional registers are available in I2S mode. One is linked to the clock generator
configuration SPIx_I2SPR and the other one is a generic I2S configuration register
SPIx_I2SCFGR (audio standard, slave/master mode, data format, packet frame, clock
polarity, etc.).
The SPIx_CR1 register and all CRC registers are not used in the I2S mode. Likewise, the
SSOE bit in the SPIx_CR2 register and the MODF and CRCERR bits in the SPIx_SR are
not used.
The I2S uses the same SPI register for data transfer (SPIx_DR) in 16-bit wide mode.
,6[B6&.
,6B:6
,6[BH[W ,6[BH[W6' LQRXW
069
1. Where x can be 2 or 3.
Figure 332. I2S Philips protocol waveforms (16/32-bit full accuracy, CPOL = 0)
&.
:6 WUDQVPLVVLRQ UHFHSWLRQ
&DQEHELWRUELW
&KDQQHOOHIW
&KDQQHO
ULJKW
069
Data are latched on the falling edge of CK (for the transmitter) and are read on the rising
edge (for the receiver). The WS signal is also latched on the falling edge of CK.
Figure 333. I2S Philips standard waveforms (24-bit frame with CPOL = 0)
&.
:6 7UDQVPLVVLRQ 5HFHSWLRQ
ELWGDWD ELWUHPDLQLQJIRUFHG
6'
06% /6%
&KDQQHOOHIWELW
&KDQQHOULJKW
069
This mode needs two write or read operations to/from the SPIx_DR register.
• In transmission mode:
If 0x8EAA33 has to be sent (24-bit):
)LUVWZULWHWR'DWDUHJLVWHU 6HFRQGZULWHWR'DWDUHJLVWHU
[($$ [;;
2QO\WKH06%DUHVHQW
WRFRPSDUHWKHELWV
/6%VKDYHQRPHDQLQJ
DQGFDQEHDQ\WKLQJ
069
• In reception mode:
If data 0x8EAA33 is received:
069
Figure 336. I2S Philips standard (16-bit extended to 32-bit packet frame with
CPOL = 0)
&.
:6 7UDQVPLVVLRQ 5HFHSWLRQ
ELWGDWD ELWUHPDLQLQJIRUFHG
6'
06% /6%
&KDQQHOOHIWELW
&KDQQHOULJKW
069
2
When 16-bit data frame extended to 32-bit channel frame is selected during the I S
configuration phase, only one access to the SPIx_DR register is required. The 16 remaining
bits are forced by hardware to 0x0000 to extend the data to 32-bit format.
If the data to transmit or the received data are 0x76A3 (0x76A30000 extended to 32-bit), the
operation shown in Figure 337 is required.
Figure 337. Example of 16-bit data frame extended to 32-bit channel frame
2QO\RQHDFFHVVWR63,[B'5
[$
069
For transmission, each time an MSB is written to SPIx_DR, the TXE flag is set and its
interrupt, if allowed, is generated to load the SPIx_DR register with the new value to send.
This takes place even if 0x0000 have not yet been sent because it is done by hardware.
For reception, the RXNE flag is set and its interrupt, if allowed, is generated when the first
16 MSB half-word is received.
In this way, more time is provided between two write or read operations, which prevents
underrun or overrun conditions (depending on the direction of the data transfer).
Figure 338. MSB Justified 16-bit or 32-bit full-accuracy length with CPOL = 0
&.
:6 7UDQVPLVVLRQ 5HFHSWLRQ
RUELWGDWD
6'
06% /6% 06%
&KDQQHOOHIW
&KDQQHOULJKW
069
Data are latched on the falling edge of CK (for transmitter) and are read on the rising edge
(for the receiver).
&.
:6 7UDQVPLVVLRQ 5HFHSWLRQ
ELWGDWD ELWUHPDLQLQJ
6' IRUFHG
06% /6%
&KDQQHOOHIWELW
&KDQQHOULJKW
069
Figure 340. MSB justified 16-bit extended to 32-bit packet frame with CPOL = 0
&.
:6 7UDQVPLVVLRQ 5HFHSWLRQ
ELWGDWD ELWUHPDLQLQJ
6' IRUFHG
06% /6%
&KDQQHOOHIWELW
&KDQQHOULJKW
069
&.
:6
7UDQVPLVVLRQ 5HFHSWLRQ
RUELWGDWD
6'
06% /6% 06%
&KDQQHOOHIW
&KDQQHOULJKW
069
&.
:6 5HFHSWLRQ
7UDQVPLVVLRQ
ELWGDWD ELWUHPDLQLQJ
6' IRUFHG
06% /6%
&KDQQHOOHIWELW
&KDQQHOULJKW
069
• In transmission mode:
If data 0x3478AE have to be transmitted, two write operations to the SPIx_DR register
are required by software or by DMA. The operations are shown below.
)LUVWZULWHWR'DWDUHJLVWHU 6HFRQGZULWHWR'DWDUHJLVWHU
FRQGLWLRQHGE\7;( FRQGLWLRQHGE\7;(
[;; [$(
2QO\WKH/6%RIWKH
KDOIZRUGDUHVLJQLILFDQW
$ILHOGRI[LVIRUFHG
LQVWHDGRIWKH06%V 069
• In reception mode:
If data 0x3478AE are received, two successive read operations from the SPIx_DR
register are required on each RXNE event.
[;; [$(
2QO\WKH/6%RIWKH
KDOIZRUGDUHVLJQLILFDQW
$ILHOGRI[LVIRUFHG
LQVWHDGRIWKH06%V
069
Figure 345. LSB justified 16-bit extended to 32-bit packet frame with CPOL = 0
&.
5HFHSWLRQ
:6
7UDQVPLVVLRQ
ELWGDWD ELWUHPDLQLQJ
6' IRUFHG
06% /6%
&KDQQHOOHIWELW
&KDQQHOULJKW
069
When 16-bit data frame extended to 32-bit channel frame is selected during the I2S
configuration phase, Only one access to the SPIx_DR register is required. The 16 remaining
bits are forced by hardware to 0x0000 to extend the data to 32-bit format. In this case it
corresponds to the half-word MSB.
If the data to transmit or the received data are 0x76A3 (0x0000 76A3 extended to 32-bit),
the operation shown in Figure 346 is required.
Figure 346. Example of 16-bit data frame extended to 32-bit channel frame
2QO\RQHDFFHVVWRWKH63,['5UHJLVWHU
[$
069
In transmission mode, when a TXE event occurs, the application has to write the data to be
transmitted (in this case 0x76A3). The 0x000 field is transmitted first (extension on 32-bit).
The TXE flag is set again as soon as the effective data (0x76A3) is sent on SD.
In reception mode, RXNE is asserted as soon as the significant half-word is received (and
not the 0x0000 field).
In this way, more time is provided between two write or read operations to prevent underrun
or overrun conditions.
PCM standard
For the PCM standard, there is no need to use channel-side information. The two PCM
modes (short and long frame) are available and configurable using the PCMSYNC bit in
SPIx_I2SCFGR register.
&.
:6
VKRUWIUDPH
ELWV
:6
ORQJIUDPH
069
For long frame synchronization, the WS signal assertion time is fixed to 13 bits in master
mode.
For short frame synchronization, the WS synchronization signal is only one cycle long.
Figure 348. PCM standard waveforms (16-bit extended to 32-bit packet frame)
&.
:6
VKRUWIUDPH
8SWRELWV
:6
ORQJIUDPH
ELWV
069
Note: For both modes (master and slave) and for both synchronizations (short and long), the
number of bits between two consecutive pieces of data (and so two synchronization signals)
needs to be specified (DATLEN and CHLEN bits in the SPIx_I2SCFGR register) even in
slave mode.
RUELWOHIW RUELW
FKDQQHO ULJKWFKDQQHO
RUELWV
)6
VDPSOLQJSRLQW VDPSOLQJSRLQW
)6DXGLRVDPSOLQJIUHTXHQF\
069
When the master mode is configured, a specific action needs to be taken to properly
program the linear divider in order to communicate with the desired audio frequency.
Figure 350 presents the communication clock architecture. The I2Sx clock is always the
system clock.
0&.
,ð6[&/. ELWOLQHDUGLYLGHU
UHVKDSLQJVWDJH
'LY
'LYLGHUE\ &.
0&.2(
,ð602'
&+/(1
0&.2( 2'' ,ð6',9>@
069
1. Where x = 2.
The audio sampling frequency may be 192 KHz, 96 kHz, 48 kHz, 44.1 kHz, 32 kHz,
22.05 kHz, 16 kHz, 11.025 kHz or 8 kHz (or any other value within this range). In order to
reach the desired frequency, the linear divider needs to be programmed according to the
formulas below:
When the master clock is generated (MCKOE in the SPIx_I2SPR register is set):
fS = I2SxCLK / [(16*2)*((2*I2SDIV)+ODD)*8)] when the channel frame is 16-bit wide
fS = I2SxCLK / [(32*2)*((2*I2SDIV)+ODD)*4)] when the channel frame is 32-bit wide
When the master clock is disabled (MCKOE bit cleared):
fS = I2SxCLK / [(16*2)*((2*I2SDIV)+ODD))] when the channel frame is 16-bit wide
fS = I2SxCLK / [(32*2)*((2*I2SDIV)+ODD))] when the channel frame is 32-bit wide
Table 176 provides example precision values for different clock configurations.
Note: Other configurations are possible that allow optimum clock precision.
Procedure
1. Select the I2SDIV[7:0] bits in the SPIx_I2SPR register to define the serial clock baud
rate to reach the proper audio sample frequency. The ODD bit in the SPIx_I2SPR
register also has to be defined.
2. Select the CKPOL bit to define the steady level for the communication clock. Set the
MCKOE bit in the SPIx_I2SPR register if the master clock MCK needs to be provided
to the external ADC audio component (the I2SDIV and ODD values should be
computed depending on the state of the MCK output, for more details refer to
Section 29.6.4: Clock generator).
3. Set the I2SMOD bit in the SPIx_I2SCFGR register to activate the I2S functions and
choose the I2S standard through the I2SSTD[1:0] and PCMSYNC bits, the data length
through the DATLEN[1:0] bits and the number of bits per channel by configuring the
CHLEN bit. Select also the I2S master mode and direction (Transmitter or Receiver)
through the I2SCFG[1:0] bits in the SPIx_I2SCFGR register.
4. If needed, select all the potential interrupt sources and the DMA capabilities by writing
the SPIx_CR2 register.
5. The I2SE bit in SPIx_I2SCFGR register must be set.
WS and CK are configured in output mode. MCK is also an output, if the MCKOE bit in
SPIx_I2SPR is set.
Transmission sequence
The transmission sequence begins when a half-word is written into the Tx buffer.
Lets assume the first data written into the Tx buffer corresponds to the left channel data.
When data are transferred from the Tx buffer to the shift register, TXE is set and data
corresponding to the right channel have to be written into the Tx buffer. The CHSIDE flag
indicates which channel is to be transmitted. It has a meaning when the TXE flag is set
because the CHSIDE flag is updated when TXE goes high.
A full frame has to be considered as a left channel data transmission followed by a right
channel data transmission. It is not possible to have a partial frame where only the left
channel is sent.
The data half-word is parallel loaded into the 16-bit shift register during the first bit
transmission, and then shifted out, serially, to the MOSI/SD pin, MSB first. The TXE flag is
set after each transfer from the Tx buffer to the shift register and an interrupt is generated if
the TXEIE bit in the SPIx_CR2 register is set.
For more details about the write operations depending on the I2S Standard-mode selected,
refer to Section 29.6.3: Supported audio protocols).
Reception sequence
The operating mode is the same as for transmission mode except for the point 3 (refer to the
procedure described in Section 29.6.5: I2S master mode), where the configuration should
set the master reception mode through the I2SCFG[1:0] bits.
Whatever the data or channel length, the audio data are received by 16-bit packets. This
means that each time the Rx buffer is full, the RXNE flag is set and an interrupt is generated
if the RXNEIE bit is set in SPIx_CR2 register. Depending on the data and channel length
configuration, the audio value received for a right or left channel may result from one or two
receptions into the Rx buffer.
Clearing the RXNE bit is performed by reading the SPIx_DR register.
CHSIDE is updated after each reception. It is sensitive to the WS signal generated by the
I2S cell.
For more details about the read operations depending on the I2S Standard-mode selected,
refer to Section 29.6.3: Supported audio protocols.
If data are received while the previously received data have not been read yet, an overrun is
generated and the OVR flag is set. If the ERRIE bit is set in the SPIx_CR2 register, an
interrupt is generated to indicate the error.
To switch off the I2S, specific actions are required to ensure that the I2S completes the
transfer cycle properly without initiating a new data transfer. The sequence depends on the
configuration of the data and channel lengths, and on the audio protocol mode selected. In
the case of:
• 16-bit data length extended on 32-bit channel length (DATLEN = 00 and CHLEN = 1)
using the LSB justified mode (I2SSTD = 10)
a) Wait for the second to last RXNE = 1 (n – 1)
b) Then wait 17 I2S clock cycles (using a software loop)
c) Disable the I2S (I2SE = 0)
• 16-bit data length extended on 32-bit channel length (DATLEN = 00 and CHLEN = 1) in
MSB justified, I2S or PCM modes (I2SSTD = 00, I2SSTD = 01 or I2SSTD = 11,
respectively)
a) Wait for the last RXNE
b) Then wait 1 I2S clock cycle (using a software loop)
c) Disable the I2S (I2SE = 0)
• For all other combinations of DATLEN and CHLEN, whatever the audio mode selected
through the I2SSTD bits, carry out the following sequence to switch off the I2S:
a) Wait for the second to last RXNE = 1 (n – 1)
b) Then wait one I2S clock cycle (using a software loop)
c) Disable the I2S (I2SE = 0)
Note: The BSY flag is kept low during transfers.
Transmission sequence
The transmission sequence begins when the external master device sends the clock and
when the NSS_WS signal requests the transfer of data. The slave has to be enabled before
the external master starts the communication. The I2S data register has to be loaded before
the master initiates the communication.
For the I2S, MSB justified and LSB justified modes, the first data item to be written into the
data register corresponds to the data for the left channel. When the communication starts,
the data are transferred from the Tx buffer to the shift register. The TXE flag is then set in
order to request the right channel data to be written into the I2S data register.
The CHSIDE flag indicates which channel is to be transmitted. Compared to the master
transmission mode, in slave mode, CHSIDE is sensitive to the WS signal coming from the
external master. This means that the slave needs to be ready to transmit the first data
before the clock is generated by the master. WS assertion corresponds to left channel
transmitted first.
Note: The I2SE has to be written at least two PCLK cycles before the first clock of the master
comes on the CK line.
The data half-word is parallel-loaded into the 16-bit shift register (from the internal bus)
during the first bit transmission, and then shifted out serially to the MOSI/SD pin MSB first.
The TXE flag is set after each transfer from the Tx buffer to the shift register and an interrupt
is generated if the TXEIE bit in the SPIx_CR2 register is set.
Note that the TXE flag should be checked to be at 1 before attempting to write the Tx buffer.
For more details about the write operations depending on the I2S Standard-mode selected,
refer to Section 29.6.3: Supported audio protocols.
Reception sequence
The operating mode is the same as for the transmission mode except for the point 1 (refer to
the procedure described in Section 29.6.6: I2S slave mode), where the configuration should
set the master reception mode using the I2SCFG[1:0] bits in the SPIx_I2SCFGR register.
Whatever the data length or the channel length, the audio data are received by 16-bit
packets. This means that each time the RX buffer is full, the RXNE flag in the SPIx_SR
register is set and an interrupt is generated if the RXNEIE bit is set in the SPIx_CR2
register. Depending on the data length and channel length configuration, the audio value
received for a right or left channel may result from one or two receptions into the RX buffer.
The CHSIDE flag is updated each time data are received to be read from the SPIx_DR
register. It is sensitive to the external WS line managed by the external master component.
Clearing the RXNE bit is performed by reading the SPIx_DR register.
For more details about the read operations depending the I2S Standard-mode selected,
refer to Section 29.6.3: Supported audio protocols.
If data are received while the preceding received data have not yet been read, an overrun is
generated and the OVR flag is set. If the bit ERRIE is set in the SPIx_CR2 register, an
interrupt is generated to indicate the error.
To switch off the I2S in reception mode, I2SE has to be cleared immediately after receiving
the last RXNE = 1.
Note: The external master components should have the capability of sending/receiving data in 16-
bit or 32-bit packets via an audio channel.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BIDI BIDI CRC CRC RX LSB
DFF SSM SSI SPE BR [2:0] MSTR CPOL CPHA
MODE OE EN NEXT ONLY FIRST
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Res. Res. Res. Res. Res. Res. Res. Res. TXEIE RXNEIE ERRIE FRF Res. SSOE TXDMAEN RXDMAEN
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DR[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ASTRE PCMSY
Res. Res. Res. I2SMOD I2SE I2SCFG Res. I2SSTD CKPOL DATLEN CHLEN
N NC
rw rw rw rw rw rw rw rw rw rw rw rw
0x1C
0x0C
Offset
986/1324
29.7.10
SPI_SR
SPI_DR
Register
SPI_CR2
SPI_CR1
SPI_I2SPR
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
SPI_CRCPR
SPI_TXCRCR
SPI_RXCRCR
SPI_I2SCFGR
Res. Res. Res. Res. Res. Res. Res. Res. Res. 31
Res. Res. Res. Res. Res. Res. Res. Res. Res. 30
Res. Res. Res. Res. Res. Res. Res. Res. Res. 29
Res. Res. Res. Res. Res. Res. Res. Res. Res. 28
SPI register map
RM0430 Rev 8
Res. Res. Res. Res. Res. Res. Res. Res. Res. 17
Res. Res. Res. Res. Res. Res. Res. Res. Res. 16
Res. Res. Res. Res. BIDIMODE 15
Res. Res. Res. Res. BIDIOE 14
Res. Res. Res. Res. CRCEN 13
Res. ASTREN Res. Res. CRCNEXT 12
Table 178. SPI register map and reset values
0 0 0 0 0 0
PCMSYNC BSY TXEIE LSBFIRST 7
DR[15:0]
TxCRC[15:0]
RxCRC[15:0]
MODF ERRIE
CRCPOLY[15:0]
I2SSTD 5
0 0 0 0
CRCERR FRF
BR
4
[2:0]
I2SDIV
CHSIDE SSOE MSTR 2
DATLEN
TXE TXDMAEN CPOL 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0 0 1 0
0 0 0
RM0430
30.1 Introduction
The SAI interface (serial audio interface) offers a wide set of audio protocols due to its
flexibility and wide range of configurations. Many stereo or mono audio applications may be
targeted. I2S standards, LSB or MSB-justified, PCM/DSP, TDM, and AC’97 protocols may
be addressed for example.
To bring this level of flexibility and configurability, the SAI contains two audio sub-blocks that
are fully independent of each other. Each audio sub-block is connected to up to 4 pins (SD,
SCK, FS, MCLK). Some of these pins can be shared if the two sub-blocks are declared as
synchronous to leave some free to be used as general purpose I/Os. The MCLK pin can be
output, or not, depending on the application, the decoder requirement and whether the
audio block is configured as the master.
The SAI can work in master or slave configuration. The audio sub-blocks can be either
receiver or transmitter and can work synchronously or not (with respect to the other one).
$3%
6HULDO$XGLR,QWHUIDFH
6$, $3%LQWHUIDFH
6$,B;&5 $XGLREORFN$
V\QFKUR LQWBVFN
),)2FWUO FWUORXW
LQWB)6
),)2
)6B$
6$,B&.B$ &ORFNJHQHUDWRU )60
&RQILJXUDWLRQ 6&.B$
$XGLREORFN$ 6'B$
,2OLQH0DQDJHPHQW
UHJLVWHUVDQG
6WDWXVUHJLVWHU 0&/.B$
ELWVKLIWUHJLVWHU
$XGLREORFN%
),)2FWUO )6B%
6$,B&.B% &ORFNJHQHUDWRU ),)2
6&.B%
$XGLREORFN% 6'B%
)60 0&/.B%
&RQILJXUDWLRQ
UHJLVWHUVDQG
6WDWXVUHJLVWHU ELWVKLIWUHJLVWHU
6$,B;&5
$3%LQWHUIDFH
$3%
069
The SAI is mainly composed of two audio sub-blocks with their own clock generator. Each
audio block integrates a 32-bit shift register controlled by their own functional state machine.
Data are stored or read from the dedicated FIFO. FIFO may be accessed by the CPU, or by
DMA in order to leave the CPU free during the communication. Each audio block is
independent. They can be synchronous with each other.
An I/O line controller manages each dedicated pins for a given audio block in the SAI. If the
two blocks are synchronized, this controller reduces the number of I/Os used, freeing up an
FS pin, an SCK pin and eventually an MCLK pin, making them general purpose I/Os.
The functional state machine can be configured to address a wide range of audio protocols.
Some registers are present to set-up the desired protocols (audio frame waveform
generator).
The audio block can be a transmitter or receiver, in master or slave mode. The master mode
means the bit clock SCK and the frame synchronization signal are generated from the SAI,
whereas in slave mode, they come from another external or internal master. There is a
particular case for which the FS signal direction is not directly linked to the master or slave
mode definition. In AC’97 protocol, it will be an SAI output even if the SAI (link controller) is
set-up to consume the SCK clock (and so to be in Slave mode).
&S
SCK
-36
In AC’97 mode (bit PRTCFG[1:0] = 10 in the SAI_xCR1 register), the frame synchronization
shape is forced to be configured to target these protocols. The SAI_xFRCR register value is
ignored.
Each audio block is independent and so each requires a specific configuration.
flow.
Figure 353. FS role is start of frame + channel side identification (FSDEF = TRIS = 1)
1XPEHURIVORWVQRWDOLJQHGZLWKWKHDXGLRIUDPH
$XGLRIUDPH
+DOIRIIUDPH
)6
VFN
1XPEHURIVORWVDOLJQHGZLWKWKHDXGLRIUDPH
$XGLRIUDPH
+DOIRIIUDPH
)6
VFN
$XGLRIUDPH
VFN
'DWD DIWHUVORWQLI75,6
6'RXWSXWUHOHDVHG +,= DIWHUVORWQLI75,6
069
$XGLREORFNLVWUDQVPLWWHU $XGLREORFNLVUHFHLYHU
GDWDVL]H GDWDVL]H
ELW ELW
ELW ELW
;GRQ¶WFDUH
069
It is possible to choose the position of the first data bit to transfer within the slots, this offset
is configured by bit FBOFF[5:0] in the SAI_xSLOTR register. 0 values will be injected in
transmitter mode from the beginning of the slot until this offset position is reached. In
reception, the bit in the offset phase is ignored. This feature targets the LSB justified
protocol (if the offset is equal to the slot size minus the data size).
$XGLREORFNLVWUDQVPLWWHU $XGLREORFNLVUHFHLYHU
GDWDVL]H GDWDVL]H
)%2)) )%2))
GDWDVL]H ;; GDWDVL]H ;;
ELW ELW
;GRQ¶WFDUH
069
It is mandatory to respect the following conditions in order to avoid bad SAI behavior:
FBOFF ≤(SLOTSZ - DS),
DS ≤SLOTSZ,
NBSLOT x SLOTSZ ≤FRL (frame length),
The number of slots should be even when bit FSDEF in the SAI_xFRCR register is set.
In AC’97 (bit PRTCFG[1:0] = 10), the slot size is automatically set as defined in
Section 30.11.
12',9
0&/.B[
0&.',9>@
)5/>@
12',9 12',9
6$,B&.B[
0DVWHUFORFN
GLYLGHU %LWFORFNGLYLGHU 6&.B[
069
Note: If NoDiv is set to 1, the MCLK_x signal will be set at 0 level if this pin is configured as the
SAI pin in GPIO peripherals.
The clock source for the clock generator comes from the product clock controller. The
SAI_CK_x clock is equivalent to the master clock which may be divided for the external
decoders using bit MCKDIV[3:0]:
MCLK_x = SAI_CK_x / (MCKDIV[3:0] * 2), if MCKDIV[3:0] is not equal to 0000.
MCLK_x = SAI_CK_x, if MCKDIV[3:0] is equal to 0000.
MCLK_x signal is used only in TDM.
The division must be even in order to keep 50% on the Duty cycle on the MCLK output and
on the SCK_x clock. If bit MCKDIV[3:0] = 0000, division by one is applied to have MCLK_x
= SAI_CK_x.
In the SAI, the single ratio MCLK/FS = 256 is considered. Mostly, three frequency ranges
will be encountered as illustrated in the Table 179.
The master clock may be generated externally on an I/O pad for external decoders if the
corresponding audio block is declared as master with bit NODIV = 0 in the SAI_xCR1
register. In slave, the value set in this last bit is ignored since the clock generator is OFF,
and the MCLK_x I/O pin is released for use as a general purpose I/O.
The bit clock is derived from the master clock. The bit clock divider sets the divider factor
between the bit clock SCK_x and the master clock MCLK_x following the formula:
SCK_x = MCLK x (FRL[7:0] +1) / 256
where:
256 is the fixed ratio between MCLK and the audio frequency sampling.
FRL[7:0] is the number of bit clock - 1 in the audio frame, configured in the SAI_xFRCR
register.
It is mandatory in master mode that (FRL[7:0] +1) should be equal to a number with a power
of 2 (refer to Section 30.7) in order to have an even integer number of MCLK_x pulses by bit
clock. The 50% duty cycle is guaranteed on the bit clock SCK_x.
The SAI_CK_x clock can be also equal to the bit clock frequency. In this case, bit NODIV in
the SAI_xCR1 register should be set and the value inside the MCKDIV divider and the bit
clock divider will be ignored. In this case, the number of bits per frame is fully configurable
without the need to be equal to a power of two.
The bit clock strobing edge on SCK can be configured by bit CKSTR in the SAI_xCR1
register.
An interrupt is generated if FREQIE bit is enabled in the SAI_xIM register. This depends on:
• FIFO threshold setting (FLTH bits in SAI_CR2)
• Communication direction transmitter or receiver (see Section : Interrupt generation in
transmitter mode and Section : Interrupt generation in reception mode)
(FLTH[2:0] bits in SAI_xSR is higher or equal to 010b). This Interrupt (FREQ bit in
SAI_XSR register) is cleared by hardware when less than a quarter of the FIFO data
locations become available (FLTH[2:0] bits in SAI_xSR is less than 010b).
• When the FIFO threshold bits in SAI_XCR2 register are configured as FIFO half fully
(FTH[2:0] set to 010b value), an interrupt is generated (FREQ bit is set by hardware to 1
in SAI_XSR register) if at least half of the FIFO data locations are available (FLTH[2:0]
bits in SAI_xSR is higher or equal to 011b). This Interrupt (FREQ bit in SAI_XSR register)
is cleared by hardware when less than half of the FIFO data locations become available
(FLTH[2:0] bits in SAI_xSR is less than 011b).
• When the FIFO threshold bits in SAI_XCR2 register are configured as FIFO three quarter
full(FTH[2:0] set to 011b value), an interrupt is generated (FREQ bit is set by hardware to
1 in SAI_XSR register) if at least three quarters of the FIFO data locations are available
(FLTH[2:0] bits in SAI_xSR is higher or equal to 100b). This Interrupt (FREQ bit in
SAI_XSR register) is cleared by hardware when the FIFO has less than three quarters of
the FIFO data locations avalable(FLTH[2:0] bits in SAI_xSR is less than 100b).
• When the FIFO threshold bits in SAI_XCR2 register are configured as FIFO full(FTH[2:0]
set to 100b), an interrupt is generated (FREQ bit is set by hardware to 1 in SAI_XSR
register) if the FIFO is full (FLTH[2:0] bits in SAI_xSR is equal to 101b). This Interrupt
(FREQ bit in SAI_XSR register) is cleared by hardware when the FIFO is not full
(FLTH[2:0] bits in SAI_xSR is less than 101b).
Like interrupt generation, the SAI can use the DMA if DMAEN bit in the SAI_xCR1 register is
set. The FREQ bit assertion mechanism is the same as the interruption generation
mechanism described above for FREQIE.
Each FIFO is an 8-word FIFO. Each read or write operation from/to the FIFO targets one
word FIFO allocation whatever the access size. Each FIFO word contains one audio frame.
FIFO pointers are incremented by one word after each access to the SAI_xDR register.
Data should be right aligned when it is written in the SAI_xDR.
Data received will be right aligned in the SAI_xDR.
The FIFO pointers can be reinitialized when the SAI is disabled by setting bit FFLUSH in the
SAI_xCR2 register. If FFLUSH is set when the SAI is enabled the data present in the FIFO
will be lost automatically.
)6
&0' &0' 3&0 3&0 /,1( 3&0 3&0 3&0 3&0 /,1( +6(7 ,2
6', 7DJ $''5 '$7$ /)5217 5)5217 '$& &(17(5 /6855 56855 /)( '$& '$& &75/
67$786 67$786 3&0 3&0 /,1( 3&0 565 565 565 /,1( ,2
7DJ +6(7
6'2 $''5 '$7$ /()7 5,*+7 $'& 0,& 9' 9' /9' $'& 67$786
069
Note: In AC’97 protocol, bit 2 of the tag is reserved (always 0), so whatever the value written in the
SAI FIFO, bit 2 of the TAG is forced to 0 level.
For more details about TAG representation, please refer to the AC’97 protocol standard.
One SAI can be used to target an AC’97 point-to-point communication.
In receiver mode, the SAI acting as an AC’97 link controller will require no FIFO request and
so no data storage in the FIFO when the codec ready bit in the slot 0 is decoded low. If bit
CNRDYIE is enabled in the SAI_xIM register, flag CNRDY will be set in the SAI_xSR
register and an interrupt is generated. This flag is dedicated to the AC’97 protocol.
Transmitter
In transmitter mode, Mute mode can be selected at anytime. Mute mode is active for entire
audio frames. The bit MUTE in the SAI_xCR2 register requests Mute mode when it is set
during an on-going frame.
The mute mode bit is strobed only at the end of the frame. If set at this time, the mute mode
is active at the beginning of the new audio frame, for a complete frame, until the next end of
frame, it then strobes the bit to determine if the next frame will still be a mute frame.
If the number of slots set in bit NBSLOT[3:0] in the SAI_xSLOTR register is lower than or
equal to two, it is possible to specify if the value sent during the Mute mode is 0 or if it is the
last value of each slot. The selection is done via bit MUTEVAL in the SAI_xCR2 register.
If the number of slots set in bit NBSLOT[3:0] in the SAI_xSLOTR register is greater than
two, MUTEVAL bit in the SAI_xCR2 has no meaning as 0 values are sent on each bit on
each slot.
During Mute mode, the FIFO pointers are still incremented, meaning that data which was
present in the FIFO and for which the Mute mode is requested is discarded.
Receiver
In receiver mode, it is possible to detect a Mute mode sent from the external transmitter
when all the declared and valid slots of the audio frame receive 0 for a given consecutive
number of audio frames (bit MUTECNT[5:0] in the SAI_xCR2 register).
When the number of MUTE frames is detected, flag MUTEDET in the SAI_xSR register is
set and an interrupt can be generated if bit MUTEDETIE is set in the SAI_xCR2.
The mute frame counter is cleared when the audio block is disabled or when a valid slot
receives at least one data in an audio frame. The interrupt is generated just once, when the
counter reaches the specified value in bit MUTECNT[5:0]. Then the interrupt event is re-
armed when the counter is cleared.
&203>@
H[SDQG 6'
),)2 ELWVKLIWUHJLVWHU
6'
),)2 ELWVKLIWUHJLVWHU
FRPSUHVV
&203>@
069
$XGLRIUDPH
SCK
6ORWVL]H GDWDVL]H
VORW 3LOT /. 3LOT /&& 3LOT /&& 3LOT /. /. /. 3LOT N /.
6ORWVL]H!GDWDVL]H
%LW75,6 LQWKH6$,B[&5DQGIUDPHOHQJWK!QXPEHURIVORWV
$XGLRIUDPH
SCK
6ORWVL]H GDWDVL]H
VORW 3LOT /. 3LOT /&& 3LOT /&& /. 3LOT N /.
6ORWVL]H!GDWDVL]H
VORW 3LOT /. 3LOT /&& 3LOT /&& /. 3LOT N /.
069
When the selected audio protocol uses the FS signal as a start of frame and a channel side
identification (bit FSDEF = 1 in the SAI_xFRCR register), the tristate mode is managed
according to Figure 361 (where bit TRIS in the SAI_xCR1 register = 1, and FSDEF=1, and
half frame length > number of slots/2, and NBSLOT=6).
SCK
6ORWVL]H GDWDVL]H
VORW 3LOT /. 3LOT /&& 3LOT /. 3LOT /. 3LOT /&& 3LOT /.
6ORWVL]H!GDWDVL]H
069
If the TRIS bit in the SAI_xCR2 register is cleared, all the High impedance states on the SD
output line on Figure 360 and Figure 361 are replaced by a drive with a value of 0.
Overrun
When the audio block is configured as receiver, an overrun condition may appear if data is
received in an audio frame when the FIFO is full and is not able to store the received data.
In this case, the received data is lost, the flag OVRUDR in the SAI_xSR register is set and
an interrupt is generated if bit OVRUDRIE is set in the SAI_xIM register. The slot number
from which the overrun occurs, is stored internally. No more data will be stored into the FIFO
until it becomes free to store new data. When the FIFO has at least one data free, the SAI
audio block receiver will store new data (from new audio frame) from the slot number which
was stored internally when the overrun condition was detected, and this, to avoid data slot
de-alignment in the destination memory (refer to Figure 362).
The OVRUDR flag is cleared when bit COVRUDR is set in the SAI_xCLRFR register.
([DPSOH),)2RYHUUXQRQ6ORW
$XGLRIUDPH $XGLRIUDPH
VFN
),)2IXOO
5HFHLYHGGDWDGLVFDUGHG 'DWDVWRUHGDJDLQLQ),)2
2958'5
&2958'5
069
Underrun
An underrun may occur when the audio block in the SAI is a transmitter and the FIFO is
empty when data needs to be transmitted (the audio block configuration (Master or Slave) is
not relevant). If an underrun is detected, the software must resynchronize data and slot.
Proceed as follows:
1. Disable the SAI peripheral by resetting the SAIEN bit of the SAI_xCR1 register. Check
that the SAI has been disabled by reading back the SAIEN bit (SAIEN should be equal
to 0).
2. Flush the Tx FIFO through the FFLUS bit of the SAI_xCR2 register.
3. Re-assigned to the correct data to be transferred on the first active slot of the new
frame.
4. Re-enabling the SAI peripheral (SAIEN bit set to 1).
The underrun event sets the OVRUDR flag in the SAI_xSR register and an interrupt is
generated if the OVRUDRIE bit is set in the SAI_xIM register. To clear this flag, set the
COVRUDR bit in the SAI_xCLRFR register.
([DPSOH),)2XQGHUUXQRQ6ORW
$XGLRIUDPH $XGLRIUDPH
VFN
3LOT SIZE DATA SIZE
GDWD
6' RXWSXW 6ORW21 087( 087( 087( 6ORW21 21 6ORW21
),)2HPSW\
29581'
29581'
-36
The late frame synchronisation detection flag is set when the error is detected, SAI needs to
be resynchronized with the master (the four steps described above should be respected).
This detection and flag assertion can detect glitches on the SCK clock in a noisy
environment, detected by the state machine of the audio block. It could incorrectly shift the
SAI audio block state machine from one state in the current audio frame, thus corrupting the
frame.
There is no corruption if the external master is not managing the audio data frame transfer in
a continuous mode, which should not be the case for most application purposes. In this
case, flag LFSDET will be set.
Note: This flag is not asserted in AC’97 mode since the SAI audio block acts as a link controller
and generates the FS signal even when declared as slave.
Depend on:
- FIFO threshold setting
(FLTH bits in SAI_CR2)
Master or Slave FREQIE in
FREQ FREQ - Communication direction
Receiver or transmitter SAI_xIM register
transmitter or receiver
for more details please refer
to Internal FIFOs section
Master or Slave OVRUDRIE in COVRUDR = 1 in
OVRUDR ERROR
Receiver or transmitter SAI_xIM register SAI_xCLRFR register
Slave
AFSDETIE in CAFSDET = 1 in
AFSDET ERROR (Not used in AC’97
SAI_xIM register SAI_xCLRFR register
mode)
Slave
LFSDETIE in CLFSDET = 1 in
LFSDET ERROR (Not used in AC’97
SAI_xIM register SAI_xCLRFR register
mode)
Slave CNRDYIE in CCNRDY = 1 in
CNRDY ERROR
(Only in AC’97 mode) SAI_xIM register SAI_xCLRFR register
Below are the SAI configuration steps to follow when an interrupt occurs:
1. Disable SAI interrupt.
2. Configure SAI.
3. Configure SAI interrupt source.
4. Enable SAI.
Bit 12 MONO: Mono mode. This bit is set and cleared by software.
0: Stereo mode
1: Mono mode.
This bit has a meaning only when the number of slots is equal to 2.
When the Mono mode is selected, the data of the slot 0 data is duplicated on the slot 1 when the
audio block is a transmitter. In reception mode, the slot1 is discarded and only the data received
from the slot 0 will be stored.
Refer to Section 30.12.2 for more details.
Bits 11:10 SYNCEN[1:0]: Synchronization enable. This bit is set and cleared by software.
00: audio block is asynchronous.
01: audio block is synchronous with the other internal audio block. In this case audio block should be
configured in Slave mode
10: Reserved.
11: Not used
These bits have to be configured when the audio block is disabled.
Bit 9 CKSTR: Clock strobing edge. This bit is set and cleared by software.
0: data strobing edge is falling edge of SCK
1: data strobing edge is rising edge of SCK
This bit has to be configured when the audio block is disabled.
Bit 8 LSBFIRST: Least significant bit first. This bit is set and cleared by software.
0: data is transferred with the MSB of the data first
1: data is transferred with the LSB of the data first
This bit has to be configured when the audio block is disabled.
This bit has no meaning in AC’97 audio protocol since in AC’97 data is transferred with the MSB of
the data first.
Bits 7:5 DS[2:0]: Data size. These bits are set and cleared by software.
000: Not used
001: Not used
010: 8-bit
011: 10-bit
100: 16-bit
101: 20-bit
110: 24-bit
111: 32-bit
When the companding mode is selected (bit COMP[1:0]), these DS[1:0] are ignored since the data
size is fixed to 8-bit mode by the algorithm itself.
These bits must be configured when the audio block is disabled.
Note: When AC’97 mode is selected the data sizes that can be used are: 16-bit or 20-bit only, else
SAI behavior is not guaranteed.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MUTE
COMP[1:0] CPL MUTECNT[5:0] Mute TRIS FFLUS FTH
VAL
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Bit 6 MUTEVAL: Mute value. This bit is set and cleared by software.This bit has to be written before
enabling the audio block: SAIxEN.
0: Bit value 0 is sent during the MUTE mode.
1: Last values are sent during the MUTE mode.
This bit has a meaning only when the audio block is a transmitter and when the number of slots is
lower or equal to 2 and if the MUTE bit is set.
If more slots are declared, the bit value sent during the transmission in mute mode will be equal to 0,
whatever the value of this MUTEVAL bit.
if the number of slot is lower or equal to 2 and MUTEVAL = 1, the mute value transmitted for each
slot will be the ones sent during the previous frame.
Refer to Section 30.12.1 for more details.
Bit 4 TRIS: Tristate management on data line. This bit is set and cleared by software.
0: SD output line is still driven by the SAI when a slot is inactive.
1: SD output line is released (HI-Z) at the end of the last data bit of the last active slot if the next one
is inactive.
This bit has a meaning only if the audio block is configured to be a transmitter.
This bit should be configured when SAI is disabled.
Refer to Section 30.12.4 for more details.
Bit 3 FFLUSH: FIFO flush. This bit is set by software. It is always read low.
0: No FIFO flush.
1: FIFO flush.
Writing 1 to the bit triggers the FIFO Flush. All the internal FIFO pointers (read and write) are
cleared.
Data still present in the FIFO will be lost in such case (no more transmission or received data lost).
This bit should be configured when SAI is disabled.
Before flushing SAI, DMA stream/interruption must be disabled
Bits 2:0 FTH: FIFO threshold. This bit is set and cleared by software.
000: FIFO empty
001: ¼ FIFO
010: ½ FIFO
011: ¾ FIFO
100: FIFO full
101: Reserved
110: Reserved
111: Reserved
FSALL[6:0] FRL[7:0]
Res.
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
SLOTEN[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bits 31:16 SLOTEN[15:0]: Slot enable. These bits are set and cleared by software.
Each bit of the SLOTEN bits identify a slot position from 0 to 15 (maximum 16 slots)
0: Inactive slot.
1: Active slot.
These bits must be set when the audio block is disabled.
They are ignored in AC’97 mode.
Bits 15:12 Reserved, always read as 0.
Bits 11:8 NBSLOT[3:0]: Number of slots in an audio frame. These bits are set and cleared by software.
The value set in these bits register represents the number of slots + 1 in the audio frame (including
the number of inactive slots). The maximum number of slots is 16.
The number of slots should be even if bit FSDEF in the SAI_AFRCR register is set.
If the size is greater than the data size, the remaining bits will be forced to 0 if bit TRIS in the
SAI_xCR1 register is clear, otherwise they will be forced to 0 if the next slot is active or the SD line
will be forced to HI-Z if the next slot is inactive and bit TRIS = 1.
These bits must be set when the audio block is disabled.
They are ignored in AC’97 omode.
Bits 7:6 SLOTSZ[1:0]: Slot size
This bits is set and cleared by software.
00: The slot size is equivalent to the data size (specified in DS[3:0] in the SAI_ACR1 register).
01: 16-bit
10: 32-bit
11: Reserved
The slot size must be greater or equal to the data size. If this condition is not respected, the behavior
of the SAI will be undetermined.
These bits must be set when the audio block is disabled.
They are ignored in AC’97 mode.
Bit 1 Reserved, always read as 0.
Bits 4:0 FBOFF[4:0]: First bit offset
These bits are set and cleared by software.
The value set in these bits represents the position of the first data transfer bit in the slot. It represents
an offset value. During this offset phase 0 value are sent on the data line for transmission mode. For
reception mode, the received bit are discarded during the offset phase.
These bits must be set when the audio block is disabled.
They are ignored in AC’97 mode.
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MUT
LFSDETI AFSDET CNRDY FREQI WCKC OVRU
EDET
Reserved E IE IE E FGIE DRIE
IE
rw rw rw rw rw rw rw
Bit 2 WCKCFGIE: Wrong clock configuration interrupt enable. This bit is set and cleared by software.
0: Interrupt is disabled
1: Interrupt is enabled
This bit is considered only if the audio block is configured as master (MODE[1] = 0 in the SAI_ACR1
register) and bit NODIV = 0 in the SAI_xCR1 register.
It generates an interrupt if the flag WCKCFG in the SAI_ASR register is set.
Note: This bit is used only in TDM mode and has no meaning for other modes.
Bit 1 MUTEDETIE: Mute detection interrupt enable. This bit is set and cleared by software.
0: Interrupt is disabled
1: Interrupt is enabled
When this bit is set, an interrupt will be generated if the MUTEDET bit in the SAI_ASR register is set.
This bit has a meaning only if the audio block is configured in receiver mode.
Bit 0 OVRUDRIE: Overrun/underrun interrupt enable. This bit is set and cleared by software.
0: Interrupt is disabled
1: Interrupt is enabled
When this bit is set, an interrupt will be generated if the OVRUDR bit in the SAI_ASR register is set.
FLTH
Reserved
r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MUTED
LFSDET AFSDET CNRDY FREQ WCKCFG OVRUDR
Reserved ET
r r r r r r r
Reserved
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CAFSDE CMUTE COVRUD
CLFSDET CCNRDY CWCKCFG
Reserved T Reserved DET R
rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Register
Offset and reset
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
value
MCKDIV[3:0]
LSBFIRST
0x0004
OutDri
DMAEN
SAIxEN
Reserved.
CKSTR
NODIV
Reserved
Res.
1:0] 1:0] ]
0x002
4
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
MUTE VAL
COM
FFLUS
MUTE
CPL
TRIS
0x0008
FTH
MUTECN[5:0]
Reserved
SAI_xCR2 P[1:0
or ]
0x002
8 Reset
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
value
FSDEF
0x000C
FSOFF
FSPOL
Reserved
Reserved
0x002
C Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
SLO
0x0010 SAI_xSLOT
Reserved
Reserved
Register
Offset and reset
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
value
OVRUDRIE
MUTEDET
CNRDYIE
AFSDETIE
FREQIE
WCKCFG
LFSDET
0x0014
Reserved
SAI_xIM
or
0x003
4
Reset value 0 0 0 0 0 0 0
MUTEDET
OVRUDR
FLVL[2:0]
CNRDY
WCKCFG
0x0018
AFSDET
LFSDET
FREQ
Reserved
Reserved
or SAI_xSR
0x003
8
Reset value 0 0 0 0 0 0 0 1 0 0
MUTEDET
0x001
OVRUDR
CAFSDET
CNRDY
WCKCFG
LFSDET
Reserved
C SAI_xCLRF
Res.
R
or
0x003
C Reset value 0 0 0 0 0 0
6',2B'
%ORFNUHDGRSHUDWLRQ
'DWDVWRSRSHUDWLRQ
0XOWLSOHEORFNUHDGRSHUDWLRQ
06Y9
)URPKRVWWRFDUG )URPFDUGWRKRVW
GDWDIURPKRVWWRFDUG 6WRSFRPPDQG
VWRSVGDWDWUDQVIHU
'DWDVWRSRSHUDWLRQ
%ORFNZULWHRSHUDWLRQ
0XOWLSOHEORFNZULWHRSHUDWLRQ
06Y9
Note: The SDIO will not send any data as long as the Busy signal is asserted (SDIO_D0 pulled
low).
)URPKRVWWR
FDUG V )URPFDUGWRKRVW
6WRSFRPPDQG
'DWDIURPFDUGWRKRVW VWRSVGDWDWUDQVIHU
6',2B' 'DWDVWUHDP
'DWDVWRSRSHUDWLRQ
'DWDWUDQVIHURSHUDWLRQ
06Y9
)URPKRVWWR
FDUG V )URPFDUGWRKRVW 6WRSFRPPDQG
VWRSVGDWDWUDQVIHU
'DWDIURPKRVWWRFDUG
6',2B' 'DWDVWUHDP
'DWDVWRSRSHUDWLRQ
'DWDWUDQVIHURSHUDWLRQ
06Y9
6',2
6',2B&.
,QWHUUXSWVDQG
'0$UHTXHVW 6',2B&0'
3&/. 6',2&/.
06Y9
By default SDIO_D0 is used for data transfer. After initialization, the host can change the
databus width.
If a MultiMediaCard is connected to the bus, SDIO_D0, SDIO_D[3:0] or SDIO_D[7:0] can be
used for data transfer. MMC V3.31 or previous, supports only 1 bit of data so only SDIO_D0
can be used.
If an SD or SD I/O card is connected to the bus, data transfer can be configured by the host
to use SDIO_D0 or SDIO_D[3:0]. All data lines are operating in push-pull mode.
SDIO_CMD has two operational modes:
• Open-drain for initialization (only for MMCV3.31 or previous)
• Push-pull for command transfer (SD/SD I/O card MMC4.2 use push-pull drivers also for
initialization)
SDIO_CK is the clock to the card: one bit is transferred on both command and data lines
with each clock cycle.
The SDIO uses two clock signals:
• SDIO adapter clock SDIOCLK = 50 MHz)
• APB2 bus clock (PCLK2)
PCLK2 and SDIO_CK clock frequencies must respect the following condition:
The signals shown in Table 182 are used on the MultiMediaCard/SD/SD I/O card bus.
6',2DGDSWHU
&RQWUROXQLW 6',2B&.
&DUGEXV
&RPPDQG
6',2B&0'
$GDSWHU SDWK
UHJLVWHUV
7R$3%
'DWDSDWK 6',2B'>@
LQWHUIDFH ),)2
3&/. 6',2&/.
06Y9
The SDIO adapter is a multimedia/secure digital memory card bus master that provides an
interface to a multimedia card stack or to a secure digital memory card. It consists of five
subunits:
• Adapter register block
• Control unit
• Command path
• Data path
• Data FIFO
Note: The adapter registers and FIFO use the APB2 bus clock domain (PCLK2). The control unit,
command path and data path use the SDIO adapter clock domain (SDIOCLK).
Control unit
The control unit contains the power management functions and the clock divider for the
memory card clock.
There are three power phases:
• power-off
• power-up
• power-on
&RQWUROXQLW
3RZHUPDQDJHPHQW
7RFRPPDQGDQGGDWDSDWK
06Y9
The control unit is illustrated in Figure 371. It consists of a power management subunit and
a clock management subunit.
The power management subunit disables the card bus output signals during the power-off
and power-up phases.
The clock management subunit generates and controls the SDIO_CK signal. The SDIO_CK
output can use either the clock divide or the clock bypass mode. The clock output is
inactive:
• after reset
• during the power-off or power-up phases
• if the power saving mode is enabled and the card bus is in the Idle state (eight clock
periods after both the command and data path subunits enter the Idle phase)
The clock management subunit controls SDIO_CK dephasing. When not in bypass mode
the SDIO command and data output are generated on the SDIOCLK falling edge
succeeding the rising edge of SDIO_CK. (SDIO_CK rising edge occurs on SDIOCLK rising
edge) when SDIO_CLKCR[13] bit is reset (NEGEDGE = 0). When SDIO_CLKCR[13] bit is
set (NEGEDGE = 1) SDIO command and data changed on the SDIO_CK falling edge.
When SDIO_CLKCR[10] is set (BYPASS = 1), SDIO_CK rising edge occurs on SDIOCLK
rising edge. The data and the command change on SDIOCLK falling edge whatever
NEGEDGE value.
The data and command responses are latched using SDIO_CK rising edge.
6',2&/.
6',2B&.
&0''DWD
RXWSXW
1(*('*( 1(*('*(
06Y9
Command path
The command path unit sends commands to and receives responses from the cards.
$GDSWHUUHJLVWHUV
6',2B&0'LQ
&0'
$UJXPHQW
&5& 6',2B&0'RXW
6KLIW
&0' UHJLVWHU
5HVSRQVH
7R$3%LQWHUIDFH
UHJLVWHUV
06Y9
&360HQDEOHGDQG
SHQGLQJFRPPDQG ,GOH
&360GLVDEOHG
5HVSRQVHUHFHLYHGRU
GLVDEOHGRUFRPPDQG
(QDEOHGDQG
&5&IDLOHG
3HQG FRPPDQGVWDUW
&360GLVDEOHG
RUQRUHVSRQVH
/DVWGDWD
&360GLVDEOHGRU
6HQG FRPPDQGWLPHRXW 5HFHLYH
:DLWIRUUHVSRQVH 5HVSRQVH
VWDUWHG
:DLW
069
When the Wait state is entered, the command timer starts running. If the timeout is reached
before the CPSM moves to the Receive state, the timeout flag is set and the Idle state is
entered.
Note: The command timeout has a fixed value of 64 SDIO_CK clock periods.
If the interrupt bit is set in the command register, the timer is disabled and the CPSM waits
for an interrupt request from one of the cards. If a pending bit is set in the command register,
the CPSM enters the Pend state, and waits for a CmdPend signal from the data path
subunit. When CmdPend is detected, the CPSM moves to the Send state. This enables the
data counter to trigger the stop command transmission.
Note: The CPSM remains in the Idle state for at least eight SDIO_CK periods to meet the NCC and
NRC timing constraints. NCC is the minimum delay between two host commands, and NRC is
the minimum delay between the host command and the card response.
DWOHDVW6',2B&.F\FOHV
• Command format
– Command: a command is a token that starts an operation. Command are sent
from the host either to a single card (addressed command) or to all connected
cards (broadcast command are available for MMC V3.31 or previous). Commands
are transferred serially on the CMD line. All commands have a fixed length of 48
bits. The general format for a command token for MultiMediaCards, SD-Memory
cards and SDIO-Cards is shown in Table 183.
The command path operates in a half-duplex mode, so that commands and
responses can either be sent or received. If the CPSM is not in the Send state, the
SDIO_CMD output is in the Hi-Z state, as shown in Figure 375 on page 1034.
Data on SDIO_CMD are synchronous with the rising edge of SDIO_CK. Table 183
shows the command format.
47 1 0 Start bit
46 1 1 Transmission bit
[45:40] 6 - Command index
[39:8] 32 - Argument
[7:1] 7 - CRC7
0 1 1 End bit
47 1 0 Start bit
46 1 0 Transmission bit
[45:40] 6 - Command index
[39:8] 32 - Argument
[7:1] 7 - CRC7(or 1111111)
0 1 1 End bit
The command register contains the command index (six bits sent to a card) and the
command type. These determine whether the command requires a response, and whether
the response is 48 or 136 bits long (see Section 31.8.4 on page 1070). The command path
implements the status flags shown in Table 186:
The CRC generator calculates the CRC checksum for all bits before the CRC code. This
includes the start bit, transmitter bit, command index, and command argument (or card
status). The CRC checksum is calculated for the first 120 bits of CID or CSD for the long
response format. Note that the start bit, transmitter bit and the six reserved bits are not used
in the CRC calculation.
The CRC checksum is a 7-bit value:
CRC[6:0] = Remainder [(M(x) * x7) / G(x)]
G(x) = x7 + x3 + 1
M(x) = (start bit) * x39 + ... + (last bit before CRC) * x0, or
M(x) = (start bit) * x119 + ... + (last bit before CRC) * x0
Data path
The data path subunit transfers data to and from cards. Figure 376 shows a block diagram
of the data path.
'DWDSDWK
'DWD),)2 6',2B'LQ>@
7UDQVPLW
&5& 6',2B'RXW>@
6KLIW
UHJLVWHU
5HFHLYH
06Y9
The card databus width can be programmed using the clock control register. If the 4-bit wide
bus mode is enabled, data is transferred at four bits per clock cycle over all four data signals
(SDIO_D[3:0]). If the 8-bit wide bus mode is enabled, data is transferred at eight bits per
clock cycle over all eight data signals (SDIO_D[7:0]). If the wide bus mode is not enabled,
only one bit per clock cycle is transferred over SDIO_D0.
Depending on the transfer direction (send or receive), the data path state machine (DPSM)
moves to the Wait_S or Wait_R state when it is enabled:
• Send: the DPSM moves to the Wait_S state. If there is data in the transmit FIFO, the
DPSM moves to the Send state, and the data path subunit starts sending data to a
card.
• Receive: the DPSM moves to the Wait_R state and waits for a start bit. When it
receives a start bit, the DPSM moves to the Receive state, and the data path subunit
starts receiving data from a card.
Data path state machine (DPSM)
The DPSM operates at SDIO_CK frequency. Data on the card bus signals is synchronous to
the rising edge of SDIO_CK. The DPSM has six states, as shown in Figure 377: Data path
state machine (DPSM).
2EAD7AIT 3TOP
$ISABLED OR
END OF DATA
$ISABLED OR
"USY 2X &)&/ EMPTY OR TIMEOUT OR
START BIT ERROR
.OT BUSY
%NABLE AND SEND $ATA RECEIVED AND
7AIT?2 2EAD 7AIT 3TARTED AND
3$ )/ MODE ENABLED
%ND OF PACKET
3END
2ECEIVE
AIB
• Idle: the data path is inactive, and the SDIO_D[7:0] outputs are in Hi-Z. When the data
control register is written and the enable bit is set, the DPSM loads the data counter
with a new value and, depending on the data direction bit, moves to either the Wait_S
or the Wait_R state.
• Wait_R: if the data counter equals zero, the DPSM moves to the Idle state when the
receive FIFO is empty. If the data counter is not zero, the DPSM waits for a start bit on
SDIO_D. The DPSM moves to the Receive state if it receives a start bit before a
timeout, and loads the data block counter. If it reaches a timeout before it detects a
start bit, it moves to the Idle state and sets the timeout status flag.
• Receive: serial data received from a card is packed in bytes and written to the data
FIFO. Depending on the transfer mode bit in the data control register, the data transfer
mode can be either block or stream:
– In block mode, when the data block counter reaches zero, the DPSM waits until it
receives the CRC code. If the received code matches the internally generated
CRC code, the DPSM moves to the Wait_R state. If not, the CRC fail status flag is
set and the DPSM moves to the Idle state.
– In stream mode, the DPSM receives data while the data counter is not zero. When
the counter is zero, the remaining data in the shift register is written to the data
FIFO, and the DPSM moves to the Wait_R state.
If a FIFO overrun error occurs, the DPSM sets the FIFO error flag and moves to the
Idle state:
• Wait_S: the DPSM moves to the Idle state if the data counter is zero. If not, it waits until
the data FIFO empty flag is deasserted, and moves to the Send state.
Note: The DPSM remains in the Wait_S state for at least two clock periods to meet the NWR timing
requirements, where NWR is the number of clock cycles between the reception of the card
response and the start of the data transfer from the host.
• Send: the DPSM starts sending data to a card. Depending on the transfer mode bit in
the data control register, the data transfer mode can be either block or stream:
– In block mode, when the data block counter reaches zero, the DPSM sends an
internally generated CRC code and end bit, and moves to the Busy state.
– In stream mode, the DPSM sends data to a card while the enable bit is high and
the data counter is not zero. It then moves to the Idle state.
If a FIFO underrun error occurs, the DPSM sets the FIFO error flag and moves to the
Idle state.
• Busy: the DPSM waits for the CRC status flag:
– If it does not receive a positive CRC status, it moves to the Idle state and sets the
CRC fail status flag.
– If it receives a positive CRC status, it moves to the Wait_S state if SDIO_D0 is not
low (the card is not busy).
If a timeout occurs while the DPSM is in the Busy state, it sets the data timeout flag and
moves to the Idle state.
The data timer is enabled when the DPSM is in the Wait_R or Busy state, and
generates the data timeout error:
– When transmitting data, the timeout occurs if the DPSM stays in the Busy state for
longer than the programmed timeout period
– When receiving data, the timeout occurs if the end of the data is not true, and if the
DPSM stays in the Wait_R state for longer than the programmed timeout period.
• Data: data can be transferred from the card to the host or vice versa. Data is
transferred via the data lines. They are stored in a FIFO of 32 words, each word is 32
bits wide.
DPSM Flags
The status of the data path subunit transfer is reported by several status flags
Data FIFO
The data FIFO (first-in-first-out) subunit is a data buffer with a transmit and receive unit.
The FIFO contains a 32-bit wide, 32-word deep data buffer, and transmit and receive logic.
Because the data FIFO operates in the APB2 clock domain (PCLK2), all signals from the
subunits in the SDIO clock domain (SDIOCLK) are resynchronized.
Depending on the TXACT and RXACT flags, the FIFO can be disabled, transmit enabled, or
receive enabled. TXACT and RXACT are driven by the data path subunit and are mutually
exclusive:
– The transmit FIFO refers to the transmit logic and data buffer when TXACT is
asserted
– The receive FIFO refers to the receive logic and data buffer when RXACT is
asserted
• Transmit FIFO:
Data can be written to the transmit FIFO through the APB2 interface when the SDIO is
enabled for transmission.
The transmit FIFO is accessible via 32 sequential addresses. The transmit FIFO
contains a data output register that holds the data word pointed to by the read pointer.
When the data path subunit has loaded its shift register, it increments the read pointer
and drives new data out.
If the transmit FIFO is disabled, all status flags are deasserted. The data path subunit
asserts TXACT when it transmits data.
TXFIFOF Set to high when all 32 transmit FIFO words contain valid data.
TXFIFOE Set to high when the transmit FIFO does not contain valid data.
Set to high when 8 or more transmit FIFO words are empty. This flag can be used
TXFIFOHE
as a DMA request.
Set to high when the transmit FIFO contains valid data. This flag is the inverse of
TXDAVL
the TXFIFOE flag.
Set to high when an underrun error occurs. This flag is cleared by writing to the
SDIO Clear register.
TXUNDERR Note: In case of TXUNDERR, and DMA is used to fill SDIO FIFO, user software
should disable DMA stream, and then write DMAEN bit in SDIO_DCTRL
with ‘0’ (to disable DMA request generation).
• Receive FIFO
When the data path subunit receives a word of data, it drives the data on the write
databus. The write pointer is incremented after the write operation completes. On the
read side, the contents of the FIFO word pointed to by the current value of the read
pointer is driven onto the read databus. If the receive FIFO is disabled, all status flags
are deasserted, and the read and write pointers are reset. The data path subunit
asserts RXACT when it receives data. Table 190 lists the receive FIFO status flags.
The receive FIFO is accessible via 32 sequential addresses.
RXFIFOF Set to high when all 32 receive FIFO words contain valid data
RXFIFOE Set to high when the receive FIFO does not contain valid data.
Set to high when 8 or more receive FIFO words contain valid data. This flag can be
RXFIFOHF
used as a DMA request.
Set to high when the receive FIFO is not empty. This flag is the inverse of the
RXDAVL
RXFIFOE flag.
Set to high when an overrun error occurs. This flag is cleared by writing to the SDIO
Clear register.
RXOVERR Note: In case of RXOVERR, and DMA is used to read SDIO FIFO, user software
should disable DMA stream, and then write DMAEN bit in SDIO_DCTRL
with ‘0’ (to disable DMA request generation).
SDIO interrupts
The interrupt logic generates an interrupt request signal that is asserted when at least one
of the selected status flags is high. A mask register is provided to allow selection of the
conditions that will generate an interrupt. A status flag generates the interrupt request if a
corresponding mask flag is set.
SDIO/DMA interface
SDIO APB interface controls all subunit to perform transfers between the host and card
addresses the card. The assigned card changes to the Standby state, it does not react
to further identification cycles, and its output switches from open-drain to push-pull.
8. The SDIO card host repeats steps 5 through 7 until it receives a timeout condition.
For the SD card, the identification process starts at clock rate Fod, and the SDIO_CMD line
output drives are push-pull drivers instead of open-drain. The registration process is
accomplished as follows:
1. The bus is activated.
2. The SDIO card host broadcasts SD_APP_OP_COND (ACMD41).
3. The cards respond with the contents of their operation condition registers.
4. The incompatible cards are placed in the inactive state.
5. The SDIO card host broadcasts ALL_SEND_CID (CMD2) to all active cards.
6. The cards send back their unique card identification numbers (CIDs) and enter the
Identification state.
7. The SDIO card host issues SET_RELATIVE_ADDR (CMD3) to an active card with an
address. This new address is called the relative card address (RCA); it is shorter than
the CID and addresses the card. The assigned card changes to the Standby state. The
SDIO card host can reissue this command to change the RCA. The RCA of the card is
the last assigned value.
8. The SDIO card host repeats steps 5 through 7 with all active cards.
For the SD I/O card, the registration process is accomplished as follows:
1. The bus is activated.
2. The SDIO card host sends IO_SEND_OP_COND (CMD5).
3. The cards respond with the contents of their operation condition registers.
4. The incompatible cards are set to the inactive state.
5. The SDIO card host issues SET_RELATIVE_ADDR (CMD3) to an active card with an
address. This new address is called the relative card address (RCA); it is shorter than
the CID and addresses the card. The assigned card changes to the Standby state. The
SDIO card host can reissue this command to change the RCA. The RCA of the card is
the last assigned value.
Some cards may require long and unpredictable times to write a block of data. After
receiving a block of data and completing the CRC check, the card begins writing and holds
the SDIO_D line low if its write buffer is full and unable to accept new data from a new
WRITE_BLOCK command. The host may poll the status of the card with a SEND_STATUS
command (CMD13) at any time, and the card will respond with its status. The
READY_FOR_DATA status bit indicates whether the card can accept new data or whether
the write process is still in progress. The host may deselect the card by issuing CMD7 (to
select a different card), which will place the card in the Disconnect state and release the
SDIO_D line(s) without interrupting the write operation. When reselecting the card, it will
reactivate busy indication by pulling SDIO_D to low if programming is still in progress and
the write buffer is unavailable.
The maximum clock frequency for a stream write operation is given by the following
equation fields of the card-specific data register:
8 × 2 writebllen ) ( – NSAC ))
Maximumspeed = MIN (TRANSPEED,(-------------------------------------------------------------------------
TAAC × R2WFACTOR
( 8 × 2 readbllen ) ( – NSAC ))
Maximumspeed = MIN (TRANSPEED,------------------------------------------------------------------------
TAAC × R2WFACTOR
at the specified address) followed by 16 CRC bits. The address field in the write protect
commands is a group address in byte units.
The card ignores all LSBs below the group size.
Password protect
The password protection feature enables the SDIO card host module to lock and unlock a
card with a password. The password is stored in the 128-bit PWD register and its size is set
in the 8-bit PWD_LEN register. These registers are nonvolatile so that a power cycle does
not erase them. Locked cards respond to and execute certain commands. This means that
the SDIO card host module is allowed to reset, initialize, select, and query for status,
however it is not allowed to access data on the card. When the password is set (as indicated
by a nonzero value of PWD_LEN), the card is locked automatically after power-up. As with
the CSD and CID register write commands, the lock/unlock commands are available in the
transfer state only. In this state, the command does not include an address argument and
the card must be selected before using it. The card lock/unlock commands have the
structure and bus transaction types of a regular single-block write command. The
transferred data block includes all of the required information for the command (the
password setting mode, the PWD itself, and card lock/unlock). The command data block
size is defined by the SDIO card host module before it sends the card lock/unlock
command, and has the structure shown in Table 204.
The bit settings are as follows:
• ERASE: setting it forces an erase operation. All other bits must be zero, and only the
command byte is sent
• LOCK_UNLOCK: setting it locks the card. LOCK_UNLOCK can be set simultaneously
with SET_PWD, however not with CLR_PWD
• CLR_PWD: setting it clears the password data
• SET_PWD: setting it saves the password data to memory
• PWD_LEN: it defines the length of the password in bytes
• PWD: the password (new or currently used, depending on the command)
The following sections list the command sequences to set/reset a password, lock/unlock the
card, and force an erase.
When a password replacement is done, the block size must take into account that both
the old and the new passwords are sent with the command.
3. Send LOCK/UNLOCK (CMD42) with the appropriate data block size on the data line
including the 16-bit CRC. The data block indicates the mode (SET_PWD = 1), the
length (PWD_LEN), and the password (PWD) itself. When a password replacement is
done, the length value (PWD_LEN) includes the length of both passwords, the old and
the new one, and the PWD field includes the old password (currently used) followed by
the new password.
4. When the password is matched, the new password and its size are saved into the PWD
and PWD_LEN fields, respectively. When the old password sent does not correspond
(in size and/or content) to the expected password, the LOCK_UNLOCK_FAILED error
bit is set in the card status register, and the password is not changed.
The password length field (PWD_LEN) indicates whether a password is currently set. When
this field is nonzero, there is a password set and the card locks itself after power-up. It is
possible to lock the card immediately in the current power session by setting the
LOCK_UNLOCK bit (while setting the password) or sending an additional command for card
locking.
Locking a card
1. Select a card (SELECT/DESELECT_CARD, CMD7), if none is already selected.
2. Define the block length (SET_BLOCKLEN, CMD16) to send, given by the 8-bit card
lock/unlock mode (byte 0 in Table 204), the 8-bit PWD_LEN, and the number of bytes
of the current password.
3. Send LOCK/UNLOCK (CMD42) with the appropriate data block size on the data line
including the 16-bit CRC. The data block indicates the mode (LOCK_UNLOCK = 1), the
length (PWD_LEN), and the password (PWD) itself.
4. When the password is matched, the card is locked and the CARD_IS_LOCKED status
bit is set in the card status register. When the password sent does not correspond (in
size and/or content) to the expected password, the LOCK_UNLOCK_FAILED error bit
is set in the card status register, and the lock fails.
It is possible to set the password and to lock the card in the same sequence. In this case,
the SDIO card host module performs all the required steps for setting the password (see
Setting the password on page 1048), however it is necessary to set the LOCK_UNLOCK bit
in Step 3 when the new password command is sent.
When the password is previously set (PWD_LEN is not 0), the card is locked automatically
after power on reset. An attempt to lock a locked card or to lock a card that does not have a
password fails and the LOCK_UNLOCK_FAILED error bit is set in the card status register.
Forcing erase
If the user has forgotten the password (PWD content), it is possible to access the card after
clearing all the data on the card. This forced erase operation erases all card data and all
password data.
1. Select a card (SELECT/DESELECT_CARD, CMD7), if none is already selected.
2. Set the block length (SET_BLOCKLEN, CMD16) to 1 byte. Only the 8-bit card
lock/unlock byte (byte 0 in Table 204) is sent.
3. Send LOCK/UNLOCK (CMD42) with the appropriate data byte on the data line
including the 16-bit CRC. The data block indicates the mode (ERASE = 1). All other bits
must be zero.
4. When the ERASE bit is the only bit set in the data field, all card contents are erased,
including the PWD and PWD_LEN fields, and the card is no longer locked. When any
other bits are set, the LOCK_UNLOCK_FAILED error bit is set in the card status
register and the card retains all of its data, and remains locked.
An attempt to use a force erase on an unlocked card fails and the LOCK_UNLOCK_FAILED
error bit is set in the card status register.
SIZE_OF_PROTECTED_AREA
Setting this field differs between standard- and high-capacity cards. In the case of a
standard-capacity card, the capacity of protected area is calculated as follows:
Protected area = SIZE_OF_PROTECTED_AREA_* MULT * BLOCK_LEN.
SIZE_OF_PROTECTED_AREA is specified by the unit in MULT*BLOCK_LEN.
In the case of a high-capacity card, the capacity of protected area is specified in this field:
Protected area = SIZE_OF_PROTECTED_AREA
SIZE_OF_PROTECTED_AREA is specified by the unit in bytes.
SPEED_CLASS
This 8-bit field indicates the speed class and the value can be calculated by PW/2 (where
PW is the write performance).
00h Class 0
01h Class 2
02h Class 4
03h Class 6
04h – FFh Reserved
PERFORMANCE_MOVE
This 8-bit field indicates Pm (performance move) and the value can be set by 1 [MB/sec]
steps. If the card does not move used RUs (recording units), Pm should be considered as
infinity. Setting the field to FFh means infinity.
AU_SIZE
This 4-bit field indicates the AU size and the value can be selected in the power of 2 base
from 16 KB.
The maximum AU size, which depends on the card capacity, is defined in Table 196. The
card can be set to any AU size between RU size and maximum AU size.
ERASE_SIZE
This 16-bit field indicates NERASE. When NERASE numbers of AUs are erased, the timeout
value is specified by ERASE_TIMEOUT (Refer to ERASE_TIMEOUT). The host should
determine the proper number of AUs to be erased in one operation so that the host can
show the progress of the erase operation. If this field is set to 0, the erase timeout
calculation is not supported.
ERASE_TIMEOUT
This 6-bit field indicates TERASE and the value indicates the erase timeout from offset when
multiple AUs are being erased as specified by ERASE_SIZE. The range of
ERASE_TIMEOUT can be defined as up to 63 seconds and the card manufacturer can
choose any combination of ERASE_SIZE and ERASE_TIMEOUT depending on the
implementation. Determining ERASE_TIMEOUT determines the ERASE_SIZE.
ERASE_OFFSET
This 2-bit field indicates TOFFSET and one of four values can be selected. This field is
meaningless if the ERASE_SIZE and ERASE_TIMEOUT fields are set to 0.
0h 0 [sec]
1h 1 [sec]
2h 2 [sec]
3h 3 [sec]
SD I/O ReadWait
The optional ReadWait (RW) operation is defined only for the SD 1-bit and 4-bit modes. The
ReadWait operation allows the MMC/SD module to signal a card that it is reading multiple
registers (IO_RW_EXTENDED, CMD53) to temporarily stall the data transfer while allowing
the MMC/SD module to send commands to any function within the SD I/O device. To
determine when a card supports the ReadWait protocol, the MMC/SD module must test
capability bits in the internal card registers. The timing for ReadWait is based on the
interrupt period.
Command types
Both application-specific and general commands are divided into the four following types:
• broadcast command (BC): sent to all cards; no responses returned.
• broadcast command with response (BCR): sent to all cards; responses received
from all cards simultaneously.
• addressed (point-to-point) command (AC): sent to the card that is selected; does
not include a data transfer on the SDIO_D line(s).
• addressed (point-to-point) data transfer command (ADTC): sent to the card that is
selected; includes a data transfer on the SDIO_D line(s).
Command formats
See Table 183 on page 1034 for command formats.
CMD32
Reserved. These command indexes cannot be used in order to maintain backward compatibility with older
...
versions of the MultiMediaCard.
CMD34
Sets the address of the first erase
CMD35 ac [31:0] data address R1 ERASE_GROUP_START group within a range to be selected
for erase.
Sets the address of the last erase
CMD36 ac [31:0] data address R1 ERASE_GROUP_END group within a continuous range to be
selected for erase.
Reserved. This command index cannot be used in order to maintain backward compatibility with older
CMD37
versions of the MultiMediaCards
Erases all previously selected write
CMD38 ac [31:0] stuff bits R1 ERASE
blocks.
CMD40 bcr [31:0] stuff bits R5 GO_IRQ_STATE Places the system in the interrupt mode.
CMD41 Reserved
47 1 0 Start bit
46 1 0 Transmission bit
[45:40] 6 X Command index
[39:8] 32 X Card status
[7:1] 7 X CRC7
0 1 1 End bit
31.5.2 R1b
It is identical to R1 with an optional busy signal transmitted on the data line. The card may
become busy after receiving these commands based on its state prior to the command
reception.
47 1 0 Start bit
46 1 0 Transmission bit
[45:40] 6 ‘111111’ Reserved
[39:8] 32 X OCR register
[7:1] 7 ‘1111111’ Reserved
0 1 1 End bit
47 1 0 Start bit
46 1 0 Transmission bit
[45:40] 6 ‘100111’ CMD39
[31:16] 16 X RCA
[39:8] Argument field [15:8] 8 X register address
[7:0] 8 X read register contents
[7:1] 7 X CRC7
0 1 1 End bit
31.5.6 R4b
For SD I/O only: an SDIO card receiving the CMD5 will respond with a unique SDIO
response R4. The format is:
47 1 0 Start bit
46 1 0 Transmission bit
[45:40] 6 X Reserved
39 16 X Card is ready
[38:36] 3 X Number of I/O functions
[39:8] Argument field 35 1 X Present memory
[34:32] 3 X Stuff bits
[31:8] 24 X I/O ORC
[7:1] 7 X Reserved
0 1 1 End bit
Once an SD I/O card has received a CMD5, the I/O portion of that card is enabled to
respond normally to all further commands. This I/O enable of the function within the I/O card
will remain set until a reset, power cycle or CMD52 with write to I/O reset is received by the
card. Note that an SD memory-only card may respond to a CMD5. The proper response for
a memory-only card would be Present memory = 1 and Number of I/O functions = 0. A
memory-only card built to meet the SD Memory Card specification version 1.0 would detect
the CMD5 as an illegal command and not respond. The I/O aware host will send CMD5. If
the card responds with response R4, the host determines the card’s configuration based on
the data contained within the R4 response.
47 1 0 Start bit
46 1 0 Transmission bit
[45:40] 6 ‘101000’ CMD40
RCA [31:16] of winning
[31:16] 16 X
card or of the host
[39:8] Argument field
Not defined. May be used
[15:0] 16 X
for IRQ data
[7:1] 7 X CRC7
0 1 1 End bit
31.5.8 R6
Only for SD I/O. The normal response to CMD3 by a memory device. It is shown in
Table 212.
47 1 0 Start bit
46 1 0 Transmission bit
[45:40] 6 ‘101000’ CMD40
The card [23:8] status bits are changed when CMD3 is sent to an I/O-only card. In this case,
the 16 bits of response are the SD I/O-only values:
• Bit [15] COM_CRC_ERROR
• Bit [14] ILLEGAL_COMMAND
• Bit [13] ERROR
• Bits [12:0] Reserved
SDIOCLK are frozen, the APB2 interface is still alive. The FIFO can thus be filled or emptied
even if flow control is activated.
To enable HW flow control, the SDIO_CLKCR[14] register bit must be set to 1. After reset
Flow Control is disabled.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. PWRCTRL
rw rw
Note: At least seven PCLK2 clock periods are needed between two write accesses to this register.
Note: After a data write, data cannot be written to this register for three SDIOCLK clock periods
plus two PCLK2 clock periods.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
HWFC NEGE WID BYPAS PWRS
Res. CLKEN CLKDIV
_EN DGE BUS S AV
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: 1 While the SD/SDIO card or MultiMediaCard is in identification mode, the SDIO_CK
frequency must be less than 400 kHz.
2 The clock frequency can be changed to the maximum card bus frequency when relative
card addresses are assigned to all cards.
3 After a data write, data cannot be written to this register for three SDIOCLK clock periods
plus two PCLK2 clock periods. SDIO_CK can also be stopped during the read wait interval
for SD I/O cards: in this case the SDIO_CLKCR register does not control SDIO_CK.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CMDARG[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CMDARG[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SDIO CPSM WAIT WAIT
Res. Res. Res. Res. WAITRESP CMDINDEX
Suspend EN PEND INT
rw rw rw rw rw rw rw rw rw rw rw rw
Note: 1 After a data write, data cannot be written to this register for three SDIOCLK clock periods
plus two PCLK2 clock periods.
2 MultiMediaCards can send two kinds of response: short responses, 48 bits long, or long
responses,136 bits long. SD card and SD I/O card can send only short responses, the
argument can vary according to the type of response: the software will distinguish the type
of response according to the sent command.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. RESPCMD
r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CARDSTATUSx[31:16]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CARDSTATUSx[15:0]
r r r r r r r r r r r r r r r r
The Card Status size is 32 or 127 bits, depending on the response type.
The most significant bit of the card status is received first. The SDIO_RESP4 register LSB is
always 0b.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATATIME[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATATIME[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: A data transfer must be written to the data timer register and the data length register before
being written to the data control register.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. DATALENGTH[24:16]
rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATALENGTH[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: For a block data transfer, the value in the data length register must be a multiple of the block
size (see SDMMC_DCTRL). Before being written to the data control register a timeout must
be written to the data timer register and the data length register.
In case of IO_RW_EXTENDED (CMD53):
- If the Stream or SDIO multibyte data transfer is selected the value in the data length
register must be between 1 and 512.
- If the Block data transfer is selected the value in the data length register must be between
1*Data block size and 512*Data block size.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SDIO RW RW RW DMA DT
Res. Res. Res. Res. DBLOCKSIZE DTDIR DTEN
EN MOD STOP START EN MODE
rw rw rw rw rw rw rw rw rw rw rw rw
Note: After a data write, data cannot be written to this register for three SDIOCLK clock periods
plus two PCLK2 clock periods.
The meaning of the DTMODE bit changes according to the value of the SDIOEN bit. When
SDIOEN=0 and DTMODE=1, the MultiMediaCard stream mode is enabled, and when
SDIOEN=1 and DTMODE=1, the peripheral enables an SDIO multibyte transfer.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. DATACOUNT[24:16]
r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATACOUNT[15:0]
r r r r r r r r r r r r r r r r
Note: This register should be read only when the data transfer is complete.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
RXD TXD RX TX RX TX
Res. Res. Res. Res. Res. Res. Res. Res. Res. SDIOIT
AVL AVL FIFOE FIFOE FIFOF FIFOF
r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RX TX
CMD DBCK DATA CMDS CMDR RX TXUND DTIME CTIME DCRC CCRC
FIFO FIFO RXACT TXACT Res.
ACT END END ENT END OVERR ERR OUT OUT FAIL FAIL
HF HE
r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SDIO
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
ITC
rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CMD RX TX
DBCK DATA CMD DTIME CTIME DCRC CCRC
Res. Res. Res. Res. Res. Res. REND OVERR UNDERR
ENDC ENDC SENTC OUTC OUTC FAILC FAILC
C C C
rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
RX TX RX TX
SDIO RXD TXD
Res. Res. Res. Res. Res. Res. Res. Res. Res. FIFO FIFO FIFO FIFO
ITIE AVLIE AVLIE
EIE EIE FIE FIE
rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RX TX CMD CMD RX TX
RX TX CMD DBCK DATA DTIME CTIME DCRC CCRC
FIFO FIFO Res. SENT REND OVERR UNDERR
ACTIE ACTIE ACTIE ENDIE ENDIE OUTIE OUTIE FAILIE FAILIE
HFIE HEIE IE IE IE IE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. FIFOCOUNT[23:16]
r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FIFOCOUNT[15:0]
r r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FIF0Data[31:16]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FIF0Data[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Offset Register 31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
PWRCTRL
SDIO_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
POWER
0x00
Reset value 0 0
NEGEDGE
HWFC_EN
PWRSAV
WIDBUS
BYPASS
CLKDIV
CLKEN
SDIO_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
CLKCR
0x04
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SDIO_ARG CMDARG
0x08
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SDIOSuspend
CMDINDEX
WAITPEND
WAITRESP
CPSMEN
WAITINT
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
SDIO_CMD
0x0C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0
SDIO_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
RESPCMD
RESPCMD
0x10
Reset value 0 0 0 0 0 0
SDIO_
CARDSTATUS1
0x14 RESP1
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SDIO_
CARDSTATUS2
0x18 RESP2
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SDIO_
CARDSTATUS3
0x1C RESP3
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SDIO_
CARDSTATUS4
0x20 RESP4
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SDIO_
DATATIME
0x24 DTIMER
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SDIO_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
DATALENGTH
DLEN
0x28
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DBLOCKSIZE
RWSTART
RWSTOP
DTMODE
RWMOD
SDIOEN
DMAEN
DTDIR
DTEN
SDIO_
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
DCTRL
0x2C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0
0x3C
Offset
1084/1324
MASK
SDIO_
SDIO_
SDIO_
DCOUNT
FIFOCNT
SDIO_ICR
SDIO_STA
Register
Reset value
SDIO_FIFO
Reset value
Reset value
Reset value
Reset value
Reset value
0
Res. Res. Res. Res. Res. 31
0
Res. Res. Res. Res. Res. 30
0
Res. Res. Res. Res. Res. 29
0
Res. Res. Res. Res. Res. 28
0
Res. Res. Res. Res. Res. 27
boundary addresses.
Res. Res. Res. Res. Res. 26
0
Res. Res. Res. Res. Res. 25
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
RM0430 Rev 8
0
0
0
0
0
0
0
0
0
0
FIF0Data
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Table 214. SDIO register map (continued)
0
0
0
0
0
FIFOCOUNT
0
0
0
Refer to Section 2.2.2: Memory map and register boundary addresses for the register
32.1 Introduction
The Basic Extended CAN peripheral, named bxCAN, interfaces the CAN network. It
supports the CAN protocols version 2.0A and B. It has been designed to manage a high
number of incoming messages efficiently with a minimum CPU load. It also meets the
priority requirements for transmit messages.
For safety-critical applications, the CAN controller provides all hardware functions for
supporting the CAN Time Triggered Communication option.
&$1QRGH
&$1QRGHQ
0&8
$SSOLFDWLRQ
&$1
&RQWUROOHU
&$1 &$1
5[ 7[
&$1
7UDQVFHLYHU
&$1 &$1
+LJK /RZ
&$1%XV
069
32.3.3 Tx mailboxes
Three transmit mailboxes are provided to the software for setting up messages. The
transmission Scheduler decides which mailbox has to be transmitted first.
Receive FIFO
Two receive FIFOs are used by hardware to store the incoming messages. Three complete
messages can be stored in each FIFO. The FIFOs are managed completely by hardware.
$FFHSWDQFH)LOWHUV
,QWHUUXSW(QDEOH
&$1%$FWLYH&RUH
(UURU6WDWXV 0HPRU\
$FFHVV )LOWHU
%LW7LPLQJ &RQWUROOHU
)LOWHU0RGH
7UDQVPLVVLRQ
)LOWHU6FDOH 6FKHGXOHU
6ODYH 6ODYH
6ODYH 5HFHLYH),)2 5HFHLYH),)2
)LOWHU),)2$VVLJQ 7[0DLOER[HV
)LOWHU$FWLYDWLRQ
0DLOER[ 0DLOER[
0DLOER[
&$1
6ODYH
0DVWHU&RQWURO
&RQWURO6WDWXV&RQILJXUDWLRQ
0DVWHU6WDWXV
7[6WDWXV
5[),)26WDWXV
&$1%$FWLYH&RUH
5[),)26WDWXV
,QWHUUXSW(QDEOH 1RWH&$1VWDUWILOWHUEDQNQXPEHUQLVFRQILJXUDEOHE\ZULWLQJ
&$16%>@ELWVLQWKH&$1B)05UHJLVWHU
(UURU6WDWXV
%LW7LPLQJ
DLE
Zdž &/&K Ϭ ^ƚĂƚƵƐ
Zdž &/&K ϭ ^ƚĂƚƵƐ
ŽŶ ƚƌŽů ͬ^ƚĂƚƵƐ ͬ ŽŶ ĨŝŐƵƌĂ ƚŝŽ Ŷ
dƌĂŶƐŵŝƐƐŝŽŶ
/ŶƚĞƌƌƵƉ ƚ ŶĂďů Ğ ƐĐŚĞĚƵůĞƌ
E Ϯ͘Ϭ ĐƚŝǀĞ Žƌ Ğ
ƌƌŽƌ ^ƚĂƚƵƐ
ĐĐĞƉ ƚĂŶĐĞ &ŝůƚĞƌƐ
ŝƚ dŝŵ ŝŶŐ ϭϯ
͘͘ ͘͘ ϭϮ
DĞŵ ŽƌLJ Ϯ ϯ
&ŝůƚĞƌ DĂƐƚĞƌ ϭ
ĐĐĞƐƐ &ŝůƚĞƌ Ϭ
&ŝůƚĞƌ DŽĚ Ğ ŽŶƚƌŽůůĞƌ
DĂƐƚĞƌ &ŝů ƚĞƌƐ ^ ůĂǀ Ğ &ŝůƚĞƌƐ
&ŝ ůƚĞƌ ^Đ ĂůĞ ;Ϭ ƚŽ ϮϳͿ ;Ϭ ƚŽ ϮϳͿ
06Y9
5HVHW
6OHHS
6/$.
,1$.
4 6/
5 ((
,1 6/ 3
,1
&
1 (( 5
6< . 3 4
$
(3 $& ,1
5 &
.
6/( (3 4
$
(
6/ &
.
1RUPDO ,154$&.
,QLWLDOL]DWLRQ
6/$. 6/$.
,1$.
,1$.
,1546<1&6/((3
DL
1. ACK = The wait state during which hardware confirms a request by setting the INAK or SLAK bits in the
CAN_MSR register
2. SYNC = The state during which bxCAN waits until the CAN bus is idle, meaning 11 consecutive recessive
bits have been monitored on CANRX
E[&$1
7[ 5[
&$17; &$15;
069
E[&$1
7[ 5[
&$17; &$15;
069
This mode is provided for self-test functions. To be independent of external events, the CAN
Core ignores acknowledge errors (no dominant bit sampled in the acknowledge slot of a
data / remote frame) in Loop Back Mode. In this mode, the bxCAN performs an internal
feedback from its Tx output to its Rx input. The actual value of the CANRX input pin is
disregarded by the bxCAN. The transmitted messages can be monitored on the CANTX pin.
E[&$1
7[ 5[
&$17; &$15;
069
Transmit priority
By identifier
When more than one transmit mailbox is pending, the transmission order is given by the
identifier of the message stored in the mailbox. The message with the lowest identifier value
has the highest priority according to the arbitration of the CAN protocol. If the identifier
values are equal, the lower mailbox number will be scheduled first.
Abort
A transmission request can be aborted by the user setting the ABRQ bit in the CAN_TSR
register. In pending or scheduled state, the mailbox is aborted immediately. An abort
request while the mailbox is in transmit state can have two results. If the mailbox is
transmitted successfully the mailbox becomes empty with the TXOK bit set in the
CAN_TSR register. If the transmission fails, the mailbox becomes scheduled, the
transmission is aborted and becomes empty with TXOK cleared. In all cases the mailbox
will become empty again at least at the end of the current transmission.
(037<
54&3 ;
7;2. ;
7;54
70(
3(1',1*
54&3 0DLOER[KDV
7;2. KLJKHVWSULRULW\
$%54
70(
0DLOER[GRHVQRW
KDYHKLJKHVWSULRULW\
(037< 6&+('8/('
54&3 $%54 54&3
7;2. 7;2.
70( 70(
&$1%XV ,'/(
(037<
7UDQVPLWVXFFHHGHG
54&3
7;2.
70(
069
Valid message
A received message is considered as valid when it has been received correctly according to
the CAN protocol (no error until the last but one bit of the EOF field) and It passed through
the identifier filtering successfully, see Section 32.7.4: Identifier filtering.
%-049
&-0X 6ALID -ESSAGE
&/62 2ECEIVED
0%.$).'?
2ELEASE &-0X
-AILBOX &/62
0%.$).'?
&-0X
&/62
0%.$).'?
&-0X 6ALID -ESSAGE
&/62 2ECEIVED
/6%225.
2ELEASE &-0X
-AILBOX &/62
2&/-
6ALID -ESSAGE
2ECEIVED
-36
FIFO management
Starting from the empty state, the first valid message received is stored in the FIFO which
becomes pending_1. The hardware signals the event setting the FMP[1:0] bits in the
CAN_RFR register to the value 01b. The message is available in the FIFO output mailbox.
The software reads out the mailbox content and releases it by setting the RFOM bit in the
CAN_RFR register. The FIFO becomes empty again. If a new valid message has been
received in the meantime, the FIFO stays in pending_1 state and the new message is
available in the output mailbox.
If the application does not release the mailbox, the next valid message will be stored in the
FIFO which enters pending_2 state (FMP[1:0] = 10b). The storage process is repeated for
the next valid message putting the FIFO into pending_3 state (FMP[1:0] = 11b). At this
point, the software must release the output mailbox by setting the RFOM bit, so that a
mailbox is free to store the next valid message. Otherwise the next valid message received
will cause a loss of message.
Refer also to Section 32.7.5: Message storage
Overrun
Once the FIFO is in pending_3 state (i.e. the three mailboxes are full) the next valid
message reception will lead to an overrun and a message will be lost. The hardware
signals the overrun condition by setting the FOVR bit in the CAN_RFR register. Which
message is lost depends on the configuration of the FIFO:
• If the FIFO lock function is disabled (RFLM bit in the CAN_MCR register cleared) the
last message stored in the FIFO will be overwritten by the new incoming message. In
this case the latest messages will be always available to the application.
• If the FIFO lock function is enabled (RFLM bit in the CAN_MCR register set) the most
recent message will be discarded and the software will have the three oldest messages
in the FIFO available.
This hardware filtering saves CPU resources which would be otherwise needed to perform
filtering by software. Each filter bank x consists of two 32-bit registers, CAN_FxR0 and
CAN_FxR1.
Scalable width
To optimize and adapt the filters to the application needs, each filter bank can be scaled
independently. Depending on the filter scale a filter bank provides:
• One 32-bit filter for the STDID[10:0], EXTID[17:0], IDE and RTR bits.
• Two 16-bit filters for the STDID[10:0], RTR, IDE and EXTID[17:15] bits.
Refer to Figure 387.
Furthermore, the filters can be configured in mask mode or in identifier list mode.
Mask mode
In mask mode the identifier registers are associated with mask registers specifying which
bits of the identifier are handled as “must match” or as “don’t care”.
7ZR%LW)LOWHUV,GHQWLILHU/LVW
7ZR%LW)LOWHUV,GHQWLILHU0DVN
,' &$1B)[5>@ &$1B)[5>@
Q
)%0[
)RXU%LW)LOWHUV,GHQWLILHU/LVW
,' &$1B)[5>@ &$1B)[5>@ Q
,'
)%0[
[ ILOWHUEDQNQXPEHU
)LOWHU%DQN6FDOH
,' ,GHQWLILHU
)LOWHU%DQN0RGH
7KHVHELWVDUHORFDWHGLQWKH&$1B)65UHJLVWHU
&RQILJ%LWV
7KHVHELWVDUHORFDWHGLQWKH&$1B)05UHJLVWHU
06Y9
,'0DVN ELW ,'/LVW ELW
'HDFWLYDWHG
,'/LVW ELW
,'0DVN ELW
'HDFWLYDWHG
,'0DVN ELW
,'/LVW ELW
'HDFWLYDWHG
,'0DVN ELW
,'/LVW ELW
,'/LVW ELW ,'/LVW ELW
,' ,GHQWLILHU
069
([DPSOHRIILOWHUEDQNVLQELWXQLGHQWLILHGPRGHDQG
WKHUHPDLQLQJLQELWLGHQWLILHUPDVNPRGH
0HVVDJH5HFHLYHG
,GHQWLILHU &WUO 'DWD
)LOWHUEDQN
1XP 5HFHLYH),)2
,GHQWLILHU
,GHQWLILHU 0HVVDJH
,GHQWLILHU/LVW
,GHQWLILHU ,GHQWLILHU0DWFK 6WRUHG
,GHQWLILHU
,GHQWLILHU 0DVN
,GHQWLILHU
0DVN )LOWHUQXPEHUVWRUHGLQWKH
)0,
)LOWHU0DWFK,QGH[ILHOG
ZLWKLQWKH&$1B5'7[5
,GHQWLILHU UHJLVWHU
0DVN
1R0DWFK
)RXQG
0HVVDJH'LVFDUGHG
069
The example above shows the filtering principle of the bxCAN. On reception of a message,
the identifier is compared first with the filters configured in identifier list mode. If there is a
match, the message is stored in the associated FIFO and the index of the matching filter is
stored in the Filter Match Index. As shown in the example, the identifier matches with
Identifier #2 thus the message content and FMI 2 is stored in the FIFO.
If there is no match, the incoming identifier is then compared with the filters configured in
mask mode.
If the identifier does not match any of the identifiers configured in the filters, the message is
discarded by hardware without disturbing the software.
Transmit mailbox
The software sets up the message to be transmitted in an empty transmit mailbox. The
status of the transmission is indicated by hardware in the CAN_TSR register.
0 CAN_TIxR
4 CAN_TDTxR
8 CAN_TDLxR
12 CAN_TDHxR
Receive mailbox
When a message has been received, it is available to the software in the FIFO output
mailbox. Once the software has handled the message (e.g. read it) the software must
release the FIFO output mailbox by means of the RFOM bit in the CAN_RFR register to
make the next incoming message available. The filter match index is stored in the MFMI
field of the CAN_RDTxR register. The 16-bit time stamp value is stored in the TIME[15:0]
field of CAN_RDTxR.
0 CAN_RIxR
4 CAN_RDTxR
8 CAN_RDLxR
12 CAN_RDHxR
:KHQ7(&RU5(&!
(5525$&7,9( (55253$66,9(
:KHQ7(&DQG5(&
%862))
DL
Bus-Off recovery
The Bus-Off state is reached when TEC is greater than 255, this state is indicated by BOFF
bit in CAN_ESR register. In Bus-Off state, the bxCAN is no longer able to transmit and
receive messages.
Depending on the ABOM bit in the CAN_MCR register bxCAN will recover from Bus-Off
(become error active again) either automatically or on software request. But in both cases
the bxCAN has to wait at least for the recovery sequence specified in the CAN standard
(128 occurrences of 11 consecutive recessive bits monitored on CANRX).
If ABOM is set, the bxCAN will start the recovering sequence automatically after it has
entered Bus-Off state.
If ABOM is cleared, the software must initiate the recovering sequence by requesting
bxCAN to enter and to leave initialization mode.
Note: In initialization mode, bxCAN does not monitor the CANRX signal, therefore it cannot
complete the recovery sequence. To recover, bxCAN must be in normal mode.
A valid edge is defined as the first transition in a bit time from dominant to recessive bus
level provided the controller itself does not send a recessive bit.
If a valid edge is detected in BS1 instead of SYNC_SEG, BS1 is extended by up to SJW so
that the sample point is delayed.
Conversely, if a valid edge is detected in BS2 instead of SYNC_SEG, BS2 is shortened by
up to SJW so that the transmit point is moved earlier.
As a safeguard against programming errors, the configuration of the Bit Timing Register
(CAN_BTR) is only possible while the device is in Standby mode.
Note: For a detailed description of the CAN bit timing and resynchronization mechanism, refer to
the ISO 11898 standard.
120,1$/%,77,0(
6$03/(32,17 75$160,732,17
%DXG 5DWH
1RPLQDO%LW7LPH
1RPLQDO%LW7LPH ; W T W %6 W %6
ZLWK
W%6 WT[ 76>@
W%6 WT[ 76>@
WT %53>@ [W3&/.
ZKHUHWTUHIHUVWRWKH7LPHTXDQWXP
W3&/. WLPHSHULRGRIWKH$3%FORFN
%53>@76>@DQG76>@DUHGHILQHGLQWKH&$1B%755HJLVWHU
069
$&.
62)
,'(
U
575
,QWHU)UDPH6SDFH
,QWHU)UDPH6SDFH 'DWD)UDPH ([WHQGHG,GHQWLILHU RU2YHUORDG)UDPH
1
655
,'(
U
U
$&.
575
,QWHU)UDPH6SDFH
,QWHU)UDPH6SDFH 5HPRWH)UDPH
RU2YHUORDG)UDPH
$UELWUDWLRQ)LHOG &WUO)LHOG &5&)LHOG $&.)LHOG
,'(
U
$&.
575
'DWD)UDPHRU ,QWHU)UDPH6SDFH
(UURU)UDPH
5HPRWH)UDPH RU2YHUORDG)UDPH
(UURU )ODJ(FKR (UURU
)ODJ 'HOLPLWHU
1RWHV
1
'DWD)UDPHRU 62) 6WDUW2I)UDPH
$Q\)UDPH ,QWHU)UDPH6SDFH 5HPRWH)UDPH ,' ,GHQWLILHU
6XVSHQG 575 5HPRWH7UDQVPLVVLRQ5HTXHVW
,QWHUPLVVLRQ %XV,GOH ,'( ,GHQWLILHU([WHQVLRQ%LW
7UDQVPLVVLRQ
U 5HVHUYHG%LW
'/& 'DWD/HQJWK&RGH
&5& &\FOLF5HGXQGDQF\&RGH
(QGRI)UDPHRU (UURUIODJGRPLQDQWELWVLIQRGHLVHUURU
(UURU'HOLPLWHURU ,QWHU)UDPH6SDFH DFWLYHHOVHUHFHVVLYHELWV
2YHUORDG'HOLPLWHU 2YHUORDG)UDPH RU(UURU)UDPH 6XVSHQGWUDQVPLVVLRQDSSOLHVWRHUURU
SDVVLYHQRGHVRQO\
2YHUORDG 2YHUORDG 2YHUORDG (2) (QGRI)UDPH
)ODJ (FKR 'HOLPLWHU $&. $FNQRZOHGJHELW
&WUO &RQWURO
DLE
)03,(
)03 ),)2
,17(55837
)),(
&$1B5)5 )8//
)29,(
)295
)03,(
)03 ),)2
,17(55837
)),(
&$1B5)5 )8//
)29,(
)295
(55,(
(:*,(
(:*)
(39,(
&$1B(65 (39)
%2),(
(55,
%2)) &$1B065 67$786 &+$1*(
(5525
/(&,(
,17(55837
/(&
:.8,(
:.8,
&$1B065
6/.,(
6/$.,
069
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. DBF
rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RESET Res. Res. Res. Res. Res. Res. Res. TTCM ABOM AWUM NART RFLM TXFP SLEEP INRQ
rs rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. RX SAMP RXM TXM Res. Res. Res. SLAKI WKUI ERRI SLAK INAK
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LOW2 LOW1 LOW0 TME2 TME1 TME0 CODE[1:0] ABRQ2 Res. Res. Res. TERR2 ALST2 TXOK2 RQCP2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ABRQ1 Res. Res. Res. TERR1 ALST1 TXOK1 RQCP1 ABRQ0 Res. Res. Res. TERR0 ALST0 TXOK0 RQCP0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. RFOM0 FOVR0 FULL0 Res. FMP0[1:0]
rs rc_w1 rc_w1 r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. RFOM1 FOVR1 FULL1 Res. FMP1[1:0]
rs rc_w1 rc_w1 r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. SLKIE WKUIE
rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
REC[7:0] TEC[7:0]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. LEC[2:0] Res. BOFF EPVF EWGF
rw rw rw r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SILM LBKM Res. Res. Res. Res. SJW[1:0] Res. TS2[2:0] TS1[3:0]
rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
STID[10:0]/EXID[28:18] EXID[17:13]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TIME[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. DLC[3:0]
rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA3[7:0] DATA2[7:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA1[7:0] DATA0[7:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA7[7:0] DATA6[7:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA5[7:0] DATA4[7:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
STID[10:0]/EXID[28:18] EXID[17:13]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r r r r r r r r r r r r r r r
CAN receive FIFO mailbox data length control and time stamp register
(CAN_RDTxR) (x = 0..1)
Address offsets: 0x1B4, 0x1C4
Reset value: 0xXXXX XXXX
All RX registers are write protected.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TIME[15:0]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA3[7:0] DATA2[7:0]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA1[7:0] DATA0[7:0]
r r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DATA7[7:0] DATA6[7:0]
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATA5[7:0] DATA4[7:0]
r r r r r r r r r r r r r r r r
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res. Res.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. Res. CANSB[5:0] Res. Res. Res. Res. Res. Res. Res. FINIT
rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. FBM27 FBM26 FBM25 FBM24 FBM23 FBM22 FBM21 FBM20 FBM19 FBM18 FBM17 FBM16
rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FBM15 FBM14 FBM13 FBM12 FBM11 FBM10 FBM9 FBM8 FBM7 FBM6 FBM5 FBM4 FBM3 FBM2 FBM1 FBM0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: Refer to Figure 387: Filter bank scale configuration - register organization on page 1098.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. FSC27 FSC26 FSC25 FSC24 FSC23 FSC22 FSC21 FSC20 FSC19 FSC18 FSC17 FSC16
rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FSC15 FSC14 FSC13 FSC12 FSC11 FSC10 FSC9 FSC8 FSC7 FSC6 FSC5 FSC4 FSC3 FSC2 FSC1 FSC0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Note: Refer to Figure 387: Filter bank scale configuration - register organization on page 1098.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. Res. Res. Res. FFA27 FFA26 FFA25 FFA24 FFA23 FFA22 FFA21 FFA20 FFA19 FFA18 FFA17 FFA16
rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FFA15 FFA14 FFA13 FFA12 FFA11 FFA10 FFA9 FFA8 FFA7 FFA6 FFA5 FFA4 FFA3 FFA2 FFA1 FFA0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT FACT
Res. Res. Res. Res.
27 26 25 24 23 22 21 20 19 18 17 16
rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FACT FACT FACT FACT FACT FACT
FACT9 FACT8 FACT7 FACT6 FACT5 FACT4 FACT3 FACT2 FACT1 FACT0
15 14 13 12 11 10
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FB31 FB30 FB29 FB28 FB27 FB26 FB25 FB24 FB23 FB22 FB21 FB20 FB19 FB18 FB17 FB16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FB15 FB14 FB13 FB12 FB11 FB10 FB9 FB8 FB7 FB6 FB5 FB4 FB3 FB2 FB1 FB0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
In all configurations:
Note: Depending on the scale and mode configuration of the filter the function of each register can
differ. For the filter mapping, functions description and mask registers association, refer to
Section 32.7.4: Identifier filtering on page 1096.
A Mask/Identifier register in mask mode has the same bit mapping as in identifier list
mode.
For the register mapping/addresses of the filter banks refer to Table 218 on page 1127.
0x17F
0x01C
0x00C
0x020-
Offset
32.9.5
RM0430
-
CAN_IER
CAN_TSR
CAN_BTR
CAN_ESR
CAN_TI0R
CAN_MSR
CAN_MCR
Register
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
Reset value
CAN_RF1R
CAN_RF0R
x
0
0
0
Res. SILM Res. Res. Res. Res. Res. 31
x
0
0
0
Res. LBKM Res. Res. Res. LOW[2:0] Res. Res. 30
x
0
0
Res. Res. Res. Res. Res. Res. Res. 29
x
0
1
Res. Res. Res. Res. Res. Res. Res. 28
x
0
1
Res. Res. Res. Res. Res. TME[2:0] Res. Res. 27
REC[7:0]
x
0
1
Res. Res. Res. Res. Res. Res. Res. 26
x
0
0
0
Res. Res. Res. Res. Res. Res. 25
bxCAN register map
SJW[1:0] CODE[1:0]
x
0
0
0
Res. Res. Res. Res. Res. Res. 24
STID[10:0]/EXID[28:18]
x
0
0
Res. Res. Res. Res. Res. ABRQ2 Res. Res. 23
x
0
0
Res. Res. Res. Res. Res. Res. Res. 22
x
1
0
Res. Res. Res. Res. Res. Res. Res. 21
TS2[2:0]
x
0
0
Res. Res. Res. Res. Res. Res. Res. 20
x
0
0
0
Res. Res. Res. Res. TERR2 Res. Res. 19
TEC[7:0]
x
0
0
0
Res. Res. Res. Res. ALST2 Res. Res. 18
x
1
0
0
RM0430 Rev 8
Res. SLKIE Res. Res. TXOK2 Res. Res. 17
TS1[3:0]
x
1
0
0
0
1
x
0
0
0
x
Res. Res. Res. Res. Res. Res. Res. Res. Res. 14
x
Res. Res. Res. Res. Res. Res. Res. Res. Res. 13
x
12
offset 0x200 to 0x31C are present only in CAN1 and CAN3.
x
0
0
1
EXID[17:0]
x
0
0
1
Table 218. bxCAN register map and reset values
x
0
0
0
0
x
0
0
0
0
x
0
0
0
x
0
0
0
0
x
0
0
0
0
0
0
x
0
0
0
0
0
0
0
BRP[9:0]
x
0
0
0
0
0
0
0
x
0
0
0
0
0
0
x
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
1127/1324
1130
Controller area network (bxCAN) RM0430
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TGT
CAN_TDT0R TIME[15:0] DLC[3:0]
0x184
Reset value x x x x x x x x x x x x x x x x - - - - - - - x - - - - x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
TXRQ
RTR
IDE
CAN_TI1R STID[10:0]/EXID[28:18] EXID[17:0]
0x190
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TGT
CAN_TDT1R TIME[15:0] DLC[3:0]
0x194
Reset value x x x x x x x x x x x x x x x x - - - - - - - x - - - - x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
TXRQ
RTR
CAN_TI2R STID[10:0]/EXID[28:18] EXID[17:0] IDE
0x1A0
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
TGT
Reset value x x x x x x x x x x x x x x x x - - - - - - - x - - - - x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Res.
RTR
IDE
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
Res.
Res.
Res.
Res.
CAN_RDT0R TIME[15:0] FMI[7:0] DLC[3:0]
0x1B4
Reset value x x x x x x x x x x x x x x x x x x x x x x x x - - - - x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Res.
RTR
IDE
CAN_RI1R STID[10:0]/EXID[28:18] EXID[17:0]
0x1C0
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x -
Res.
Res.
Res.
Res.
CAN_RDT1R TIME[15:0] FMI[7:0] DLC[3:0]
0x1C4
Reset value x x x x x x x x x x x x x x x x x x x x x x x x - - - - x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
0x1D0-
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x1FF
-
FINIT
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
CAN_FMR CANSB[5:0]
0x200
Reset value 0 0 1 1 1 0 1
Res.
Res.
Res.
Res.
CAN_FM1R FBM[27:0]
0x204
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
-
0x208
-
Res.
Res.
Res.
Res.
CAN_FS1R FSC[27:0]
0x20C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x210 -
Offset Register
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
10
11
9
8
7
6
5
4
3
2
1
0
Res.
Res.
Res.
Res.
CAN_FFA1R FFA[27:0]
0x214
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x218 -
Res.
Res.
Res.
Res.
CAN_FA1R FACT[27:0]
0x21C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x220 -
0x224-
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
Res.
0x23F
-
CAN_F0R1 FB[31:0]
0x240
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
CAN_F0R2 FB[31:0]
0x244
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
CAN_F1R1 FB[31:0]
0x248
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
CAN_F1R2 FB[31:0]
0x24C
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
. . .
. . .
. . .
. . .
CAN_F27R1 FB[31:0]
0x318
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
CAN_F27R2 FB[31:0]
0x31C
Reset value x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
33.1 Introduction
Portions Copyright (c) Synopsys, Inc. All rights reserved. Used with permission.
This section presents the architecture and the programming model of the OTG_FS
controller.
The following acronyms are used throughout the section:
FS Full-speed
LS Low-speed
MAC Media access controller
OTG On-the-go
PFC Packet FIFO controller
PHY Physical layer
USB Universal serial bus
UTMI USB 2.0 Transceiver Macrocell interface (UTMI)
LPM Link power management
BCD Battery charging detector
HNP Host negotiation protocol
SRP Session request protocol
Host mode - X X
Device mode - X -
&RUWH[FRUH
27*B)6B'3
3RZHU
86% 27* 27*B)6B'0
DQG
27*)6 870,)6 )6
FORFN 27*B)6B,'
FRUH 3+<
FRQWUROOHU 86%VXVSHQG
86%FORFNDW0+] 6\VWHPFORFNGRPDLQ
86%FORFN 27*B)6B9%86
GRPDLQ
5$0EXV
8QLYHUVDOVHULDOEXV
27*B)6B62)
.E\WH
86%GDWD
),)2V
069
usb_sof Digital output USB OTG start-of-frame event for on chip peripherals
usb_wkup Digital output USB OTG wakeup event output
usb_gbl_it Digital output USB OTG global interrupt
protocol (SRP), detect valid startup and end-of-session conditions, and constantly
monitor the VBUS supply during USB operations.
• VBUS pulsing method circuit used to charge/discharge VBUS through resistors during
the SRP (weak drive).
Caution: To guarantee a correct operation for the USB OTG FS peripheral, the AHB frequency should
be higher than 14.2 MHz.
9''
*3,2 (1 67036675
&XUUHQWOLPLWHG 93ZU
2YHUFXUUHQW SRZHUGLVWULEXWLRQ
*3,2,54 VZLWFK
86%PLFUR$%FRQQHFWRU
9%86
'0
26&B,1 '3
,'
26&B287
966
06Y9
1. External voltage regulator only needed when building a VBUS powered device.
2. STMPS2141STR needed only if the application has to support a VBUS powered device. A basic power
switch can be used if 5 V are available on the application board.
9''
9WR9''
9ROWDJH
UHJXODWRU
9''
'W/K (1 67036675
&XUUHQWOLPLWHG 93ZU
2YHUFXUUHQW SRZHUGLVWULEXWLRQ
'W/Kн/ZY VZLWFK
9%86
'0
h^ŵŝĐƌŽĐŽŶŶĞĐƚŽƌ
K^ͺ/E '3
K^ͺKhd
966
06Y9
Soft disconnect
The powered state can be exited by software with the soft disconnect feature. The DP pull-
up resistor is removed by setting the soft disconnect bit in the device control register (SDIS
bit in OTG_DCTL), causing a device disconnect detection interrupt on the host side even
though the USB cable was not really removed from the host port.
Default state
In the Default state the OTG_FS expects to receive a SET_ADDRESS command from the
host. No other USB operation is possible. When a valid SET_ADDRESS command is
decoded on the USB, the application writes the corresponding number into the device
address field in the device configuration register (DAD bit in OTG_DCFG). The OTG_FS
then enters the address state and is ready to answer host transactions at the configured
USB address.
Suspended state
The OTG_FS peripheral constantly monitors the USB activity. After counting 3 ms of USB
idleness, the early suspend interrupt (ESUSP bit in OTG_GINTSTS) is issued, and
confirmed 3 ms later, if appropriate, by the suspend interrupt (USBSUSP bit in
OTG_GINTSTS). The device suspend bit is then automatically set in the device status
register (SUSPSTS bit in OTG_DSTS) and the OTG_FS enters the suspended state.
The suspended state may optionally be exited by the device itself. In this case the
application sets the remote wakeup signaling bit in the device control register (RWUSIG bit
in OTG_DCTL) and clears it after 1 to 15 ms.
When a resume signaling is detected from the host, the resume interrupt (WKUPINT bit in
OTG_GINTSTS) is generated and the device suspend bit is automatically cleared.
which the transfer is not completed in the current frame. This interrupt is asserted
along with the end of periodic frame interrupt (OTG_GINTSTS/EOPF).
• 5 OUT endpoints
– Each of them can be configured to support the isochronous, bulk or interrupt
transfer type
– Each of them has a proper control (OTG_DOEPCTLx), transfer configuration
(OTG_DOEPTSIZx) and status-interrupt (OTG_DOEPINTx) register
– Device OUT endpoints common interrupt mask register (OTG_DOEPMSK) is
available to enable/disable a single kind of endpoint interrupt source on all of the
OUT endpoints (EP0 included)
– Support for incomplete isochronous OUT transfer interrupt (INCOMPISOOUT bit
in OTG_GINTSTS), asserted when there is at least one isochronous OUT
endpoint on which the transfer is not completed in the current frame. This interrupt
is asserted along with the end of periodic frame interrupt (OTG_GINTSTS/EOPF).
Endpoint control
• The following endpoint controls are available to the application through the device
endpoint-x IN/OUT control register (OTG_DIEPCTLx/OTG_DOEPCTLx):
– Endpoint enable/disable
– Endpoint activate in current configuration
– Program USB transfer type (isochronous, bulk, interrupt)
– Program supported packet size
– Program Tx FIFO number associated with the IN endpoint
– Program the expected or transmitted data0/data1 PID (bulk/interrupt only)
– Program the even/odd frame during which the transaction is received or
transmitted (isochronous only)
– Optionally program the NAK bit to always negative-acknowledge the host
regardless of the FIFO status
– Optionally program the STALL bit to always stall host tokens to that endpoint
– Optionally program the SNOOP mode for OUT endpoint not to check the CRC
field of received data
Endpoint transfer
The device endpoint-x transfer size registers (OTG_DIEPTSIZx/OTG_DOEPTSIZx) allow
the application to program the transfer size parameters and read the transfer status.
Programming must be done before setting the endpoint enable bit in the endpoint control
register. Once the endpoint is enabled, these fields are read-only as the OTG_FS core
updates them with the current transfer status.
The following transfer parameters can be programmed:
• Transfer size in bytes
• Number of packets that constitute the overall transfer size
Endpoint status/interrupt
The device endpoint-x interrupt registers (OTG_DIEPINTx/OTG_DOPEPINTx) indicate the
status of an endpoint with respect to USB- and AHB-related events. The application must
read these registers when the OUT endpoint interrupt bit or the IN endpoint interrupt bit in
the core interrupt register (OEPINT bit in OTG_GINTSTS or IEPINT bit in OTG_GINTSTS,
respectively) is set. Before the application can read these registers, it must first read the
device all endpoints interrupt (OTG_DAINT) register to get the exact endpoint number for
the device endpoint-x interrupt register. The application must clear the appropriate bit in this
register to clear the corresponding bits in the OTG_DAINT and OTG_GINTSTS registers
The peripheral core provides the following status checks and interrupt generation:
• Transfer completed interrupt, indicating that data transfer was completed on both the
application (AHB) and USB sides
• Setup stage has been done (control-out only)
• Associated transmit FIFO is half or completely empty (in endpoints)
• NAK acknowledge has been transmitted to the host (isochronous-in only)
• IN token received when Tx FIFO was empty (bulk-in/interrupt-in only)
• Out token received when endpoint was not yet enabled
• Babble error condition has been detected
• Endpoint disable by application is effective
• Endpoint NAK by application is effective (isochronous-in only)
• More than 3 back-to-back setup packets were received (control-out only)
• Timeout condition detected (control-in only)
• Isochronous out packet has been dropped, without generating an interrupt
9''
9
(1 67036675
*3,2
&XUUHQWOLPLWHG 93ZU
2YHUFXUUHQW SRZHUGLVWULEXWLRQ
*3,2,54
VZLWFK
86%6WG$FRQQHFWRU
9%86
'0
26&B,1
'3
966
26&B287
06Y9
VBUS valid
When HNP or SRP is enabled the VBUS sensing pin should be connected to VBUS. The
VBUS input ensures that valid VBUS levels are supplied by the charge pump during USB
operations. Any unforeseen VBUS voltage drop below the VBUS valid threshold (4.4 V) leads
to an OTG interrupt triggered by the session end detected bit (SEDET bit in
OTG_GOTGINT). The application is then required to remove the VBUS power and clear the
port power bit.
When HNP and SRP are both disabled, the VBUS sensing pin does not need to be
connected to VBUS.
The charge pump overcurrent flag can also be used to prevent electrical damage. Connect
the overcurrent flag output from the charge pump to any GPIO input and configure it to
generate a port interrupt on the active level. The overcurrent ISR must promptly disable the
VBUS generation and clear the port power bit.
Host enumeration
After detecting a peripheral connection the host must start the enumeration process by
sending USB reset and configuration commands to the new peripheral.
Before starting to drive a USB reset, the application waits for the OTG interrupt triggered by
the debounce done bit (DBCDNE bit in OTG_GOTGINT), which indicates that the bus is
stable again after the electrical debounce caused by the attachment of a pull-up resistor on
DP (FS) or DM (LS).
The application drives a USB reset signaling (single-ended zero) over the USB by keeping
the port reset bit set in the host port control and status register (PRST bit in OTG_HPRT) for
a minimum of 10 ms and a maximum of 20 ms. The application takes care of the timing
count and then of clearing the port reset bit.
Once the USB reset sequence has completed, the host port interrupt is triggered by the port
enable/disable change bit (PENCHNG bit in OTG_HPRT). This informs the application that
the speed of the enumerated peripheral can be read from the port speed field in the host
port control and status register (PSPD bit in OTG_HPRT) and that the host is starting to
drive SOFs (FS) or Keep alives (LS). The host is now ready to complete the peripheral
enumeration by sending peripheral configuration commands.
Host suspend
The application decides to suspend the USB activity by setting the port suspend bit in the
host port control and status register (PSUSP bit in OTG_HPRT). The OTG_FS core stops
sending SOFs and enters the suspended state.
The suspended state can be optionally exited on the remote device’s initiative (remote
wakeup). In this case the remote wakeup interrupt (WKUPINT bit in OTG_GINTSTS) is
generated upon detection of a remote wakeup signaling, the port resume bit in the host port
control and status register (PRES bit in OTG_HPRT) self-sets, and resume signaling is
automatically driven over the USB. The application must time the resume window and then
clear the port resume bit to exit the suspended state and restart the SOF.
If the suspended state is exited on the host initiative, the application must set the port
resume bit to start resume signaling on the host port, time the resume window and finally
clear the port resume bit.
The mask bits for each interrupt source of each channel are also available in the
OTG_HCINTMSKx register.
• The host core provides the following status checks and interrupt generation:
– Transfer completed interrupt, indicating that the data transfer is complete on both
the application (AHB) and USB sides
– Channel has stopped due to transfer completed, USB transaction error or disable
command from the application
– Associated transmit FIFO is half or completely empty (IN endpoints)
– ACK response received
– NAK response received
– STALL response received
– USB transaction error due to CRC failure, timeout, bit stuff error, false EOP
– Babble error
– frame overrun
– data toggle error
670
62)SXOVHRXWSXWWR
86%PLFUR$%FRQQHFWRU
H[WHUQDODXGLRFRQWURO
9%86
,75 62)SXOVH
'
'
966
06Y9
The OTG_FS core provides means to monitor, track and configure SOF framing in the host
and peripheral, as well as an SOF pulse output connectivity feature.
Such utilities are especially useful for adaptive audio clock generation techniques, where
the audio peripheral needs to synchronize to the isochronous stream provided by the PC, or
the host needs to trim its framing rate according to the requirements of the audio peripheral.
The end of periodic frame interrupt (OTG_GINTSTS/EOPF) is used to notify the application
when 80%, 85%, 90% or 95% of the time frame interval elapsed depending on the periodic
frame interval field in the device configuration register (PFIVL bit in OTG_DCFG). This
feature can be used to determine if all of the isochronous traffic for that frame is complete.
Table 223. Compatibility of STM32 low power modes with the OTG
Mode Description USB compatibility
the USB clock switching activity is cut even if the system clock is kept running by the
application for other purposes.
• USB system stop
When the OTG_FS is in the USB suspended state, the application may decide to
drastically reduce the overall power consumption by a complete shut down of all the
clock sources in the system. USB System Stop is activated by first setting the Stop
PHY clock bit and then configuring the system deep sleep mode in the power control
system module (PWR).
The OTG_FS core automatically reactivates both system and USB clocks by
asynchronous detection of remote wakeup (as an host) or resume (as a device)
signaling on the USB.
To save dynamic power, the USB data FIFO is clocked only when accessed by the OTG_FS
core.
62)UHORDG
27*B+),5ZULWH
DLE
Figure 401. Device-mode FIFO address mapping and AHB FIFO access mapping
6LQJOHGDWD
),)2
,1HQGSRLQW7[),)2[ 'HGLFDWHG7[ 27*B',(37;)[>@
7[),)2[
'),)2SXVKDFFHVV ),)2[FRQWURO
SDFNHW
IURP$+% RSWLRQDO 27*B',(37;)[>@
0$&SRS
$Q\287HQGSRLQW 'HGLFDWHG7[
'),)2SRSDFFHVV ),)2FRQWURO 5[SDFNHWV 27*B*5;)6,=>@
IURP$+% RSWLRQDO
0$&SXVK
$ 5[VWDUWDGGUHVVIL[HG
WR
06Y9
Peripheral Rx FIFO
The OTG peripheral uses a single receive FIFO that receives the data directed to all OUT
endpoints. Received packets are stacked back-to-back until free space is available in the Rx
FIFO. The status of the received packet (which contains the OUT endpoint destination
number, the byte count, the data PID and the validity of the received data) is also stored by
the core on top of the data payload. When no more space is available, host transactions are
NACKed and an interrupt is received on the addressed endpoint. The size of the receive
FIFO is configured in the receive FIFO size register (OTG_GRXFSIZ).
The single receive FIFO architecture makes it more efficient for the USB peripheral to fill in
the receive RAM buffer:
• All OUT endpoints share the same RAM buffer (shared FIFO)
• The OTG_FS core can fill in the receive FIFO up to the limit for any host sequence of
OUT tokens
The application keeps receiving the Rx FIFO non-empty interrupt (RXFLVL bit in
OTG_GINTSTS) as long as there is at least one packet available for download. It reads the
packet information from the receive status read and pop register (OTG_GRXSTSP) and
finally pops data off the receive FIFO by reading from the endpoint-related pop address.
Peripheral Tx FIFOs
The core has a dedicated FIFO for each IN endpoint. The application configures FIFO sizes
by writing the endpoint 0 transmit FIFO size register (OTG_DIEPTXF0) for IN endpoint0 and
the device IN endpoint transmit FIFOx registers (OTG_DIEPTXFx) for IN endpoint-x.
Figure 402. Host-mode FIFO address mapping and AHB FIFO access mapping
6LQJOHGDWD
),)2
3HULRGLF7[
27*B+37;)6,=>@
$Q\SHULRGLFFKDQQHO SDFNHWV
3HULRGLF7[),)2
'),)2SXVKDFFHVV
FRQWURO RSWLRQDO
IURP$+% 27*B+37;)6,=>@
0$&SRS
1RQSHULRGLF
27*B+137;)6,=>@
$Q\QRQSHULRGLF 7[SDFNHWV
1RQSHULRGLF7[
FKDQQHO'),)2SXVK
),)2FRQWURO
DFFHVVIURP$+% 27*B+137;)6,=>@
0$&SRS
5[SDFNHWV 27*B*5;)6,=>@
$Q\FKDQQHO'),)2SRS
5[),)2FRQWURO
DFFHVVIURP$+%
5[VWDUWDGGUHVVIL[HGWR
$
0$&SXVK
06Y9
Host Rx FIFO
The host uses one receiver FIFO for all periodic and nonperiodic transactions. The FIFO is
used as a receive buffer to hold the received data (payload of the received packet) from the
USB until it is transferred to the system memory. Packets received from any remote IN
endpoint are stacked back-to-back until free space is available. The status of each received
packet with the host channel destination, byte count, data PID and validity of the received
data are also stored into the FIFO. The size of the receive FIFO is configured in the receive
FIFO size register (OTG_GRXFSIZ).
The single receive FIFO architecture makes it highly efficient for the USB host to fill in the
receive data buffer:
• All IN configured host channels share the same RAM buffer (shared FIFO)
• The OTG_FS core can fill in the receive FIFO up to the limit for any sequence of IN
tokens driven by the host software
The application receives the Rx FIFO not-empty interrupt as long as there is at least one
packet available for download. It reads the packet information from the receive status read
and pop register and finally pops the data off the receive FIFO.
Host Tx FIFOs
The host uses one transmit FIFO for all non-periodic (control and bulk) OUT transactions
and one transmit FIFO for all periodic (isochronous and interrupt) OUT transactions. FIFOs
are used as transmit buffers to hold the data (payload of the transmit packet) to be
transmitted over the USB. The size of the periodic (nonperiodic) Tx FIFO is configured in the
host periodic (nonperiodic) transmit FIFO size OTG_HPTXFSIZ / OTG_HNPTXFSIZ)
register.
The two Tx FIFO implementation derives from the higher priority granted to the periodic type
of traffic over the USB frame. At the beginning of each frame, the built-in host scheduler
processes the periodic request queue first, followed by the nonperiodic request queue.
The two transmit FIFO architecture provides the USB host with separate optimization for
periodic and nonperiodic transmit data buffer management:
• All host channels configured to support periodic (nonperiodic) transactions in the OUT
direction share the same RAM buffer (shared FIFOs)
• The OTG_FS core can fill in the periodic (nonperiodic) transmit FIFO up to the limit for
any sequence of OUT tokens driven by the host software
The OTG_FS core issues the periodic Tx FIFO empty interrupt (PTXFE bit in
OTG_GINTSTS) as long as the periodic Tx FIFO is half or completely empty, depending on
the value of the periodic Tx FIFO empty level bit in the AHB configuration register
(PTXFELVL bit in OTG_GAHBCFG). The application can push the transmission data in
advance as long as free space is available in both the periodic Tx FIFO and the periodic
request queue. The host periodic transmit FIFO and queue status register
(OTG_HPTXSTS) can be read to know how much space is available in both.
OTG_FS core issues the non periodic Tx FIFO empty interrupt (NPTXFE bit in
OTG_GINTSTS) as long as the nonperiodic Tx FIFO is half or completely empty depending
on the non periodic Tx FIFO empty level bit in the AHB configuration register (TXFELVL bit
in OTG_GAHBCFG). The application can push the transmission data as long as free space
is available in both the nonperiodic Tx FIFO and nonperiodic request queue. The host
nonperiodic transmit FIFO and queue status register (OTG_HNPTXSTS) can be read to
know how much space is available in both.
Device RxFIFO =
(5 * number of control endpoints + 8) + ((largest USB packet used / 4) + 1 for status
information) + (2 * number of OUT endpoints) + 1 for Global NAK
Example: The MPS is 1,024 bytes for a periodic USB packet and 512 bytes for a non-
periodic USB packet. There are three OUT endpoints, three IN endpoints, one control
endpoint, and three host channels.
Device RxFIFO = (5 * 1 + 8) + ((1,024 / 4) +1) + (2 * 4) + 1 = 279
Transmit FIFO RAM allocation: the minimum RAM space required for each IN endpoint
Transmit FIFO is the maximum packet size for that particular IN endpoint.
Note: More space allocated in the transmit IN endpoint FIFO results in better performance on the
USB.
Host mode
Receive FIFO RAM allocation:
Status information is written to the FIFO along with each received packet. Therefore, a
minimum space of (largest packet size / 4) + 1 must be allocated to receive packets. If
multiple isochronous channels are enabled, then at least two (largest packet size / 4) + 1
spaces must be allocated to receive back-to-back packets. Typically, two (largest packet
size / 4) + 1 spaces are recommended so that when the previous packet is being transferred
to the CPU, the USB can receive the subsequent packet.
Along with the last packet in the host channel, transfer complete status information is also
pushed to the FIFO. So one location must be allocated for this.
Host RxFIFO = (largest USB packet used / 4) + 1 for status information + 1 transfer
complete
Example: Host RxFIFO = ((1,024 / 4) + 1) + 1 = 258
Transmit FIFO RAM allocation:
The minimum amount of RAM required for the host Non-periodic Transmit FIFO is the
largest maximum packet size among all supported non-periodic OUT channels.
Typically, two largest packet sizes worth of space is recommended, so that when the current
packet is under transfer to the USB, the CPU can get the next packet.
Non-Periodic TxFIFO = largest non-periodic USB packet used / 4
Example: Non-Periodic TxFIFO = (512 / 4) = 128
The minimum amount of RAM required for host periodic Transmit FIFO is the largest
maximum packet size out of all the supported periodic OUT channels. If there is at least one
isochronous OUT endpoint, then the space must be at least two times the maximum packet
size of that channel.
Host Periodic TxFIFO = largest periodic USB packet used / 4
Example: Host Periodic TxFIFO = (1,024 / 4) = 256
Note: More space allocated in the Transmit Non-periodic FIFO results in better performance on
the USB.
*OREDOLQWHUUXSW
27*B)6
$1'
25
*OREDOLQWHUUXSWPDVN ELW
7
,(3 3
17
,1
27*B$+%&)*
7
3,1
7
57
,1
,1
*,
$1' $+%FRQILJXUDWLRQUHJLVWHU
+&
2(
+3
27
27*B*,17676
&RUHUHJLVWHULQWHUUXSW
27*B*,1706.
&RUHLQWHUUXSWPDVNUHJLVWHU
27*B*27*,17
27*LQWHUUXSWUHJLVWHU
27*B',(306.
27*B'2(306.
'HYLFH,1287HQGSRLQWVFRPPRQ
LQWHUUXSWPDVNUHJLVWHU
[
27*B',(3,17[
27*B'2(3,17[ [ +&
'HYLFH,1287HQGSRLQWLQWHUUXSW
UHJLVWHUV
27*B+357
+RVWSRUWFRQWURODQGVWDWXVUHJLVWHU
27*B+$,1706.
+RVWDOOFKDQQHOVLQWHUUXSWPDVNUHJLVWHU
27*B+$,17
+RVWDOOFKDQQHOVLQWHUUXSWUHJLVWHU
[
27*B+&7,1706.[
+RVWFKDQQHOVLQWHUUXSWPDVNUHJLVWHUV [ +&
27*B+&7,17[
+RVWFKDQQHOVLQWHUUXSWUHJLVWHUV
06Y9
1. OTG_FS_WKUP becomes active (high state) when resume condition occurs during L1 SLEEP or L2 SUSPEND states.
OTG_GOTGCTL 0x000 Section 33.15.1: OTG control and status register (OTG_GOTGCTL)
Table 224. Core global control and status registers (CSRs) (continued)
Address
Acronym Register name
offset
OTG_GRXSTSR 0x01C Section 33.15.8: OTG receive status debug read/OTG status read and pop
OTG_GRXSTSP 0x020 registers (OTG_GRXSTSR/OTG_GRXSTSP)
OTG_GRXFSIZ 0x024 Section 33.15.9: OTG receive FIFO size register (OTG_GRXFSIZ)
OTG_HNPTXFSIZ/ Section 33.15.10: OTG host non-periodic transmit FIFO size register
0x028
OTG_DIEPTXF0(1) (OTG_HNPTXFSIZ)/Endpoint 0 Transmit FIFO size (OTG_DIEPTXF0)
OTG_GCCFG 0x038 Section 33.15.12: OTG general core configuration register (OTG_GCCFG)
OTG_GLPMCFG 0x54 Section 33.15.14: OTG core LPM configuration register (OTG_GLPMCFG)
OTG_HFIR 0x404 Section 33.15.19: OTG host frame interval register (OTG_HFIR)
OTG_HAINT 0x414 Section 33.15.22: OTG host all channels interrupt register (OTG_HAINT)
OTG_HPRT 0x440 Section 33.15.24: OTG host port control and status register (OTG_HPRT)