From 680e94d5fadf4e84b54330838069a4c0ed73c8cb Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Sat, 25 Mar 2023 23:16:56 +0100 Subject: [PATCH] Modification of Set_SCLK/Reset_SCLK functions, added gitignore file --- .gitignore | 30 + Etape_2.uvoptx | 62 +- Etape_2.uvprojx | 36 +- FonctionEtape2.asm | 24 +- Listings/Simu_Etape0.map | 549 +++-- Listings/fonctionetape.lst | 16 +- Listings/fonctionetape2.lst | 161 +- Listings/principale.lst | 16 +- Listings/startup_stm32f10x_md.lst | 396 ++-- Objects/Etape_2_Simulé.dep | 44 +- Objects/Simu_Etape0.axf | Bin 269392 -> 266072 bytes Objects/Simu_Etape0.build_log.htm | 70 +- Objects/Simu_Etape0.htm | 80 +- Objects/fonctionetape.o | Bin 2416 -> 2416 bytes Objects/fonctionetape2.o | Bin 2508 -> 2488 bytes Objects/principale.o | Bin 2364 -> 2364 bytes Objects/startup_stm32f10x_md.d | 2 +- Objects/startup_stm32f10x_md.o | Bin 5904 -> 5908 bytes Objects/system_stm32f10x.d | 18 +- Objects/system_stm32f10x.o | Bin 258480 -> 5916 bytes .../STM32F103RB/RTE_Device.h.base@1.1.2 | 1828 +++++++++++++++++ .../startup_stm32f10x_md.s.update@1.0.1 | 308 +++ .../system_stm32f10x.c.update@1.0.1 | 1092 ++++++++++ .../STM32F107VC/RTE_Device.h.base@1.1.2 | 1828 +++++++++++++++++ .../startup_stm32f10x_cl.s.update@1.0.1 | 369 ++++ .../system_stm32f10x.c.update@1.0.1 | 1092 ++++++++++ 26 files changed, 7294 insertions(+), 727 deletions(-) create mode 100644 .gitignore create mode 100644 RTE/Device/STM32F103RB/RTE_Device.h.base@1.1.2 create mode 100644 RTE/Device/STM32F103RB/startup_stm32f10x_md.s.update@1.0.1 create mode 100644 RTE/Device/STM32F103RB/system_stm32f10x.c.update@1.0.1 create mode 100644 RTE/Device/STM32F107VC/RTE_Device.h.base@1.1.2 create mode 100644 RTE/Device/STM32F107VC/startup_stm32f10x_cl.s.update@1.0.1 create mode 100644 RTE/Device/STM32F107VC/system_stm32f10x.c.update@1.0.1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..43314a8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +*.obj +*.o +*.bin +*.list +*.map +*.mk +*.makefile +*.o +*.su +*.d +*.elf +*.scvd +*.crf +*.map +*.sct +*.dbgconf +*.axf +*.htm +*.lnp +*.dep +*.uvguix.* +*.lst +*.iex +**/Objects/ +**/Listings/ +**/Debug/ + + + + diff --git a/Etape_2.uvoptx b/Etape_2.uvoptx index f320ad8..cb26b33 100644 --- a/Etape_2.uvoptx +++ b/Etape_2.uvoptx @@ -125,7 +125,7 @@ 0 DLGDARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=15,39,661,712,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1148,258,1639,750,0)(121=1190,75,1611,502,1)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=15,39,661,712,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1209,244,1630,671,1)(121=1190,75,1611,502,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) 0 @@ -142,9 +142,57 @@ 0 0 + 56 + 1 +
134222432
+ 0 + 0 + 0 + 0 + 0 + 1 + .\FonctionEtape2.asm + + \\Simu_Etape0\FonctionEtape2.asm\56 +
+ + 1 + 0 + 55 + 1 +
134222428
+ 0 + 0 + 0 + 0 + 0 + 1 + .\FonctionEtape2.asm + + \\Simu_Etape0\FonctionEtape2.asm\55 +
+ + 2 + 0 + 78 + 1 +
134222464
+ 0 + 0 + 0 + 0 + 0 + 1 + .\FonctionEtape2.asm + + \\Simu_Etape0\FonctionEtape2.asm\78 +
+ + 3 + 0 87 1 -
134222384
+
134222324
0 0 0 @@ -156,7 +204,7 @@ \\Simu_Etape0\Principale.asm\87
- 1 + 4 0 80 1 @@ -172,7 +220,7 @@ - 2 + 5 0 91 1 @@ -188,7 +236,7 @@ - 3 + 6 0 92 1 @@ -230,7 +278,7 @@ 0 1 - 0 + 1 0 0 0 @@ -244,7 +292,7 @@ 0 0 0 - 1 + 0 0 0 0 diff --git a/Etape_2.uvprojx b/Etape_2.uvprojx index 25e6b72..ae8db7a 100644 --- a/Etape_2.uvprojx +++ b/Etape_2.uvprojx @@ -10,13 +10,13 @@ Simulé 0x4 ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC - 0 + 6190000::V6.19::ARMCLANG + 1 STM32F103RB STMicroelectronics - Keil.STM32F1xx_DFP.2.3.0 + Keil.STM32F1xx_DFP.2.4.0 http://www.keil.com/pack/ IRAM(0x20000000,0x5000) IROM(0x08000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE @@ -186,6 +186,7 @@ 0 0 0 + 0 0 0 8 @@ -313,7 +314,7 @@ 1 - 1 + 2 0 0 1 @@ -322,14 +323,14 @@ 0 0 0 - 2 + 3 0 0 1 0 0 - 1 - 1 + 3 + 5 1 1 0 @@ -428,7 +429,7 @@ STM32F107VC STMicroelectronics - Keil.STM32F1xx_DFP.2.3.0 + Keil.STM32F1xx_DFP.2.4.0 http://www.keil.com/pack/ IRAM(0x20000000,0x10000) IROM(0x08000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE @@ -598,6 +599,7 @@ 0 0 0 + 0 0 0 8 @@ -835,15 +837,15 @@ - - + + - + @@ -854,7 +856,7 @@ RTE\Device\STM32F103RB\RTE_Device.h - + @@ -862,7 +864,7 @@ RTE\Device\STM32F103RB\startup_stm32f10x_md.s - + @@ -876,7 +878,7 @@ RTE\Device\STM32F103RB\system_stm32f10x.c - + @@ -884,7 +886,7 @@ RTE\Device\STM32F107VC\RTE_Device.h - + @@ -892,7 +894,7 @@ RTE\Device\STM32F107VC\startup_stm32f10x_cl.s - + @@ -906,7 +908,7 @@ RTE\Device\STM32F107VC\system_stm32f10x.c - + diff --git a/FonctionEtape2.asm b/FonctionEtape2.asm index 3ab66cd..6a64d8e 100644 --- a/FonctionEtape2.asm +++ b/FonctionEtape2.asm @@ -50,22 +50,22 @@ Barette1 DCB 0,1,0 ;************************************************************************** Set_SCLK PROC - PUSH {R12,R0} ;On stocke R12 dans R0 - LDR R12,=GPIOBASEA ;On recupère l'adresse de base - LDR R5,[R12,#MaskSclk] ;Valeur à l'adresse de l'output - ORR R5, R5,#(0x01 << 5) ;OU LOGIQUE pour calculer la valeur a mettre dans l'output - STRH R5,[R12,#0x0C] ;Etat du port B (R5) stocké dans l'output - BX LR ;Retour + PUSH {R0-R2} ;On stocke R0 à R2 + LDR R1,=GPIOBASEA ;R1 -> Adresse de GPIOA + LDRH R2,[R1,#OffsetOutput] ;Valeur à l'adresse d'ODR : R2 = GPIOA->ODR + ORR R2, R2,#(0x01 << 5) ;similaire à GPIOA->ODR |= (1<<5) + STRH R2,[R1,#OffsetOutput] ;Etat du port B (R5) stocké dans ODR + BX LR ;Retour ENDP Reset_SCLK PROC - PUSH {R12,R0} ;On stocke R12 dans R0 - LDR R12,=GPIOBASEB ;On recupère l'adresse de base - LDR R5,[R12,#MaskSclk] ;Valeur à l'adresse de l'SCLK - AND R5, R5,#~(0x01 << 5) ;OU LOGIQUE pour calculer la valeur a mettre dans l'output - STRH R5,[R12,#0x0C] ;Etat du port B (R5) stocké dans l'output - BX LR ;Retour + PUSH {R0-R2} ;On stocke R0 à R2 + LDR R1,=GPIOBASEA ;R1 -> Adresse de GPIOA + LDRH R2,[R1,#OffsetOutput] ;Valeur à l'adresse d'ODR : R2 = GPIOA->ODR + AND R2, R2,#~(0x01 << 5) ;similaire à GPIOA->ODR &= ~(1<<5) + STRH R2,[R1,#OffsetOutput] ;Etat du port B (R5) stocké dans ODR + BX LR ;Retour ENDP diff --git a/Listings/Simu_Etape0.map b/Listings/Simu_Etape0.map index c3458c3..ec9abe5 100644 --- a/Listings/Simu_Etape0.map +++ b/Listings/Simu_Etape0.map @@ -1,4 +1,4 @@ -Component: ARM Compiler 5.06 update 7 (build 960) Tool: armlink [4d3601] +Component: Arm Compiler for Embedded 6.19 Tool: armlink [5e73cb00] ============================================================================== @@ -18,11 +18,12 @@ Section Cross References startup_stm32f10x_md.o(RESET) refers to fonctiontimer.o(i.TIM2_IRQHandler) for TIM2_IRQHandler startup_stm32f10x_md.o(RESET) refers to fonctiontimer.o(i.TIM3_IRQHandler) for TIM3_IRQHandler startup_stm32f10x_md.o(RESET) refers to fonctiontimer.o(i.TIM4_IRQHandler) for TIM4_IRQHandler - startup_stm32f10x_md.o(.text) refers to system_stm32f10x.o(i.SystemInit) for SystemInit + startup_stm32f10x_md.o(.text) refers to system_stm32f10x.o(.text.SystemInit) for SystemInit startup_stm32f10x_md.o(.text) refers to entry.o(.ARM.Collect$$$$00000000) for __main - system_stm32f10x.o(i.SetSysClock) refers to system_stm32f10x.o(i.SetSysClockTo72) for SetSysClockTo72 - system_stm32f10x.o(i.SystemCoreClockUpdate) refers to system_stm32f10x.o(.data) for SystemCoreClock - system_stm32f10x.o(i.SystemInit) refers to system_stm32f10x.o(i.SetSysClock) for SetSysClock + system_stm32f10x.o(.ARM.exidx.text.SystemInit) refers to system_stm32f10x.o(.text.SystemInit) for [Anonymous Symbol] + system_stm32f10x.o(.text.SystemCoreClockUpdate) refers to system_stm32f10x.o(.data.SystemCoreClock) for SystemCoreClock + system_stm32f10x.o(.text.SystemCoreClockUpdate) refers to system_stm32f10x.o(.rodata.AHBPrescTable) for AHBPrescTable + system_stm32f10x.o(.ARM.exidx.text.SystemCoreClockUpdate) refers to system_stm32f10x.o(.text.SystemCoreClockUpdate) for [Anonymous Symbol] initialisation.o(i.Init_Cible) refers to initialisation.o(i.Init_Port) for Init_Port initialisation.o(i.Init_Cible) refers to initialisation.o(i.Init_Dot) for Init_Dot initialisation.o(i.Init_Cible) refers to initialisation.o(i.Init_Timer1) for Init_Timer1 @@ -83,9 +84,8 @@ Section Cross References timer_systick_1.o(i.Systick_Period) refers to dmul.o(.text) for __aeabi_dmul timer_systick_1.o(i.Systick_Period) refers to cdrcmple.o(.text) for __aeabi_cdrcmple timer_systick_1.o(i.Systick_Prio_IT) refers to timer_systick_1.o(.data) for Ptr_Systick - entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000F) for __rt_final_cpp - entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$00000011) for __rt_final_exit - entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry12b.o(.ARM.Collect$$$$0000000E) for __rt_lib_shutdown_fini + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$0000000F) for __rt_final_exit entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry7b.o(.ARM.Collect$$$$00000008) for _main_clock entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry8b.o(.ARM.Collect$$$$0000000A) for _main_cpp_init entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry9a.o(.ARM.Collect$$$$0000000B) for _main_init @@ -113,6 +113,8 @@ Section Cross References entry5.o(.ARM.Collect$$$$00000004) refers to init.o(.text) for __scatterload entry9a.o(.ARM.Collect$$$$0000000B) refers to principale.o(moncode) for main entry9b.o(.ARM.Collect$$$$0000000C) refers to principale.o(moncode) for main + fepilogue.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + depilogue.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp depilogue.o(.text) refers to llshl.o(.text) for __aeabi_llsl depilogue.o(.text) refers to llushr.o(.text) for __aeabi_llsr init.o(.text) refers to entry5.o(.ARM.Collect$$$$00000004) for __main_after_scatterload @@ -125,11 +127,12 @@ Removing Unused input sections from the image. Removing principale.o(mesdonnees), (0 bytes). Removing fonctionetape.o(MesDonnees), (0 bytes). Removing startup_stm32f10x_md.o(HEAP), (512 bytes). - Removing system_stm32f10x.o(.rev16_text), (4 bytes). - Removing system_stm32f10x.o(.revsh_text), (4 bytes). - Removing system_stm32f10x.o(.rrx_text), (6 bytes). - Removing system_stm32f10x.o(i.SystemCoreClockUpdate), (164 bytes). - Removing system_stm32f10x.o(.data), (20 bytes). + Removing system_stm32f10x.o(.text), (0 bytes). + Removing system_stm32f10x.o(.ARM.exidx.text.SystemInit), (8 bytes). + Removing system_stm32f10x.o(.text.SystemCoreClockUpdate), (110 bytes). + Removing system_stm32f10x.o(.ARM.exidx.text.SystemCoreClockUpdate), (8 bytes). + Removing system_stm32f10x.o(.data.SystemCoreClock), (4 bytes). + Removing system_stm32f10x.o(.rodata.AHBPrescTable), (16 bytes). Removing initialisation.o(.rev16_text), (4 bytes). Removing initialisation.o(.revsh_text), (4 bytes). Removing initialisation.o(.rrx_text), (6 bytes). @@ -158,7 +161,7 @@ Removing Unused input sections from the image. Removing timer_systick_1.o(.revsh_text), (4 bytes). Removing timer_systick_1.o(.rrx_text), (6 bytes). -35 unused section(s) (total 1220 bytes) removed from the image. +36 unused section(s) (total 1168 bytes) removed from the image. ============================================================================== @@ -168,23 +171,21 @@ Image Symbol Table Symbol Name Value Ov Type Size Object(Section) - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE - ../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE ../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE ../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE ../fplib/microlib/d2f.c 0x00000000 Number 0 d2f.o ABSOLUTE ../fplib/microlib/f2d.c 0x00000000 Number 0 f2d.o ABSOLUTE @@ -194,8 +195,8 @@ Image Symbol Table ../fplib/microlib/fpepilogue.c 0x00000000 Number 0 depilogue.o ABSOLUTE ../fplib/microlib/fpfix.c 0x00000000 Number 0 ffixui.o ABSOLUTE ../fplib/microlib/fpflt.c 0x00000000 Number 0 ffltui.o ABSOLUTE - ../fplib/microlib/fpmul.c 0x00000000 Number 0 dmul.o ABSOLUTE ../fplib/microlib/fpmul.c 0x00000000 Number 0 fmul.o ABSOLUTE + ../fplib/microlib/fpmul.c 0x00000000 Number 0 dmul.o ABSOLUTE ..\\pilotes\\Sources\\Timer_Systick.c 0x00000000 Number 0 timer_systick_1.o ABSOLUTE ..\\pilotes\\Sources\\pilote_IO.c 0x00000000 Number 0 pilote_io_1.o ABSOLUTE ..\pilotes\Sources\Timer_Systick.c 0x00000000 Number 0 timer_systick_1.o ABSOLUTE @@ -208,15 +209,14 @@ Image Symbol Table Initialisation.c 0x00000000 Number 0 initialisation.o ABSOLUTE Initialisation.c 0x00000000 Number 0 initialisation.o ABSOLUTE Principale.asm 0x00000000 Number 0 principale.o ABSOLUTE - RTE\Device\STM32F103RB\startup_stm32f10x_md.s 0x00000000 Number 0 startup_stm32f10x_md.o ABSOLUTE - RTE\Device\STM32F103RB\system_stm32f10x.c 0x00000000 Number 0 system_stm32f10x.o ABSOLUTE - RTE\\Device\\STM32F103RB\\system_stm32f10x.c 0x00000000 Number 0 system_stm32f10x.o ABSOLUTE + RTE/Device/STM32F103RB/startup_stm32f10x_md.s 0x00000000 Number 0 startup_stm32f10x_md.o ABSOLUTE Warning.c 0x00000000 Number 0 warning.o ABSOLUTE cdcmple.s 0x00000000 Number 0 cdcmple.o ABSOLUTE cdrcmple.s 0x00000000 Number 0 cdrcmple.o ABSOLUTE dc.s 0x00000000 Number 0 dc.o ABSOLUTE handlers.s 0x00000000 Number 0 handlers.o ABSOLUTE init.s 0x00000000 Number 0 init.o ABSOLUTE + system_stm32f10x.c 0x00000000 Number 0 system_stm32f10x.o ABSOLUTE RESET 0x08000000 Section 236 startup_stm32f10x_md.o(RESET) .ARM.Collect$$$$00000000 0x080000ec Section 0 entry.o(.ARM.Collect$$$$00000000) .ARM.Collect$$$$00000001 0x080000ec Section 4 entry2.o(.ARM.Collect$$$$00000001) @@ -224,76 +224,70 @@ Image Symbol Table .ARM.Collect$$$$00000008 0x080000f4 Section 0 entry7b.o(.ARM.Collect$$$$00000008) .ARM.Collect$$$$0000000A 0x080000f4 Section 0 entry8b.o(.ARM.Collect$$$$0000000A) .ARM.Collect$$$$0000000B 0x080000f4 Section 8 entry9a.o(.ARM.Collect$$$$0000000B) - .ARM.Collect$$$$0000000E 0x080000fc Section 4 entry12b.o(.ARM.Collect$$$$0000000E) - .ARM.Collect$$$$0000000F 0x08000100 Section 0 entry10a.o(.ARM.Collect$$$$0000000F) - .ARM.Collect$$$$00000011 0x08000100 Section 0 entry11a.o(.ARM.Collect$$$$00000011) - .ARM.Collect$$$$00002712 0x08000100 Section 4 entry2.o(.ARM.Collect$$$$00002712) - __lit__00000000 0x08000100 Data 4 entry2.o(.ARM.Collect$$$$00002712) - .text 0x08000104 Section 36 startup_stm32f10x_md.o(.text) - .text 0x08000128 Section 0 fmul.o(.text) - .text 0x0800018c Section 0 fdiv.o(.text) - .text 0x08000208 Section 0 dmul.o(.text) - .text 0x080002ec Section 0 ddiv.o(.text) - .text 0x080003ca Section 0 ffltui.o(.text) - .text 0x080003d4 Section 0 ffixui.o(.text) - .text 0x080003fc Section 0 f2d.o(.text) - .text 0x08000424 Section 48 cdcmple.o(.text) - .text 0x08000454 Section 48 cdrcmple.o(.text) - .text 0x08000484 Section 0 d2f.o(.text) - .text 0x080004bc Section 0 fepilogue.o(.text) - .text 0x080004bc Section 0 iusefp.o(.text) - .text 0x0800052a Section 0 depilogue.o(.text) - .text 0x080005e4 Section 36 init.o(.text) - .text 0x08000608 Section 0 llshl.o(.text) - .text 0x08000626 Section 0 llushr.o(.text) - i.Anim 0x08000648 Section 0 fonctiontimer.o(i.Anim) - i.GPIO_Configure 0x08000670 Section 0 pilote_io_1.o(i.GPIO_Configure) - i.Init_Cible 0x080007bc Section 0 initialisation.o(i.Init_Cible) - i.Init_Dot 0x080008c8 Section 0 initialisation.o(i.Init_Dot) - i.Init_Port 0x08000940 Section 0 initialisation.o(i.Init_Port) - i.Init_Timer1 0x080009d0 Section 0 initialisation.o(i.Init_Timer1) - i.Init_Timer2_PWM 0x08000b3c Section 0 initialisation.o(i.Init_Timer2_PWM) - i.Init_Timer3_Slave 0x08000c58 Section 0 initialisation.o(i.Init_Timer3_Slave) - i.Init_Timer4 0x08000cc8 Section 0 initialisation.o(i.Init_Timer4) - i.Port_IO_Reset 0x08000d3c Section 0 pilote_io_1.o(i.Port_IO_Reset) - i.Port_IO_Set 0x08000d4c Section 0 pilote_io_1.o(i.Port_IO_Set) - i.SetSysClock 0x08000d5c Section 0 system_stm32f10x.o(i.SetSysClock) - SetSysClock 0x08000d5d Thumb Code 8 system_stm32f10x.o(i.SetSysClock) - i.SetSysClockTo72 0x08000d64 Section 0 system_stm32f10x.o(i.SetSysClockTo72) - SetSysClockTo72 0x08000d65 Thumb Code 214 system_stm32f10x.o(i.SetSysClockTo72) - i.SysTick_Handler 0x08000e44 Section 0 timer_systick_1.o(i.SysTick_Handler) - i.SystemInit 0x08000e54 Section 0 system_stm32f10x.o(i.SystemInit) - i.Systick_Period 0x08000eb4 Section 0 timer_systick_1.o(i.Systick_Period) - i.Systick_Prio_IT 0x08000fc4 Section 0 timer_systick_1.o(i.Systick_Prio_IT) - i.TIM1_CC_IRQHandler 0x08000fe8 Section 0 fonctiontimer.o(i.TIM1_CC_IRQHandler) - i.TIM1_UP_IRQHandler 0x0800109c Section 0 fonctiontimer.o(i.TIM1_UP_IRQHandler) - i.TIM2_IRQHandler 0x08001148 Section 0 fonctiontimer.o(i.TIM2_IRQHandler) - i.TIM3_IRQHandler 0x0800114c Section 0 fonctiontimer.o(i.TIM3_IRQHandler) - i.TIM4_IRQHandler 0x0800119c Section 0 fonctiontimer.o(i.TIM4_IRQHandler) - i.__scatterload_copy 0x08001208 Section 14 handlers.o(i.__scatterload_copy) - i.__scatterload_null 0x08001216 Section 2 handlers.o(i.__scatterload_null) - i.__scatterload_zeroinit 0x08001218 Section 14 handlers.o(i.__scatterload_zeroinit) - moncode 0x08001228 Section 10 principale.o(moncode) - moncode 0x08001234 Section 92 fonctionetape.o(moncode) - moncode 0x08001290 Section 84 fonctionetape2.o(moncode) - moncode 0x080012e4 Section 200 foncasm.o(moncode) + __lit__00000000 0x080000fc Data 4 entry2.o(.ARM.Collect$$$$00002712) + .ARM.Collect$$$$0000000D 0x080000fc Section 0 entry10a.o(.ARM.Collect$$$$0000000D) + .ARM.Collect$$$$0000000F 0x080000fc Section 0 entry11a.o(.ARM.Collect$$$$0000000F) + .ARM.Collect$$$$00002712 0x080000fc Section 4 entry2.o(.ARM.Collect$$$$00002712) + .text 0x08000100 Section 36 startup_stm32f10x_md.o(.text) + .text 0x08000124 Section 0 fmul.o(.text) + .text 0x08000188 Section 0 fdiv.o(.text) + .text 0x08000204 Section 0 dmul.o(.text) + .text 0x080002e8 Section 0 ddiv.o(.text) + .text 0x080003c6 Section 0 ffltui.o(.text) + .text 0x080003d0 Section 0 ffixui.o(.text) + .text 0x080003f8 Section 0 f2d.o(.text) + .text 0x08000420 Section 48 cdcmple.o(.text) + .text 0x08000450 Section 48 cdrcmple.o(.text) + .text 0x08000480 Section 0 d2f.o(.text) + .text 0x080004b8 Section 0 iusefp.o(.text) + .text 0x080004b8 Section 0 fepilogue.o(.text) + .text 0x08000526 Section 0 depilogue.o(.text) + .text 0x080005e0 Section 36 init.o(.text) + .text 0x08000604 Section 0 llshl.o(.text) + .text 0x08000622 Section 0 llushr.o(.text) + [Anonymous Symbol] 0x08000644 Section 0 system_stm32f10x.o(.text.SystemInit) + i.Anim 0x08000754 Section 0 fonctiontimer.o(i.Anim) + i.GPIO_Configure 0x0800077c Section 0 pilote_io_1.o(i.GPIO_Configure) + i.Init_Cible 0x080008c8 Section 0 initialisation.o(i.Init_Cible) + i.Init_Dot 0x080009d4 Section 0 initialisation.o(i.Init_Dot) + i.Init_Port 0x08000a4c Section 0 initialisation.o(i.Init_Port) + i.Init_Timer1 0x08000adc Section 0 initialisation.o(i.Init_Timer1) + i.Init_Timer2_PWM 0x08000c48 Section 0 initialisation.o(i.Init_Timer2_PWM) + i.Init_Timer3_Slave 0x08000d64 Section 0 initialisation.o(i.Init_Timer3_Slave) + i.Init_Timer4 0x08000dd4 Section 0 initialisation.o(i.Init_Timer4) + i.Port_IO_Reset 0x08000e48 Section 0 pilote_io_1.o(i.Port_IO_Reset) + i.Port_IO_Set 0x08000e58 Section 0 pilote_io_1.o(i.Port_IO_Set) + i.SysTick_Handler 0x08000e68 Section 0 timer_systick_1.o(i.SysTick_Handler) + i.Systick_Period 0x08000e78 Section 0 timer_systick_1.o(i.Systick_Period) + i.Systick_Prio_IT 0x08000f88 Section 0 timer_systick_1.o(i.Systick_Prio_IT) + i.TIM1_CC_IRQHandler 0x08000fac Section 0 fonctiontimer.o(i.TIM1_CC_IRQHandler) + i.TIM1_UP_IRQHandler 0x08001060 Section 0 fonctiontimer.o(i.TIM1_UP_IRQHandler) + i.TIM2_IRQHandler 0x0800110c Section 0 fonctiontimer.o(i.TIM2_IRQHandler) + i.TIM3_IRQHandler 0x08001110 Section 0 fonctiontimer.o(i.TIM3_IRQHandler) + i.TIM4_IRQHandler 0x08001160 Section 0 fonctiontimer.o(i.TIM4_IRQHandler) + i.__scatterload_copy 0x080011cc Section 14 handlers.o(i.__scatterload_copy) + i.__scatterload_null 0x080011da Section 2 handlers.o(i.__scatterload_null) + i.__scatterload_zeroinit 0x080011dc Section 14 handlers.o(i.__scatterload_zeroinit) + moncode 0x080011ec Section 10 principale.o(moncode) + moncode 0x080011f8 Section 92 fonctionetape.o(moncode) + moncode 0x08001254 Section 64 fonctionetape2.o(moncode) + moncode 0x08001294 Section 200 foncasm.o(moncode) .data 0x20000000 Section 19 initialisation.o(.data) .data 0x20000014 Section 24 fonctiontimer.o(.data) incre 0x20000024 Data 4 fonctiontimer.o(.data) Compteur 0x20000028 Data 4 fonctiontimer.o(.data) .data 0x2000002c Section 96 warning.o(.data) - .data 0x2000008c Section 4 timer_systick_1.o(.data) Ptr_Systick 0x2000008c Data 4 timer_systick_1.o(.data) - MesDonnees 0x20000090 Section 21 fonctionetape2.o(MesDonnees) + .data 0x2000008c Section 4 timer_systick_1.o(.data) Barette1 0x20000090 Data 3 fonctionetape2.o(MesDonnees) + MesDonnees 0x20000090 Section 21 fonctionetape2.o(MesDonnees) STACK 0x200000a8 Section 1024 startup_stm32f10x_md.o(STACK) Global Symbols Symbol Name Value Ov Type Size Object(Section) - BuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OTIME$ROPI$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE - __arm_fini_ - Undefined Weak Reference + BuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$~IW$USESV6$~STKCKD$USESV7$~SHL$OTIME$ROPI$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE __cpp_initialize__aeabi_ - Undefined Weak Reference __cxa_finalize - Undefined Weak Reference __decompress - Undefined Weak Reference @@ -309,112 +303,111 @@ Image Symbol Table _main_clock 0x080000f5 Thumb Code 0 entry7b.o(.ARM.Collect$$$$00000008) _main_cpp_init 0x080000f5 Thumb Code 0 entry8b.o(.ARM.Collect$$$$0000000A) _main_init 0x080000f5 Thumb Code 0 entry9a.o(.ARM.Collect$$$$0000000B) - __rt_lib_shutdown_fini 0x080000fd Thumb Code 0 entry12b.o(.ARM.Collect$$$$0000000E) - __rt_final_cpp 0x08000101 Thumb Code 0 entry10a.o(.ARM.Collect$$$$0000000F) - __rt_final_exit 0x08000101 Thumb Code 0 entry11a.o(.ARM.Collect$$$$00000011) - Reset_Handler 0x08000105 Thumb Code 8 startup_stm32f10x_md.o(.text) - NMI_Handler 0x0800010d Thumb Code 2 startup_stm32f10x_md.o(.text) - HardFault_Handler 0x0800010f Thumb Code 2 startup_stm32f10x_md.o(.text) - MemManage_Handler 0x08000111 Thumb Code 2 startup_stm32f10x_md.o(.text) - BusFault_Handler 0x08000113 Thumb Code 2 startup_stm32f10x_md.o(.text) - UsageFault_Handler 0x08000115 Thumb Code 2 startup_stm32f10x_md.o(.text) - SVC_Handler 0x08000117 Thumb Code 2 startup_stm32f10x_md.o(.text) - DebugMon_Handler 0x08000119 Thumb Code 2 startup_stm32f10x_md.o(.text) - PendSV_Handler 0x0800011b Thumb Code 2 startup_stm32f10x_md.o(.text) - ADC1_2_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - CAN1_RX1_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - CAN1_SCE_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - DMA1_Channel1_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - DMA1_Channel2_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - DMA1_Channel3_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - DMA1_Channel4_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - DMA1_Channel5_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - DMA1_Channel6_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - DMA1_Channel7_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - EXTI0_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - EXTI15_10_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - EXTI1_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - EXTI2_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - EXTI3_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - EXTI4_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - EXTI9_5_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - FLASH_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - I2C1_ER_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - I2C1_EV_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - I2C2_ER_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - I2C2_EV_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - PVD_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - RCC_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - RTCAlarm_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - RTC_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - SPI1_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - SPI2_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - TAMPER_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - TIM1_BRK_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - TIM1_TRG_COM_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - USART1_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - USART2_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - USART3_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - USBWakeUp_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - USB_HP_CAN1_TX_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - USB_LP_CAN1_RX0_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - WWDG_IRQHandler 0x0800011f Thumb Code 0 startup_stm32f10x_md.o(.text) - __aeabi_fmul 0x08000129 Thumb Code 100 fmul.o(.text) - __aeabi_fdiv 0x0800018d Thumb Code 124 fdiv.o(.text) - __aeabi_dmul 0x08000209 Thumb Code 228 dmul.o(.text) - __aeabi_ddiv 0x080002ed Thumb Code 222 ddiv.o(.text) - __aeabi_ui2f 0x080003cb Thumb Code 10 ffltui.o(.text) - __aeabi_f2uiz 0x080003d5 Thumb Code 40 ffixui.o(.text) - __aeabi_f2d 0x080003fd Thumb Code 38 f2d.o(.text) - __aeabi_cdcmpeq 0x08000425 Thumb Code 0 cdcmple.o(.text) - __aeabi_cdcmple 0x08000425 Thumb Code 48 cdcmple.o(.text) - __aeabi_cdrcmple 0x08000455 Thumb Code 48 cdrcmple.o(.text) - __aeabi_d2f 0x08000485 Thumb Code 56 d2f.o(.text) - __I$use$fp 0x080004bd Thumb Code 0 iusefp.o(.text) - _float_round 0x080004bd Thumb Code 18 fepilogue.o(.text) - _float_epilogue 0x080004cf Thumb Code 92 fepilogue.o(.text) - _double_round 0x0800052b Thumb Code 30 depilogue.o(.text) - _double_epilogue 0x08000549 Thumb Code 156 depilogue.o(.text) - __scatterload 0x080005e5 Thumb Code 28 init.o(.text) - __scatterload_rt2 0x080005e5 Thumb Code 0 init.o(.text) - __aeabi_llsl 0x08000609 Thumb Code 30 llshl.o(.text) - _ll_shift_l 0x08000609 Thumb Code 0 llshl.o(.text) - __aeabi_llsr 0x08000627 Thumb Code 32 llushr.o(.text) - _ll_ushift_r 0x08000627 Thumb Code 0 llushr.o(.text) - Anim 0x08000649 Thumb Code 32 fonctiontimer.o(i.Anim) - GPIO_Configure 0x08000671 Thumb Code 314 pilote_io_1.o(i.GPIO_Configure) - Init_Cible 0x080007bd Thumb Code 218 initialisation.o(i.Init_Cible) - Init_Dot 0x080008c9 Thumb Code 112 initialisation.o(i.Init_Dot) - Init_Port 0x08000941 Thumb Code 134 initialisation.o(i.Init_Port) - Init_Timer1 0x080009d1 Thumb Code 328 initialisation.o(i.Init_Timer1) - Init_Timer2_PWM 0x08000b3d Thumb Code 262 initialisation.o(i.Init_Timer2_PWM) - Init_Timer3_Slave 0x08000c59 Thumb Code 94 initialisation.o(i.Init_Timer3_Slave) - Init_Timer4 0x08000cc9 Thumb Code 100 initialisation.o(i.Init_Timer4) - Port_IO_Reset 0x08000d3d Thumb Code 16 pilote_io_1.o(i.Port_IO_Reset) - Port_IO_Set 0x08000d4d Thumb Code 16 pilote_io_1.o(i.Port_IO_Set) - SysTick_Handler 0x08000e45 Thumb Code 10 timer_systick_1.o(i.SysTick_Handler) - SystemInit 0x08000e55 Thumb Code 78 system_stm32f10x.o(i.SystemInit) - Systick_Period 0x08000eb5 Thumb Code 256 timer_systick_1.o(i.Systick_Period) - Systick_Prio_IT 0x08000fc5 Thumb Code 28 timer_systick_1.o(i.Systick_Prio_IT) - TIM1_CC_IRQHandler 0x08000fe9 Thumb Code 158 fonctiontimer.o(i.TIM1_CC_IRQHandler) - TIM1_UP_IRQHandler 0x0800109d Thumb Code 134 fonctiontimer.o(i.TIM1_UP_IRQHandler) - TIM2_IRQHandler 0x08001149 Thumb Code 4 fonctiontimer.o(i.TIM2_IRQHandler) - TIM3_IRQHandler 0x0800114d Thumb Code 68 fonctiontimer.o(i.TIM3_IRQHandler) - TIM4_IRQHandler 0x0800119d Thumb Code 84 fonctiontimer.o(i.TIM4_IRQHandler) - __scatterload_copy 0x08001209 Thumb Code 14 handlers.o(i.__scatterload_copy) - __scatterload_null 0x08001217 Thumb Code 2 handlers.o(i.__scatterload_null) - __scatterload_zeroinit 0x08001219 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) - main 0x08001229 Thumb Code 10 principale.o(moncode) - Eteint_LED 0x08001235 Thumb Code 22 fonctionetape.o(moncode) - Allume_LED 0x0800124b Thumb Code 22 fonctionetape.o(moncode) - Inverse_LED 0x08001261 Thumb Code 42 fonctionetape.o(moncode) - Set_SCLK 0x08001291 Thumb Code 22 fonctionetape2.o(moncode) - Reset_SCLK 0x080012a7 Thumb Code 22 fonctionetape2.o(moncode) - DriverGlobal 0x080012bd Thumb Code 26 fonctionetape2.o(moncode) - Envoie192Boucle 0x080012e5 Thumb Code 108 foncasm.o(moncode) - Envoie96Dot 0x08001351 Thumb Code 78 foncasm.o(moncode) - Region$$Table$$Base 0x080013ac Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x080013cc Number 0 anon$$obj.o(Region$$Table) + __rt_final_cpp 0x080000fd Thumb Code 0 entry10a.o(.ARM.Collect$$$$0000000D) + __rt_final_exit 0x080000fd Thumb Code 0 entry11a.o(.ARM.Collect$$$$0000000F) + Reset_Handler 0x08000101 Thumb Code 8 startup_stm32f10x_md.o(.text) + NMI_Handler 0x08000109 Thumb Code 2 startup_stm32f10x_md.o(.text) + HardFault_Handler 0x0800010b Thumb Code 2 startup_stm32f10x_md.o(.text) + MemManage_Handler 0x0800010d Thumb Code 2 startup_stm32f10x_md.o(.text) + BusFault_Handler 0x0800010f Thumb Code 2 startup_stm32f10x_md.o(.text) + UsageFault_Handler 0x08000111 Thumb Code 2 startup_stm32f10x_md.o(.text) + SVC_Handler 0x08000113 Thumb Code 2 startup_stm32f10x_md.o(.text) + DebugMon_Handler 0x08000115 Thumb Code 2 startup_stm32f10x_md.o(.text) + PendSV_Handler 0x08000117 Thumb Code 2 startup_stm32f10x_md.o(.text) + ADC1_2_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + CAN1_RX1_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + CAN1_SCE_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + DMA1_Channel1_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + DMA1_Channel2_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + DMA1_Channel3_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + DMA1_Channel4_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + DMA1_Channel5_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + DMA1_Channel6_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + DMA1_Channel7_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + EXTI0_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + EXTI15_10_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + EXTI1_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + EXTI2_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + EXTI3_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + EXTI4_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + EXTI9_5_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + FLASH_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + I2C1_ER_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + I2C1_EV_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + I2C2_ER_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + I2C2_EV_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + PVD_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + RCC_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + RTCAlarm_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + RTC_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + SPI1_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + SPI2_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + TAMPER_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + TIM1_BRK_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + TIM1_TRG_COM_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + USART1_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + USART2_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + USART3_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + USBWakeUp_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + USB_HP_CAN1_TX_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + USB_LP_CAN1_RX0_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + WWDG_IRQHandler 0x0800011b Thumb Code 0 startup_stm32f10x_md.o(.text) + __aeabi_fmul 0x08000125 Thumb Code 100 fmul.o(.text) + __aeabi_fdiv 0x08000189 Thumb Code 124 fdiv.o(.text) + __aeabi_dmul 0x08000205 Thumb Code 228 dmul.o(.text) + __aeabi_ddiv 0x080002e9 Thumb Code 222 ddiv.o(.text) + __aeabi_ui2f 0x080003c7 Thumb Code 10 ffltui.o(.text) + __aeabi_f2uiz 0x080003d1 Thumb Code 40 ffixui.o(.text) + __aeabi_f2d 0x080003f9 Thumb Code 38 f2d.o(.text) + __aeabi_cdcmpeq 0x08000421 Thumb Code 0 cdcmple.o(.text) + __aeabi_cdcmple 0x08000421 Thumb Code 48 cdcmple.o(.text) + __aeabi_cdrcmple 0x08000451 Thumb Code 48 cdrcmple.o(.text) + __aeabi_d2f 0x08000481 Thumb Code 56 d2f.o(.text) + __I$use$fp 0x080004b9 Thumb Code 0 iusefp.o(.text) + _float_round 0x080004b9 Thumb Code 18 fepilogue.o(.text) + _float_epilogue 0x080004cb Thumb Code 92 fepilogue.o(.text) + _double_round 0x08000527 Thumb Code 30 depilogue.o(.text) + _double_epilogue 0x08000545 Thumb Code 156 depilogue.o(.text) + __scatterload 0x080005e1 Thumb Code 28 init.o(.text) + __scatterload_rt2 0x080005e1 Thumb Code 0 init.o(.text) + __aeabi_llsl 0x08000605 Thumb Code 30 llshl.o(.text) + _ll_shift_l 0x08000605 Thumb Code 0 llshl.o(.text) + __aeabi_llsr 0x08000623 Thumb Code 32 llushr.o(.text) + _ll_ushift_r 0x08000623 Thumb Code 0 llushr.o(.text) + SystemInit 0x08000645 Thumb Code 272 system_stm32f10x.o(.text.SystemInit) + Anim 0x08000755 Thumb Code 32 fonctiontimer.o(i.Anim) + GPIO_Configure 0x0800077d Thumb Code 314 pilote_io_1.o(i.GPIO_Configure) + Init_Cible 0x080008c9 Thumb Code 218 initialisation.o(i.Init_Cible) + Init_Dot 0x080009d5 Thumb Code 112 initialisation.o(i.Init_Dot) + Init_Port 0x08000a4d Thumb Code 134 initialisation.o(i.Init_Port) + Init_Timer1 0x08000add Thumb Code 328 initialisation.o(i.Init_Timer1) + Init_Timer2_PWM 0x08000c49 Thumb Code 262 initialisation.o(i.Init_Timer2_PWM) + Init_Timer3_Slave 0x08000d65 Thumb Code 94 initialisation.o(i.Init_Timer3_Slave) + Init_Timer4 0x08000dd5 Thumb Code 100 initialisation.o(i.Init_Timer4) + Port_IO_Reset 0x08000e49 Thumb Code 16 pilote_io_1.o(i.Port_IO_Reset) + Port_IO_Set 0x08000e59 Thumb Code 16 pilote_io_1.o(i.Port_IO_Set) + SysTick_Handler 0x08000e69 Thumb Code 10 timer_systick_1.o(i.SysTick_Handler) + Systick_Period 0x08000e79 Thumb Code 256 timer_systick_1.o(i.Systick_Period) + Systick_Prio_IT 0x08000f89 Thumb Code 28 timer_systick_1.o(i.Systick_Prio_IT) + TIM1_CC_IRQHandler 0x08000fad Thumb Code 158 fonctiontimer.o(i.TIM1_CC_IRQHandler) + TIM1_UP_IRQHandler 0x08001061 Thumb Code 134 fonctiontimer.o(i.TIM1_UP_IRQHandler) + TIM2_IRQHandler 0x0800110d Thumb Code 4 fonctiontimer.o(i.TIM2_IRQHandler) + TIM3_IRQHandler 0x08001111 Thumb Code 68 fonctiontimer.o(i.TIM3_IRQHandler) + TIM4_IRQHandler 0x08001161 Thumb Code 84 fonctiontimer.o(i.TIM4_IRQHandler) + __scatterload_copy 0x080011cd Thumb Code 14 handlers.o(i.__scatterload_copy) + __scatterload_null 0x080011db Thumb Code 2 handlers.o(i.__scatterload_null) + __scatterload_zeroinit 0x080011dd Thumb Code 14 handlers.o(i.__scatterload_zeroinit) + main 0x080011ed Thumb Code 10 principale.o(moncode) + Eteint_LED 0x080011f9 Thumb Code 22 fonctionetape.o(moncode) + Allume_LED 0x0800120f Thumb Code 22 fonctionetape.o(moncode) + Inverse_LED 0x08001225 Thumb Code 42 fonctionetape.o(moncode) + Set_SCLK 0x08001255 Thumb Code 14 fonctionetape2.o(moncode) + Reset_SCLK 0x08001263 Thumb Code 14 fonctionetape2.o(moncode) + DriverGlobal 0x08001271 Thumb Code 26 fonctionetape2.o(moncode) + Envoie192Boucle 0x08001295 Thumb Code 108 foncasm.o(moncode) + Envoie96Dot 0x08001301 Thumb Code 78 foncasm.o(moncode) + Region$$Table$$Base 0x0800135c Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x0800137c Number 0 anon$$obj.o(Region$$Table) PrtSurImage 0x20000000 Data 4 initialisation.o(.data) BarretEnCours 0x20000004 Data 4 initialisation.o(.data) DataSend 0x20000008 Data 1 initialisation.o(.data) @@ -435,87 +428,84 @@ Memory Map of the image Image Entry point : 0x080000ed - Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00001474, Max: 0x00020000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00001428, Max: 0x00020000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x000013cc, Max: 0x00020000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x0000137c, Max: 0x00020000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x08000000 0x08000000 0x000000ec Data RO 20 RESET startup_stm32f10x_md.o - 0x080000ec 0x080000ec 0x00000000 Code RO 447 * .ARM.Collect$$$$00000000 mc_w.l(entry.o) - 0x080000ec 0x080000ec 0x00000004 Code RO 470 .ARM.Collect$$$$00000001 mc_w.l(entry2.o) - 0x080000f0 0x080000f0 0x00000004 Code RO 473 .ARM.Collect$$$$00000004 mc_w.l(entry5.o) - 0x080000f4 0x080000f4 0x00000000 Code RO 475 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o) - 0x080000f4 0x080000f4 0x00000000 Code RO 477 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o) - 0x080000f4 0x080000f4 0x00000008 Code RO 478 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o) - 0x080000fc 0x080000fc 0x00000004 Code RO 485 .ARM.Collect$$$$0000000E mc_w.l(entry12b.o) - 0x08000100 0x08000100 0x00000000 Code RO 480 .ARM.Collect$$$$0000000F mc_w.l(entry10a.o) - 0x08000100 0x08000100 0x00000000 Code RO 482 .ARM.Collect$$$$00000011 mc_w.l(entry11a.o) - 0x08000100 0x08000100 0x00000004 Code RO 471 .ARM.Collect$$$$00002712 mc_w.l(entry2.o) - 0x08000104 0x08000104 0x00000024 Code RO 21 .text startup_stm32f10x_md.o - 0x08000128 0x08000128 0x00000064 Code RO 450 .text mf_w.l(fmul.o) - 0x0800018c 0x0800018c 0x0000007c Code RO 452 .text mf_w.l(fdiv.o) - 0x08000208 0x08000208 0x000000e4 Code RO 454 .text mf_w.l(dmul.o) - 0x080002ec 0x080002ec 0x000000de Code RO 456 .text mf_w.l(ddiv.o) - 0x080003ca 0x080003ca 0x0000000a Code RO 458 .text mf_w.l(ffltui.o) - 0x080003d4 0x080003d4 0x00000028 Code RO 460 .text mf_w.l(ffixui.o) - 0x080003fc 0x080003fc 0x00000026 Code RO 462 .text mf_w.l(f2d.o) - 0x08000422 0x08000422 0x00000002 PAD - 0x08000424 0x08000424 0x00000030 Code RO 464 .text mf_w.l(cdcmple.o) - 0x08000454 0x08000454 0x00000030 Code RO 466 .text mf_w.l(cdrcmple.o) - 0x08000484 0x08000484 0x00000038 Code RO 468 .text mf_w.l(d2f.o) - 0x080004bc 0x080004bc 0x00000000 Code RO 486 .text mc_w.l(iusefp.o) - 0x080004bc 0x080004bc 0x0000006e Code RO 487 .text mf_w.l(fepilogue.o) - 0x0800052a 0x0800052a 0x000000ba Code RO 489 .text mf_w.l(depilogue.o) - 0x080005e4 0x080005e4 0x00000024 Code RO 491 .text mc_w.l(init.o) - 0x08000608 0x08000608 0x0000001e Code RO 493 .text mc_w.l(llshl.o) - 0x08000626 0x08000626 0x00000020 Code RO 495 .text mc_w.l(llushr.o) - 0x08000646 0x08000646 0x00000002 PAD - 0x08000648 0x08000648 0x00000028 Code RO 223 i.Anim Matos.lib(fonctiontimer.o) - 0x08000670 0x08000670 0x0000014c Code RO 346 i.GPIO_Configure Matos.lib(pilote_io_1.o) - 0x080007bc 0x080007bc 0x0000010c Code RO 97 i.Init_Cible Matos.lib(initialisation.o) - 0x080008c8 0x080008c8 0x00000078 Code RO 98 i.Init_Dot Matos.lib(initialisation.o) - 0x08000940 0x08000940 0x00000090 Code RO 99 i.Init_Port Matos.lib(initialisation.o) - 0x080009d0 0x080009d0 0x0000016c Code RO 101 i.Init_Timer1 Matos.lib(initialisation.o) - 0x08000b3c 0x08000b3c 0x0000011c Code RO 102 i.Init_Timer2_PWM Matos.lib(initialisation.o) - 0x08000c58 0x08000c58 0x00000070 Code RO 103 i.Init_Timer3_Slave Matos.lib(initialisation.o) - 0x08000cc8 0x08000cc8 0x00000074 Code RO 104 i.Init_Timer4 Matos.lib(initialisation.o) - 0x08000d3c 0x08000d3c 0x00000010 Code RO 352 i.Port_IO_Reset Matos.lib(pilote_io_1.o) - 0x08000d4c 0x08000d4c 0x00000010 Code RO 353 i.Port_IO_Set Matos.lib(pilote_io_1.o) - 0x08000d5c 0x08000d5c 0x00000008 Code RO 28 i.SetSysClock system_stm32f10x.o - 0x08000d64 0x08000d64 0x000000e0 Code RO 29 i.SetSysClockTo72 system_stm32f10x.o - 0x08000e44 0x08000e44 0x00000010 Code RO 412 i.SysTick_Handler Matos.lib(timer_systick_1.o) - 0x08000e54 0x08000e54 0x00000060 Code RO 31 i.SystemInit system_stm32f10x.o - 0x08000eb4 0x08000eb4 0x00000110 Code RO 413 i.Systick_Period Matos.lib(timer_systick_1.o) - 0x08000fc4 0x08000fc4 0x00000024 Code RO 414 i.Systick_Prio_IT Matos.lib(timer_systick_1.o) - 0x08000fe8 0x08000fe8 0x000000b4 Code RO 232 i.TIM1_CC_IRQHandler Matos.lib(fonctiontimer.o) - 0x0800109c 0x0800109c 0x000000ac Code RO 233 i.TIM1_UP_IRQHandler Matos.lib(fonctiontimer.o) - 0x08001148 0x08001148 0x00000004 Code RO 234 i.TIM2_IRQHandler Matos.lib(fonctiontimer.o) - 0x0800114c 0x0800114c 0x00000050 Code RO 235 i.TIM3_IRQHandler Matos.lib(fonctiontimer.o) - 0x0800119c 0x0800119c 0x0000006c Code RO 236 i.TIM4_IRQHandler Matos.lib(fonctiontimer.o) - 0x08001208 0x08001208 0x0000000e Code RO 499 i.__scatterload_copy mc_w.l(handlers.o) - 0x08001216 0x08001216 0x00000002 Code RO 500 i.__scatterload_null mc_w.l(handlers.o) - 0x08001218 0x08001218 0x0000000e Code RO 501 i.__scatterload_zeroinit mc_w.l(handlers.o) - 0x08001226 0x08001226 0x00000002 PAD - 0x08001228 0x08001228 0x0000000a Code RO 2 moncode principale.o - 0x08001232 0x08001232 0x00000002 PAD - 0x08001234 0x08001234 0x0000005c Code RO 9 moncode fonctionetape.o - 0x08001290 0x08001290 0x00000054 Code RO 14 moncode fonctionetape2.o - 0x080012e4 0x080012e4 0x000000c8 Code RO 339 moncode Matos.lib(foncasm.o) - 0x080013ac 0x080013ac 0x00000020 Data RO 497 Region$$Table anon$$obj.o + 0x080000ec 0x080000ec 0x00000000 Code RO 393 * .ARM.Collect$$$$00000000 mc_w.l(entry.o) + 0x080000ec 0x080000ec 0x00000004 Code RO 416 .ARM.Collect$$$$00000001 mc_w.l(entry2.o) + 0x080000f0 0x080000f0 0x00000004 Code RO 419 .ARM.Collect$$$$00000004 mc_w.l(entry5.o) + 0x080000f4 0x080000f4 0x00000000 Code RO 421 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o) + 0x080000f4 0x080000f4 0x00000000 Code RO 423 .ARM.Collect$$$$0000000A mc_w.l(entry8b.o) + 0x080000f4 0x080000f4 0x00000008 Code RO 424 .ARM.Collect$$$$0000000B mc_w.l(entry9a.o) + 0x080000fc 0x080000fc 0x00000000 Code RO 426 .ARM.Collect$$$$0000000D mc_w.l(entry10a.o) + 0x080000fc 0x080000fc 0x00000000 Code RO 428 .ARM.Collect$$$$0000000F mc_w.l(entry11a.o) + 0x080000fc 0x080000fc 0x00000004 Code RO 417 .ARM.Collect$$$$00002712 mc_w.l(entry2.o) + 0x08000100 0x08000100 0x00000024 Code RO 21 .text startup_stm32f10x_md.o + 0x08000124 0x08000124 0x00000064 Code RO 396 .text mf_w.l(fmul.o) + 0x08000188 0x08000188 0x0000007c Code RO 398 .text mf_w.l(fdiv.o) + 0x08000204 0x08000204 0x000000e4 Code RO 400 .text mf_w.l(dmul.o) + 0x080002e8 0x080002e8 0x000000de Code RO 402 .text mf_w.l(ddiv.o) + 0x080003c6 0x080003c6 0x0000000a Code RO 404 .text mf_w.l(ffltui.o) + 0x080003d0 0x080003d0 0x00000028 Code RO 406 .text mf_w.l(ffixui.o) + 0x080003f8 0x080003f8 0x00000026 Code RO 408 .text mf_w.l(f2d.o) + 0x0800041e 0x0800041e 0x00000002 PAD + 0x08000420 0x08000420 0x00000030 Code RO 410 .text mf_w.l(cdcmple.o) + 0x08000450 0x08000450 0x00000030 Code RO 412 .text mf_w.l(cdrcmple.o) + 0x08000480 0x08000480 0x00000038 Code RO 414 .text mf_w.l(d2f.o) + 0x080004b8 0x080004b8 0x00000000 Code RO 430 .text mc_w.l(iusefp.o) + 0x080004b8 0x080004b8 0x0000006e Code RO 431 .text mf_w.l(fepilogue.o) + 0x08000526 0x08000526 0x000000ba Code RO 433 .text mf_w.l(depilogue.o) + 0x080005e0 0x080005e0 0x00000024 Code RO 435 .text mc_w.l(init.o) + 0x08000604 0x08000604 0x0000001e Code RO 437 .text mc_w.l(llshl.o) + 0x08000622 0x08000622 0x00000020 Code RO 439 .text mc_w.l(llushr.o) + 0x08000642 0x08000642 0x00000002 PAD + 0x08000644 0x08000644 0x00000110 Code RO 26 .text.SystemInit system_stm32f10x.o + 0x08000754 0x08000754 0x00000028 Code RO 169 i.Anim Matos.lib(fonctiontimer.o) + 0x0800077c 0x0800077c 0x0000014c Code RO 292 i.GPIO_Configure Matos.lib(pilote_io_1.o) + 0x080008c8 0x080008c8 0x0000010c Code RO 42 i.Init_Cible Matos.lib(initialisation.o) + 0x080009d4 0x080009d4 0x00000078 Code RO 43 i.Init_Dot Matos.lib(initialisation.o) + 0x08000a4c 0x08000a4c 0x00000090 Code RO 44 i.Init_Port Matos.lib(initialisation.o) + 0x08000adc 0x08000adc 0x0000016c Code RO 46 i.Init_Timer1 Matos.lib(initialisation.o) + 0x08000c48 0x08000c48 0x0000011c Code RO 47 i.Init_Timer2_PWM Matos.lib(initialisation.o) + 0x08000d64 0x08000d64 0x00000070 Code RO 48 i.Init_Timer3_Slave Matos.lib(initialisation.o) + 0x08000dd4 0x08000dd4 0x00000074 Code RO 49 i.Init_Timer4 Matos.lib(initialisation.o) + 0x08000e48 0x08000e48 0x00000010 Code RO 298 i.Port_IO_Reset Matos.lib(pilote_io_1.o) + 0x08000e58 0x08000e58 0x00000010 Code RO 299 i.Port_IO_Set Matos.lib(pilote_io_1.o) + 0x08000e68 0x08000e68 0x00000010 Code RO 358 i.SysTick_Handler Matos.lib(timer_systick_1.o) + 0x08000e78 0x08000e78 0x00000110 Code RO 359 i.Systick_Period Matos.lib(timer_systick_1.o) + 0x08000f88 0x08000f88 0x00000024 Code RO 360 i.Systick_Prio_IT Matos.lib(timer_systick_1.o) + 0x08000fac 0x08000fac 0x000000b4 Code RO 178 i.TIM1_CC_IRQHandler Matos.lib(fonctiontimer.o) + 0x08001060 0x08001060 0x000000ac Code RO 179 i.TIM1_UP_IRQHandler Matos.lib(fonctiontimer.o) + 0x0800110c 0x0800110c 0x00000004 Code RO 180 i.TIM2_IRQHandler Matos.lib(fonctiontimer.o) + 0x08001110 0x08001110 0x00000050 Code RO 181 i.TIM3_IRQHandler Matos.lib(fonctiontimer.o) + 0x08001160 0x08001160 0x0000006c Code RO 182 i.TIM4_IRQHandler Matos.lib(fonctiontimer.o) + 0x080011cc 0x080011cc 0x0000000e Code RO 443 i.__scatterload_copy mc_w.l(handlers.o) + 0x080011da 0x080011da 0x00000002 Code RO 444 i.__scatterload_null mc_w.l(handlers.o) + 0x080011dc 0x080011dc 0x0000000e Code RO 445 i.__scatterload_zeroinit mc_w.l(handlers.o) + 0x080011ea 0x080011ea 0x00000002 PAD + 0x080011ec 0x080011ec 0x0000000a Code RO 2 moncode principale.o + 0x080011f6 0x080011f6 0x00000002 PAD + 0x080011f8 0x080011f8 0x0000005c Code RO 9 moncode fonctionetape.o + 0x08001254 0x08001254 0x00000040 Code RO 14 moncode fonctionetape2.o + 0x08001294 0x08001294 0x000000c8 Code RO 285 moncode Matos.lib(foncasm.o) + 0x0800135c 0x0800135c 0x00000020 Data RO 442 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x080013cc, Size: 0x000004a8, Max: 0x00005000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08001380, Size: 0x000004a8, Max: 0x00005000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000000 0x080013cc 0x00000013 Data RW 105 .data Matos.lib(initialisation.o) - 0x20000013 0x080013df 0x00000001 PAD - 0x20000014 0x080013e0 0x00000018 Data RW 237 .data Matos.lib(fonctiontimer.o) - 0x2000002c 0x080013f8 0x00000060 Data RW 329 .data Matos.lib(warning.o) - 0x2000008c 0x08001458 0x00000004 Data RW 415 .data Matos.lib(timer_systick_1.o) - 0x20000090 0x0800145c 0x00000015 Data RW 13 MesDonnees fonctionetape2.o - 0x200000a5 0x08001471 0x00000003 PAD + 0x20000000 0x08001380 0x00000013 Data RW 50 .data Matos.lib(initialisation.o) + 0x20000013 0x08001393 0x00000001 PAD + 0x20000014 0x08001394 0x00000018 Data RW 183 .data Matos.lib(fonctiontimer.o) + 0x2000002c 0x080013ac 0x00000060 Data RW 275 .data Matos.lib(warning.o) + 0x2000008c 0x0800140c 0x00000004 Data RW 361 .data Matos.lib(timer_systick_1.o) + 0x20000090 0x08001410 0x00000015 Data RW 13 MesDonnees fonctionetape2.o + 0x200000a5 0x08001425 0x00000003 PAD 0x200000a8 - 0x00000400 Zero RW 18 STACK startup_stm32f10x_md.o @@ -527,13 +517,13 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name 92 6 0 0 0 408 fonctionetape.o - 84 14 0 21 0 400 fonctionetape2.o + 64 10 0 21 0 400 fonctionetape2.o 10 0 0 0 0 328 principale.o 36 8 236 0 1024 796 startup_stm32f10x_md.o - 328 28 0 0 0 6425 system_stm32f10x.o + 272 0 0 0 0 2781 system_stm32f10x.o ---------------------------------------------------------------------- - 552 56 268 24 1024 8357 Object Totals + 476 24 268 24 1024 4713 Object Totals 0 0 32 0 0 0 (incl. Generated) 2 0 0 3 0 0 (incl. Padding) @@ -543,14 +533,13 @@ Image component sizes 200 14 0 0 0 460 foncasm.o 584 104 0 24 0 3481 fonctiontimer.o - 1408 160 0 19 0 228380 initialisation.o + 1408 160 0 19 0 229824 initialisation.o 364 18 0 0 0 2487 pilote_io_1.o 324 30 0 4 0 2509 timer_systick_1.o 0 0 0 96 0 582 warning.o 0 0 0 0 0 0 entry.o 0 0 0 0 0 0 entry10a.o 0 0 0 0 0 0 entry11a.o - 4 0 0 0 0 0 entry12b.o 8 4 0 0 0 0 entry2.o 4 0 0 0 0 0 entry5.o 0 0 0 0 0 0 entry7b.o @@ -575,19 +564,19 @@ Image component sizes 100 0 0 0 0 76 fmul.o ---------------------------------------------------------------------- - 4248 342 0 144 0 239235 Library Totals + 4244 342 0 144 0 240679 Library Totals 6 0 0 1 0 0 (incl. Padding) ---------------------------------------------------------------------- Code (inc. data) RO Data RW Data ZI Data Debug Library Name - 2880 326 0 143 0 237899 Matos.lib - 152 16 0 0 0 204 mc_w.l + 2880 326 0 143 0 239343 Matos.lib + 148 16 0 0 0 204 mc_w.l 1210 0 0 0 0 1132 mf_w.l ---------------------------------------------------------------------- - 4248 342 0 144 0 239235 Library Totals + 4244 342 0 144 0 240679 Library Totals ---------------------------------------------------------------------- @@ -596,15 +585,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 4800 398 268 168 1024 245872 Grand Totals - 4800 398 268 168 1024 245872 ELF Image Totals - 4800 398 268 168 0 0 ROM Totals + 4720 366 268 168 1024 243828 Grand Totals + 4720 366 268 168 1024 243828 ELF Image Totals + 4720 366 268 168 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 5068 ( 4.95kB) + Total RO Size (Code + RO Data) 4988 ( 4.87kB) Total RW Size (RW Data + ZI Data) 1192 ( 1.16kB) - Total ROM Size (Code + RO Data + RW Data) 5236 ( 5.11kB) + Total ROM Size (Code + RO Data + RW Data) 5156 ( 5.04kB) ============================================================================== diff --git a/Listings/fonctionetape.lst b/Listings/fonctionetape.lst index aa9084d..c9f1c35 100644 --- a/Listings/fonctionetape.lst +++ b/Listings/fonctionetape.lst @@ -294,14 +294,14 @@ ARM Macro Assembler Page 5 ******************* 119 00000056 END 00 00 40010C00 -Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw -ork --depend=.\objects\fonctionetape.d -o.\objects\fonctionetape.o -I.\RTE\Devi -ce\STM32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\ -CMSIS\Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Dev -ice\Include --predefine="__EVAL SETA 1" --predefine="__MICROLIB SETA 1" --prede -fine="__UVISION_VERSION SETA 534" --predefine="_RTE_ SETA 1" --predefine="STM32 -F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_MD SETA 1" -- -list=.\listings\fonctionetape.lst FonctionEtape.asm +Command Line: --debug --xref --diag_suppress=9931,A1950W --cpu=Cortex-M3 --depe +nd=.\objects\fonctionetape.d -o.\objects\fonctionetape.o -I.\RTE\Device\STM32F1 +03RB -I.\RTE\_Simul_ -IC:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\C +MSIS\Core\Include -IC:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2 +.4.0\Device\Include --predefine="__EVAL SETA 1" --predefine="__MICROLIB SETA 1" + --predefine="__UVISION_VERSION SETA 538" --predefine="_RTE_ SETA 1" --predefin +e="STM32F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_MD SE +TA 1" --list=.\listings\fonctionetape.lst FonctionEtape.asm diff --git a/Listings/fonctionetape2.lst b/Listings/fonctionetape2.lst index 512ea31..9ec0381 100644 --- a/Listings/fonctionetape2.lst +++ b/Listings/fonctionetape2.lst @@ -172,90 +172,86 @@ ARM Macro Assembler Page 3 51 00000000 52 00000000 Set_SCLK PROC - 53 00000000 E92D 1001 PUSH {R12,R0} ;On stocke R12 dans - R0 - 54 00000004 F8DF C040 LDR R12,=GPIOBASEA ;On recupère l'a - dresse de base - 55 00000008 F8DC 5020 LDR R5,[R12,#MaskSclk] ;Valeur à l' - adresse de l'output - - 56 0000000C F045 0520 ORR R5, R5,#(0x01 << 5) ;OU LOGIQUE - pour calculer la v - aleur a mettre dans - l'output - 57 00000010 F8AC 500C STRH R5,[R12,#0x0C] ;Etat du port B - (R5) stocké dans l' - output - 58 00000014 4770 BX LR ;Retour - 59 00000016 - 60 00000016 ENDP - 61 00000016 - 62 00000016 Reset_SCLK + 53 00000000 B407 PUSH {R0-R2} ;On stocke R0 à R2 + 54 00000002 490D LDR R1,=GPIOBASEA ;R1 -> Adresse de + GPIOA + 55 00000004 898A LDRH R2,[R1,#OffsetOutput] ;Valeur à + l'adresse d'ODR : + R2 = GPIOA->ODR + 56 00000006 F042 0220 ORR R2, R2,#(0x01 << 5) ;similaire + à GPIOA->ODR |= (1< + <5) + 57 0000000A 818A STRH R2,[R1,#OffsetOutput] ;Etat du + port B (R5) stocké + dans ODR + 58 0000000C 4770 BX LR ;Retour + 59 0000000E + 60 0000000E ENDP + 61 0000000E + 62 0000000E Reset_SCLK PROC - 63 00000016 E92D 1001 PUSH {R12,R0} ;On stocke R12 dans + 63 0000000E B407 PUSH {R0-R2} ;On stocke R0 à R2 + 64 00000010 4909 LDR R1,=GPIOBASEA ;R1 -> Adresse de + GPIOA ARM Macro Assembler Page 4 - R0 - 64 0000001A F8DF C030 LDR R12,=GPIOBASEB ;On recupère l'a - dresse de base - 65 0000001E F8DC 5020 LDR R5,[R12,#MaskSclk] ;Valeur à l' - adresse de l'SCLK - 66 00000022 F025 0520 AND R5, R5,#~(0x01 << 5) ;OU LOGIQU - E pour calculer la - valeur a mettre dan - s l'output - 67 00000026 F8AC 500C STRH R5,[R12,#0x0C] ;Etat du port B - (R5) stocké dans l' - output - 68 0000002A 4770 BX LR ;Retour - 69 0000002C - 70 0000002C ENDP - 71 0000002C - 72 0000002C ;******************************************************* + 65 00000012 898A LDRH R2,[R1,#OffsetOutput] ;Valeur à + l'adresse d'ODR : + R2 = GPIOA->ODR + 66 00000014 F022 0220 AND R2, R2,#~(0x01 << 5) ;similaire + à GPIOA->ODR &= ~( + 1<<5) + 67 00000018 818A STRH R2,[R1,#OffsetOutput] ;Etat du + port B (R5) stocké + dans ODR + 68 0000001A 4770 BX LR ;Retour + 69 0000001C + 70 0000001C ENDP + 71 0000001C + 72 0000001C ;******************************************************* ********************* - 73 0000002C ;R6 = NBLed - 74 0000002C ;R7 = *ValCourante - 75 0000002C ;R8 = ValCourante[NBLed] - 76 0000002C ;******************************************************* + 73 0000001C ;R6 = NBLed + 74 0000001C ;R7 = *ValCourante + 75 0000001C ;R8 = ValCourante[NBLed] + 76 0000001C ;******************************************************* ********************* - 77 0000002C DriverGlobal + 77 0000001C DriverGlobal PROC - 78 0000002C F7FF FFFE BL Set_SCLK ; - 79 00000030 F04F 0600 MOV R6, #0 ; - 80 00000034 WHILE_NBLED - 81 00000034 ;Pour NbLed = 1 à 48 - 82 00000034 4F06 LDR R7,=Barette1 ;On recupère l'adr + 78 0000001C F7FF FFFE BL Set_SCLK ; + 79 00000020 F04F 0600 MOV R6, #0 ; + 80 00000024 WHILE_NBLED + 81 00000024 ;Pour NbLed = 1 à 48 + 82 00000024 4F05 LDR R7,=Barette1 ;On recupère l'adr esse de base - 83 00000036 F817 8006 LDRB R8,[R7,R6] ;R8 = ValCourante[. + 83 00000026 F817 8006 LDRB R8,[R7,R6] ;R8 = ValCourante[. ..NBLed] - 84 0000003A - 85 0000003A EA4F 6808 LSL R8,#24 ;ValCourante[NBLed] + 84 0000002A + 85 0000002A EA4F 6808 LSL R8,#24 ;ValCourante[NBLed] <<24 - 86 0000003E - 87 0000003E F106 0601 ADD R6, R6, #1 ;On incrémente R6 - 88 00000042 2E2F CMP R6, #47 ; SI R6==47 alors o + 86 0000002E + 87 0000002E F106 0601 ADD R6, R6, #1 ;On incrémente R6 + 88 00000032 2E2F CMP R6, #47 ; SI R6==47 alors o n arrête la boucle - 89 00000044 D1F6 BNE WHILE_NBLED - 90 00000046 ENDP - 91 00000046 - 92 00000046 ;******************************************************* + 89 00000034 D1F6 BNE WHILE_NBLED + 90 00000036 ENDP + 91 00000036 + 92 00000036 ;******************************************************* ******************* - 93 00000046 END + 93 00000036 END 00 00 40010800 - 40010C00 00000000 -Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw -ork --depend=.\objects\fonctionetape2.d -o.\objects\fonctionetape2.o -I.\RTE\De -vice\STM32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7. -0\CMSIS\Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\D -evice\Include --predefine="__EVAL SETA 1" --predefine="__MICROLIB SETA 1" --pre -define="__UVISION_VERSION SETA 534" --predefine="_RTE_ SETA 1" --predefine="STM -32F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_MD SETA 1" ---list=.\listings\fonctionetape2.lst FonctionEtape2.asm +Command Line: --debug --xref --diag_suppress=9931,A1950W --cpu=Cortex-M3 --depe +nd=.\objects\fonctionetape2.d -o.\objects\fonctionetape2.o -I.\RTE\Device\STM32 +F103RB -I.\RTE\_Simul_ -IC:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0 +\CMSIS\Core\Include -IC:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP +\2.4.0\Device\Include --predefine="__EVAL SETA 1" --predefine="__MICROLIB SETA +1" --predefine="__UVISION_VERSION SETA 538" --predefine="_RTE_ SETA 1" --predef +ine="STM32F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_MD +SETA 1" --list=.\listings\fonctionetape2.lst FonctionEtape2.asm @@ -285,7 +281,7 @@ Comment: MesDonnees unused ARM Macro Assembler Page 1 Alphabetic symbol ordering Relocatable symbols -DriverGlobal 0000002C +DriverGlobal 0000001C Symbol: DriverGlobal Definitions @@ -293,7 +289,7 @@ Symbol: DriverGlobal Uses At line 16 in file FonctionEtape2.asm Comment: DriverGlobal used once -Reset_SCLK 00000016 +Reset_SCLK 0000000E Symbol: Reset_SCLK Definitions @@ -310,7 +306,7 @@ Symbol: Set_SCLK At line 14 in file FonctionEtape2.asm At line 78 in file FonctionEtape2.asm -WHILE_NBLED 00000034 +WHILE_NBLED 00000024 Symbol: WHILE_NBLED Definitions @@ -340,15 +336,16 @@ Symbol: GPIOBASEA At line 24 in file REG_UTILES.inc Uses At line 54 in file FonctionEtape2.asm -Comment: GPIOBASEA used once + At line 64 in file FonctionEtape2.asm + GPIOBASEB 40010C00 Symbol: GPIOBASEB Definitions At line 25 in file REG_UTILES.inc Uses - At line 64 in file FonctionEtape2.asm -Comment: GPIOBASEB used once + None +Comment: GPIOBASEB unused MaskBlank 00000004 Symbol: MaskBlank @@ -379,9 +376,8 @@ Symbol: MaskSclk Definitions At line 38 in file REG_UTILES.inc Uses - At line 55 in file FonctionEtape2.asm - At line 65 in file FonctionEtape2.asm - + None +Comment: MaskSclk unused MaskSerial_Dots 00000080 Symbol: MaskSerial_Dots @@ -434,8 +430,11 @@ Symbol: OffsetOutput Definitions At line 28 in file REG_UTILES.inc Uses - None -Comment: OffsetOutput unused + At line 55 in file FonctionEtape2.asm + At line 57 in file FonctionEtape2.asm + At line 65 in file FonctionEtape2.asm + At line 67 in file FonctionEtape2.asm + OffsetReset 00000014 Symbol: OffsetReset @@ -454,15 +453,15 @@ Symbol: OffsetSet Comment: OffsetSet unused SCB_VTOR E000ED08 -Symbol: SCB_VTOR - Definitions - At line 43 in file REG_UTILES.inc ARM Macro Assembler Page 3 Alphabetic symbol ordering Absolute symbols +Symbol: SCB_VTOR + Definitions + At line 43 in file REG_UTILES.inc Uses None Comment: SCB_VTOR unused diff --git a/Listings/principale.lst b/Listings/principale.lst index 4d2efb0..ccef911 100644 --- a/Listings/principale.lst +++ b/Listings/principale.lst @@ -223,14 +223,14 @@ ARM Macro Assembler Page 4 88 0000000A ENDP 89 0000000A 90 0000000A END -Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw -ork --depend=.\objects\principale.d -o.\objects\principale.o -I.\RTE\Device\STM -32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\ -Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\In -clude --predefine="__EVAL SETA 1" --predefine="__MICROLIB SETA 1" --predefine=" -__UVISION_VERSION SETA 534" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_M -D SETA 1" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_MD SETA 1" --list=. -\listings\principale.lst Principale.asm +Command Line: --debug --xref --diag_suppress=9931,A1950W --cpu=Cortex-M3 --depe +nd=.\objects\principale.d -o.\objects\principale.o -I.\RTE\Device\STM32F103RB - +I.\RTE\_Simul_ -IC:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\C +ore\Include -IC:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\D +evice\Include --predefine="__EVAL SETA 1" --predefine="__MICROLIB SETA 1" --pre +define="__UVISION_VERSION SETA 538" --predefine="_RTE_ SETA 1" --predefine="STM +32F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_MD SETA 1" +--list=.\listings\principale.lst Principale.asm diff --git a/Listings/startup_stm32f10x_md.lst b/Listings/startup_stm32f10x_md.lst index 3bdf3da..b08f478 100644 --- a/Listings/startup_stm32f10x_md.lst +++ b/Listings/startup_stm32f10x_md.lst @@ -463,15 +463,15 @@ ARM Macro Assembler Page 8 305 0000001C END 00000000 00000000 -Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw -ork --depend=.\objects\startup_stm32f10x_md.d -o.\objects\startup_stm32f10x_md. -o -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\AR -M\CMSIS\5.7.0\CMSIS\Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx -_DFP\2.3.0\Device\Include --predefine="__EVAL SETA 1" --predefine="__MICROLIB S -ETA 1" --predefine="__UVISION_VERSION SETA 534" --predefine="_RTE_ SETA 1" --pr -edefine="STM32F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --predefine="STM32F10X -_MD SETA 1" --list=.\listings\startup_stm32f10x_md.lst RTE\Device\STM32F103RB\s -tartup_stm32f10x_md.s +Command Line: --debug --xref --diag_suppress=9931,A1950W --cpu=Cortex-M3 --depe +nd=.\objects\startup_stm32f10x_md.d -o.\objects\startup_stm32f10x_md.o -I.\RTE\ +Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Users\alzyo\AppData\Local\Arm\Packs\ARM +\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\alzyo\AppData\Local\Arm\Packs\Keil\S +TM32F1xx_DFP\2.4.0\Device\Include --predefine="__EVAL SETA 1" --predefine="__MI +CROLIB SETA 1" --predefine="__UVISION_VERSION SETA 538" --predefine="_RTE_ SETA + 1" --predefine="STM32F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --predefine="S +TM32F10X_MD SETA 1" --list=.\listings\startup_stm32f10x_md.lst RTE/Device/STM32 +F103RB/startup_stm32f10x_md.s @@ -482,7 +482,7 @@ STACK 00000000 Symbol: STACK Definitions - At line 35 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 35 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses None Comment: STACK unused @@ -490,7 +490,7 @@ Stack_Mem 00000000 Symbol: Stack_Mem Definitions - At line 36 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 36 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses None Comment: Stack_Mem unused @@ -498,10 +498,10 @@ __initial_sp 00000400 Symbol: __initial_sp Definitions - At line 37 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 37 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 61 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 284 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 61 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 284 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s 3 symbols @@ -514,7 +514,7 @@ HEAP 00000000 Symbol: HEAP Definitions - At line 46 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 46 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses None Comment: HEAP unused @@ -522,7 +522,7 @@ Heap_Mem 00000000 Symbol: Heap_Mem Definitions - At line 48 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 48 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses None Comment: Heap_Mem unused @@ -530,17 +530,17 @@ __heap_base 00000000 Symbol: __heap_base Definitions - At line 47 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 47 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 285 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 285 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Comment: __heap_base used once __heap_limit 00000200 Symbol: __heap_limit Definitions - At line 49 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 49 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 286 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 286 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Comment: __heap_limit used once 4 symbols @@ -553,7 +553,7 @@ RESET 00000000 Symbol: RESET Definitions - At line 56 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 56 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses None Comment: RESET unused @@ -561,19 +561,19 @@ __Vectors 00000000 Symbol: __Vectors Definitions - At line 61 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 61 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 57 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 124 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 57 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 124 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s __Vectors_End 000000EC Symbol: __Vectors_End Definitions - At line 122 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 122 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 58 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 124 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 58 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 124 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s 3 symbols @@ -586,7 +586,7 @@ Relocatable symbols Symbol: .text Definitions - At line 126 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 126 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses None Comment: .text unused @@ -594,52 +594,52 @@ ADC1_2_IRQHandler 0000001A Symbol: ADC1_2_IRQHandler Definitions - At line 247 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 247 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 97 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 203 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 97 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 203 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s BusFault_Handler 0000000E Symbol: BusFault_Handler Definitions - At line 156 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 156 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 66 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 157 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 66 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 157 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s CAN1_RX1_IRQHandler 0000001A Symbol: CAN1_RX1_IRQHandler Definitions - At line 250 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 250 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 100 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 206 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 100 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 206 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s CAN1_SCE_IRQHandler 0000001A Symbol: CAN1_SCE_IRQHandler Definitions - At line 251 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 251 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 101 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 207 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 101 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 207 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s DMA1_Channel1_IRQHandler 0000001A Symbol: DMA1_Channel1_IRQHandler Definitions - At line 240 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 240 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 90 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 196 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 90 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 196 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s DMA1_Channel2_IRQHandler 0000001A Symbol: DMA1_Channel2_IRQHandler Definitions - At line 241 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 241 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses @@ -647,62 +647,62 @@ Symbol: DMA1_Channel2_IRQHandler ARM Macro Assembler Page 2 Alphabetic symbol ordering Relocatable symbols - At line 91 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 197 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 91 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 197 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s DMA1_Channel3_IRQHandler 0000001A Symbol: DMA1_Channel3_IRQHandler Definitions - At line 242 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 242 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 92 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 198 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 92 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 198 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s DMA1_Channel4_IRQHandler 0000001A Symbol: DMA1_Channel4_IRQHandler Definitions - At line 243 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 243 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 93 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 199 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 93 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 199 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s DMA1_Channel5_IRQHandler 0000001A Symbol: DMA1_Channel5_IRQHandler Definitions - At line 244 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 244 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 94 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 200 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 94 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 200 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s DMA1_Channel6_IRQHandler 0000001A Symbol: DMA1_Channel6_IRQHandler Definitions - At line 245 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 245 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 95 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 201 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 95 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 201 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s DMA1_Channel7_IRQHandler 0000001A Symbol: DMA1_Channel7_IRQHandler Definitions - At line 246 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 246 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 96 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 202 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 96 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 202 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s DebugMon_Handler 00000014 Symbol: DebugMon_Handler Definitions - At line 170 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 170 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 73 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 171 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 73 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 171 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Default_Handler 0000001A @@ -714,7 +714,7 @@ Relocatable symbols Symbol: Default_Handler Definitions - At line 183 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 183 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses None Comment: Default_Handler unused @@ -722,55 +722,55 @@ EXTI0_IRQHandler 0000001A Symbol: EXTI0_IRQHandler Definitions - At line 235 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 235 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 85 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 191 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 85 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 191 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s EXTI15_10_IRQHandler 0000001A Symbol: EXTI15_10_IRQHandler Definitions - At line 269 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 269 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 119 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 225 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 119 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 225 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s EXTI1_IRQHandler 0000001A Symbol: EXTI1_IRQHandler Definitions - At line 236 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 236 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 86 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 192 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 86 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 192 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s EXTI2_IRQHandler 0000001A Symbol: EXTI2_IRQHandler Definitions - At line 237 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 237 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 87 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 193 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 87 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 193 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s EXTI3_IRQHandler 0000001A Symbol: EXTI3_IRQHandler Definitions - At line 238 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 238 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 88 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 194 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 88 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 194 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s EXTI4_IRQHandler 0000001A Symbol: EXTI4_IRQHandler Definitions - At line 239 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 239 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 89 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 195 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 89 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 195 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s @@ -782,55 +782,55 @@ EXTI9_5_IRQHandler 0000001A Symbol: EXTI9_5_IRQHandler Definitions - At line 252 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 252 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 102 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 208 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 102 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 208 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s FLASH_IRQHandler 0000001A Symbol: FLASH_IRQHandler Definitions - At line 233 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 233 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 83 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 189 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 83 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 189 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s HardFault_Handler 0000000A Symbol: HardFault_Handler Definitions - At line 146 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 146 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 64 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 147 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 64 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 147 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s I2C1_ER_IRQHandler 0000001A Symbol: I2C1_ER_IRQHandler Definitions - At line 261 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 261 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 111 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 217 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 111 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 217 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s I2C1_EV_IRQHandler 0000001A Symbol: I2C1_EV_IRQHandler Definitions - At line 260 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 260 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 110 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 216 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 110 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 216 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s I2C2_ER_IRQHandler 0000001A Symbol: I2C2_ER_IRQHandler Definitions - At line 263 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 263 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 113 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 219 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 113 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 219 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s I2C2_EV_IRQHandler 0000001A @@ -842,64 +842,64 @@ Symbol: I2C2_EV_IRQHandler ARM Macro Assembler Page 5 Alphabetic symbol ordering Relocatable symbols - At line 262 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 262 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 112 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 218 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 112 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 218 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s MemManage_Handler 0000000C Symbol: MemManage_Handler Definitions - At line 151 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 151 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 65 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 152 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 65 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 152 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s NMI_Handler 00000008 Symbol: NMI_Handler Definitions - At line 141 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 141 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 63 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 142 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 63 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 142 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s PVD_IRQHandler 0000001A Symbol: PVD_IRQHandler Definitions - At line 230 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 230 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 80 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 186 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 80 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 186 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s PendSV_Handler 00000016 Symbol: PendSV_Handler Definitions - At line 174 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 174 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 75 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 175 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 75 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 175 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s RCC_IRQHandler 0000001A Symbol: RCC_IRQHandler Definitions - At line 234 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 234 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 84 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 190 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 84 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 190 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s RTCAlarm_IRQHandler 0000001A Symbol: RTCAlarm_IRQHandler Definitions - At line 270 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 270 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 120 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 226 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 120 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 226 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s @@ -911,61 +911,61 @@ RTC_IRQHandler 0000001A Symbol: RTC_IRQHandler Definitions - At line 232 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 232 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 82 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 188 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 82 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 188 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Reset_Handler 00000000 Symbol: Reset_Handler Definitions - At line 129 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 129 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 62 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 130 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 62 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 130 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s SPI1_IRQHandler 0000001A Symbol: SPI1_IRQHandler Definitions - At line 264 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 264 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 114 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 220 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 114 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 220 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s SPI2_IRQHandler 0000001A Symbol: SPI2_IRQHandler Definitions - At line 265 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 265 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 115 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 221 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 115 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 221 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s SVC_Handler 00000012 Symbol: SVC_Handler Definitions - At line 165 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 165 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 72 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 166 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 72 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 166 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s SysTick_Handler 00000018 Symbol: SysTick_Handler Definitions - At line 178 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 178 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 76 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 179 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 76 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 179 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s TAMPER_IRQHandler 0000001A Symbol: TAMPER_IRQHandler Definitions - At line 231 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 231 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s @@ -973,62 +973,62 @@ ARM Macro Assembler Page 7 Alphabetic symbol ordering Relocatable symbols Uses - At line 81 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 187 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 81 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 187 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s TIM1_BRK_IRQHandler 0000001A Symbol: TIM1_BRK_IRQHandler Definitions - At line 253 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 253 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 103 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 209 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 103 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 209 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s TIM1_CC_IRQHandler 0000001A Symbol: TIM1_CC_IRQHandler Definitions - At line 256 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 256 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 106 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 212 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 106 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 212 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s TIM1_TRG_COM_IRQHandler 0000001A Symbol: TIM1_TRG_COM_IRQHandler Definitions - At line 255 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 255 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 105 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 211 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 105 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 211 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s TIM1_UP_IRQHandler 0000001A Symbol: TIM1_UP_IRQHandler Definitions - At line 254 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 254 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 104 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 210 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 104 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 210 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s TIM2_IRQHandler 0000001A Symbol: TIM2_IRQHandler Definitions - At line 257 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 257 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 107 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 213 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 107 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 213 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s TIM3_IRQHandler 0000001A Symbol: TIM3_IRQHandler Definitions - At line 258 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 258 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 108 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 214 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 108 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 214 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s TIM4_IRQHandler 0000001A @@ -1040,61 +1040,61 @@ Relocatable symbols Symbol: TIM4_IRQHandler Definitions - At line 259 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 259 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 109 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 215 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 109 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 215 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s USART1_IRQHandler 0000001A Symbol: USART1_IRQHandler Definitions - At line 266 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 266 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 116 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 222 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 116 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 222 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s USART2_IRQHandler 0000001A Symbol: USART2_IRQHandler Definitions - At line 267 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 267 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 117 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 223 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 117 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 223 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s USART3_IRQHandler 0000001A Symbol: USART3_IRQHandler Definitions - At line 268 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 268 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 118 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 224 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 118 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 224 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s USBWakeUp_IRQHandler 0000001A Symbol: USBWakeUp_IRQHandler Definitions - At line 271 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 271 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 121 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 227 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 121 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 227 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s USB_HP_CAN1_TX_IRQHandler 0000001A Symbol: USB_HP_CAN1_TX_IRQHandler Definitions - At line 248 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 248 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 98 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 204 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 98 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 204 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s USB_LP_CAN1_RX0_IRQHandler 0000001A Symbol: USB_LP_CAN1_RX0_IRQHandler Definitions - At line 249 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 249 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses @@ -1102,26 +1102,26 @@ Symbol: USB_LP_CAN1_RX0_IRQHandler ARM Macro Assembler Page 9 Alphabetic symbol ordering Relocatable symbols - At line 99 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 205 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 99 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 205 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s UsageFault_Handler 00000010 Symbol: UsageFault_Handler Definitions - At line 161 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 161 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 67 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 162 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 67 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 162 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s WWDG_IRQHandler 0000001A Symbol: WWDG_IRQHandler Definitions - At line 229 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 229 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 79 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s - At line 185 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 79 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s + At line 185 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s 55 symbols @@ -1134,25 +1134,25 @@ Heap_Size 00000200 Symbol: Heap_Size Definitions - At line 44 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 44 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 48 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 48 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Comment: Heap_Size used once Stack_Size 00000400 Symbol: Stack_Size Definitions - At line 33 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 33 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 36 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 36 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Comment: Stack_Size used once __Vectors_Size 000000EC Symbol: __Vectors_Size Definitions - At line 124 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 124 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 59 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 59 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Comment: __Vectors_Size used once 3 symbols @@ -1165,17 +1165,17 @@ SystemInit 00000000 Symbol: SystemInit Definitions - At line 132 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 132 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 133 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 133 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Comment: SystemInit used once __main 00000000 Symbol: __main Definitions - At line 131 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 131 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Uses - At line 135 in file RTE\Device\STM32F103RB\startup_stm32f10x_md.s + At line 135 in file RTE/Device/STM32F103RB/startup_stm32f10x_md.s Comment: __main used once 2 symbols 407 symbols in table diff --git a/Objects/Etape_2_Simulé.dep b/Objects/Etape_2_Simulé.dep index 7083c57..22341a5 100644 --- a/Objects/Etape_2_Simulé.dep +++ b/Objects/Etape_2_Simulé.dep @@ -1,23 +1,23 @@ Dependencies for Project 'Etape_2', Target 'Simulé': (DO NOT MODIFY !) -CompilerVersion: 5060960::V5.06 update 7 (build 960)::.\ARMCC -F (.\Principale.asm)(0x6412F558)(--cpu Cortex-M3 --pd "__EVAL SETA 1" -g --apcs=interwork --pd "__MICROLIB SETA 1" -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include --pd "__UVISION_VERSION SETA 534" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --list .\listings\principale.lst --xref -o .\objects\principale.o --depend .\objects\principale.d) -I (REG_UTILES.inc)(0x6412D4E6) -F (.\FonctionEtape.asm)(0x6412F33B)(--cpu Cortex-M3 --pd "__EVAL SETA 1" -g --apcs=interwork --pd "__MICROLIB SETA 1" -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include --pd "__UVISION_VERSION SETA 534" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --list .\listings\fonctionetape.lst --xref -o .\objects\fonctionetape.o --depend .\objects\fonctionetape.d) -I (REG_UTILES.inc)(0x6412D4E6) -F (.\FonctionEtape2.asm)(0x6412F95B)(--cpu Cortex-M3 --pd "__EVAL SETA 1" -g --apcs=interwork --pd "__MICROLIB SETA 1" -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include --pd "__UVISION_VERSION SETA 534" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --list .\listings\fonctionetape2.lst --xref -o .\objects\fonctionetape2.o --depend .\objects\fonctionetape2.d) -I (REG_UTILES.inc)(0x6412D4E6) -F (.\Matos.lib)(0x6412D4E6)() -F (RTE\Device\STM32F103RB\RTE_Device.h)(0x6412D4E6)() -F (RTE\Device\STM32F103RB\startup_stm32f10x_md.s)(0x6412D4E6)(--cpu Cortex-M3 --pd "__EVAL SETA 1" -g --apcs=interwork --pd "__MICROLIB SETA 1" -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include --pd "__UVISION_VERSION SETA 534" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --list .\listings\startup_stm32f10x_md.lst --xref -o .\objects\startup_stm32f10x_md.o --depend .\objects\startup_stm32f10x_md.d) -F (RTE\Device\STM32F103RB\system_stm32f10x.c)(0x6412D4E6)(--c99 -c --cpu Cortex-M3 -D__EVAL -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\pilotes\Include -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include -IC:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include -D__UVISION_VERSION="534" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DSTM32F10X_MD -o .\objects\system_stm32f10x.o --omf_browse .\objects\system_stm32f10x.crf --depend .\objects\system_stm32f10x.d) -I (C:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include\stm32f10x.h)(0x58258CCC) -I (.\RTE\_Simul_\RTE_Components.h)(0x6412EA84) -I (C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\core_cm3.h)(0x5E8F2582) -I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5E8E9122) -I (C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\cmsis_version.h)(0x5E8F2582) -I (C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\cmsis_compiler.h)(0x5E835B22) -I (C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\cmsis_armcc.h)(0x5E8F2582) -I (C:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include\system_stm32f10x.h)(0x58258CCC) -F (RTE\Device\STM32F107VC\RTE_Device.h)(0x6412D4E6)() -F (RTE\Device\STM32F107VC\startup_stm32f10x_cl.s)(0x6412D4E6)() -F (RTE\Device\STM32F107VC\system_stm32f10x.c)(0x6412D4E6)() +CompilerVersion: 6190000::V6.19::ARMCLANG +F (.\Principale.asm)(0x641F19F4)(--cpu Cortex-M3 --pd "__EVAL SETA 1" -g --pd "__MICROLIB SETA 1" --diag_suppress=A1950W -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include --pd "__UVISION_VERSION SETA 538" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --list .\listings\principale.lst --xref -o .\objects\principale.o --depend .\objects\principale.d) +I (REG_UTILES.inc)(0x641EB32F) +F (.\FonctionEtape.asm)(0x641F19F4)(--cpu Cortex-M3 --pd "__EVAL SETA 1" -g --pd "__MICROLIB SETA 1" --diag_suppress=A1950W -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include --pd "__UVISION_VERSION SETA 538" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --list .\listings\fonctionetape.lst --xref -o .\objects\fonctionetape.o --depend .\objects\fonctionetape.d) +I (REG_UTILES.inc)(0x641EB32F) +F (.\FonctionEtape2.asm)(0x641F71D7)(--cpu Cortex-M3 --pd "__EVAL SETA 1" -g --pd "__MICROLIB SETA 1" --diag_suppress=A1950W -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include --pd "__UVISION_VERSION SETA 538" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --list .\listings\fonctionetape2.lst --xref -o .\objects\fonctionetape2.o --depend .\objects\fonctionetape2.d) +I (REG_UTILES.inc)(0x641EB32F) +F (.\Matos.lib)(0x641EB32F)() +F (RTE/Device/STM32F103RB/RTE_Device.h)(0x641EB32F)() +F (RTE/Device/STM32F103RB/startup_stm32f10x_md.s)(0x641EB32F)(--cpu Cortex-M3 --pd "__EVAL SETA 1" -g --pd "__MICROLIB SETA 1" --diag_suppress=A1950W -I.\RTE\Device\STM32F103RB -I.\RTE\_Simul_ -IC:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -IC:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include --pd "__UVISION_VERSION SETA 538" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --pd "_RTE_ SETA 1" --pd "STM32F10X_MD SETA 1" --list .\listings\startup_stm32f10x_md.lst --xref -o .\objects\startup_stm32f10x_md.o --depend .\objects\startup_stm32f10x_md.d) +F (RTE/Device/STM32F103RB/system_stm32f10x.c)(0x641EB32F)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m3 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ../pilotes/Include -I./RTE/Device/STM32F103RB -I./RTE/_Simul_ -IC:/Users/alzyo/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include -IC:/Users/alzyo/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include -D__UVISION_VERSION="538" -D_RTE_ -DSTM32F10X_MD -D_RTE_ -DSTM32F10X_MD -o ./objects/system_stm32f10x.o -MD) +I (C:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include\stm32f10x.h)(0x61ADDBCE) +I (RTE\_Simul_\RTE_Components.h)(0x641F19FB) +I (C:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include\core_cm3.h)(0x626FAD4E) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6388AB78) +I (C:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include\cmsis_version.h)(0x626FAD4E) +I (C:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include\cmsis_compiler.h)(0x626FAD4E) +I (C:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include\cmsis_armclang.h)(0x626FAD4E) +I (C:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include\system_stm32f10x.h)(0x61ADDBCE) +F (RTE/Device/STM32F107VC/RTE_Device.h)(0x641EB32F)() +F (RTE/Device/STM32F107VC/startup_stm32f10x_cl.s)(0x641EB32F)() +F (RTE/Device/STM32F107VC/system_stm32f10x.c)(0x641EB32F)() diff --git a/Objects/Simu_Etape0.axf b/Objects/Simu_Etape0.axf index 0791451654f855fb23c6db9bd89ca363974b662c..edb6dfd213d0285c07125148d9f4b6ff45ed1c44 100644 GIT binary patch delta 12990 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 A>;M1& diff --git a/Objects/Simu_Etape0.build_log.htm b/Objects/Simu_Etape0.build_log.htm index dc1c971..cacc529 100644 --- a/Objects/Simu_Etape0.build_log.htm +++ b/Objects/Simu_Etape0.build_log.htm @@ -3,71 +3,71 @@
 

µVision Build Log

Tool Versions:

-IDE-Version: µVision V5.34.0.0 -Copyright (C) 2021 ARM Ltd and ARM Germany GmbH. All rights reserved. -License Information: CSN CSN, INSA de Toulouse, LIC=---- +IDE-Version: µVision V5.38.0.0 +Copyright (C) 2022 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: Yohan Boujon, INSA, LIC=---- Tool Versions: -Toolchain: MDK-Lite Version: 5.34.0.0 -Toolchain Path: C:\Keil_v5\ARM\ARMCC\Bin -C Compiler: Armcc.exe V5.06 update 7 (build 960) -Assembler: Armasm.exe V5.06 update 7 (build 960) -Linker/Locator: ArmLink.exe V5.06 update 7 (build 960) -Library Manager: ArmAr.exe V5.06 update 7 (build 960) -Hex Converter: FromElf.exe V5.06 update 7 (build 960) -CPU DLL: SARMCM3.DLL V5.34.0.0 -Dialog DLL: DARMSTM.DLL V1.68.0.0 -Target DLL: UL2CM3.DLL V1.163.9.0 -Dialog DLL: TCM.DLL V1.48.0.0 +Toolchain: MDK-Lite Version: 5.38.0.0 +Toolchain Path: C:\Keil_v5\ARM\ARMCLANG\Bin +C Compiler: ArmClang.exe V6.19 +Assembler: Armasm.exe V6.19 +Linker/Locator: ArmLink.exe V6.19 +Library Manager: ArmAr.exe V6.19 +Hex Converter: FromElf.exe V6.19 +CPU DLL: SARMCM3.DLL V5.38.0.0 +Dialog DLL: DARMSTM.DLL V1.69.1.0 +Target DLL: UL2CM3.DLL V1.164.8.0 +Dialog DLL: TCM.DLL V1.56.4.0

Project:

-U:\Windows\Bureau\roue_assembler\Etape_2.uvprojx -Project File Date: 03/16/2023 +C:\Users\alzyo\Desktop\roue_assembler\Etape_2.uvprojx +Project File Date: 03/25/2023

Output:

-*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin' +*** Using Compiler 'V6.19', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin' Rebuild target 'Simulé' assembling Principale.asm... assembling FonctionEtape.asm... FonctionEtape.asm(119): warning: A1581W: Added 2 bytes of padding at address 0x56 assembling FonctionEtape2.asm... -FonctionEtape2.asm(93): warning: A1581W: Added 2 bytes of padding at address 0x46 +FonctionEtape2.asm(93): warning: A1581W: Added 2 bytes of padding at address 0x36 assembling startup_stm32f10x_md.s... compiling system_stm32f10x.c... linking... -Program Size: Code=4800 RO-data=268 RW-data=168 ZI-data=1024 +Program Size: Code=4720 RO-data=268 RW-data=168 ZI-data=1024 ".\Objects\Simu_Etape0.axf" - 0 Error(s), 2 Warning(s).

Software Packages used:

Package Vendor: ARM - http://www.keil.com/pack/ARM.CMSIS.5.7.0.pack - ARM.CMSIS.5.7.0 - CMSIS (Cortex Microcontroller Software Interface Standard) - * Component: CORE Version: 5.4.0 + http://www.keil.com/pack/ARM.CMSIS.5.9.0.pack + ARM.CMSIS.5.9.0 + CMSIS (Common Microcontroller Software Interface Standard) + * Component: CORE Version: 5.6.0 Package Vendor: Keil - http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.3.0.pack - Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.4.0.pack + Keil.STM32F1xx_DFP.2.4.0 STMicroelectronics STM32F1 Series Device Support, Drivers and Examples * Component: Startup Version: 1.0.0

Collection of Component include folders:

- .\RTE\Device\STM32F103RB - .\RTE\_Simul_ - C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include - C:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include + ./RTE/Device/STM32F103RB + ./RTE/_Simul_ + C:/Users/alzyo/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include + C:/Users/alzyo/AppData/Local/Arm/Packs/Keil/STM32F1xx_DFP/2.4.0/Device/Include

Collection of Component Files used:

- * Component: ARM::CMSIS:CORE:5.4.0 + * Component: ARM::CMSIS:CORE:5.6.0 * Component: Keil::Device:Startup:1.0.0 - Source file: Device\Source\system_stm32f10x.c - Include file: RTE_Driver\Config\RTE_Device.h - Source file: Device\Source\ARM\STM32F1xx_OPT.s - Source file: Device\Source\ARM\startup_stm32f10x_md.s -Build Time Elapsed: 00:00:02 + Source file: Device/Source/ARM/startup_stm32f10x_md.s + Source file: Device/Source/system_stm32f10x.c + Include file: RTE_Driver/Config/RTE_Device.h + Source file: Device/Source/ARM/STM32F1xx_OPT.s +Build Time Elapsed: 00:00:01
diff --git a/Objects/Simu_Etape0.htm b/Objects/Simu_Etape0.htm index 7947965..2a311cd 100644 --- a/Objects/Simu_Etape0.htm +++ b/Objects/Simu_Etape0.htm @@ -3,7 +3,7 @@ Static Call Graph - [.\Objects\Simu_Etape0.axf]

Static Call Graph for image .\Objects\Simu_Etape0.axf


-

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Thu Mar 16 12:11:26 2023 +

#<CALLGRAPH># ARM Linker, 6190004: Last Updated: Sat Mar 25 23:12:52 2023

Maximum Stack Usage = 168 bytes + Unknown(Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

@@ -63,7 +63,7 @@ Function Pointers
  • SPI2_IRQHandler from startup_stm32f10x_md.o(.text) referenced from startup_stm32f10x_md.o(RESET)
  • SVC_Handler from startup_stm32f10x_md.o(.text) referenced from startup_stm32f10x_md.o(RESET)
  • SysTick_Handler from timer_systick_1.o(i.SysTick_Handler) referenced from startup_stm32f10x_md.o(RESET) -
  • SystemInit from system_stm32f10x.o(i.SystemInit) referenced from startup_stm32f10x_md.o(.text) +
  • SystemInit from system_stm32f10x.o(.text.SystemInit) referenced from startup_stm32f10x_md.o(.text)
  • TAMPER_IRQHandler from startup_stm32f10x_md.o(.text) referenced from startup_stm32f10x_md.o(RESET)
  • TIM1_BRK_IRQHandler from startup_stm32f10x_md.o(.text) referenced from startup_stm32f10x_md.o(RESET)
  • TIM1_CC_IRQHandler from fonctiontimer.o(i.TIM1_CC_IRQHandler) referenced from startup_stm32f10x_md.o(RESET) @@ -90,7 +90,7 @@ Global Symbols

    __main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
    [Address Reference Count : 1]

    • startup_stm32f10x_md.o(.text)
    -

    _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) +

    _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))

    _main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))

    [Calls]

    • >>   __scatterload @@ -100,17 +100,15 @@ Global Symbols

      [Called By]
      • >>   __scatterload
      -

      _main_clock (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) +

      _main_clock (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) -

      _main_cpp_init (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) +

      _main_cpp_init (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) -

      _main_init (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) +

      _main_init (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) -

      __rt_lib_shutdown_fini (Thumb, 0 bytes, Stack size unknown bytes, entry12b.o(.ARM.Collect$$$$0000000E)) +

      __rt_final_cpp (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D)) -

      __rt_final_cpp (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000F)) - -

      __rt_final_exit (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$00000011)) +

      __rt_final_exit (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))

      Reset_Handler (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f10x_md.o(.text))
      [Address Reference Count : 1]

      • startup_stm32f10x_md.o(RESET) @@ -347,7 +345,7 @@ Global Symbols
      • >>   Init_Timer1
      -

      __aeabi_cdcmpeq (Thumb, 0 bytes, Stack size 0 bytes, cdcmple.o(.text), UNUSED) +

      __aeabi_cdcmpeq (Thumb, 0 bytes, Stack size 0 bytes, cdcmple.o(.text), UNUSED)

      __aeabi_cdcmple (Thumb, 48 bytes, Stack size 0 bytes, cdcmple.o(.text))

      [Called By]

      • >>   Init_Timer1 @@ -366,7 +364,7 @@ Global Symbols
      • >>   Init_Timer1
      -

      __I$use$fp (Thumb, 0 bytes, Stack size 0 bytes, iusefp.o(.text), UNUSED) +

      __I$use$fp (Thumb, 0 bytes, Stack size 0 bytes, iusefp.o(.text), UNUSED)

      _float_round (Thumb, 18 bytes, Stack size 0 bytes, fepilogue.o(.text))

      [Called By]

      • >>   __aeabi_fdiv @@ -401,20 +399,25 @@ Global Symbols
        [Called By]
        • >>   _main_scatterload
        -

        __scatterload_rt2 (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED) +

        __scatterload_rt2 (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)

        __aeabi_llsl (Thumb, 30 bytes, Stack size 0 bytes, llshl.o(.text))

        [Called By]

        • >>   _double_epilogue
        -

        _ll_shift_l (Thumb, 0 bytes, Stack size 0 bytes, llshl.o(.text), UNUSED) +

        _ll_shift_l (Thumb, 0 bytes, Stack size 0 bytes, llshl.o(.text), UNUSED)

        __aeabi_llsr (Thumb, 32 bytes, Stack size 0 bytes, llushr.o(.text))

        [Called By]

        • >>   _double_epilogue
        -

        _ll_ushift_r (Thumb, 0 bytes, Stack size 0 bytes, llushr.o(.text), UNUSED) +

        _ll_ushift_r (Thumb, 0 bytes, Stack size 0 bytes, llushr.o(.text), UNUSED) +

        SystemInit (Thumb, 272 bytes, Stack size 8 bytes, system_stm32f10x.o(.text.SystemInit)) +

        [Stack]

        • Max Depth = 8
        • Call Chain = SystemInit +
        +
        [Address Reference Count : 1]
        • startup_stm32f10x_md.o(.text) +

        Anim (Thumb, 32 bytes, Stack size 0 bytes, fonctiontimer.o(i.Anim))
        [Address Reference Count : 1]

        • initialisation.o(i.Init_Cible)
        @@ -515,13 +518,6 @@ Global Symbols

      [Address Reference Count : 1]
      • startup_stm32f10x_md.o(RESET)
      -

      SystemInit (Thumb, 78 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SystemInit)) -

      [Stack]

      • Max Depth = 28
      • Call Chain = SystemInit ⇒ SetSysClock ⇒ SetSysClockTo72 -
      -
      [Calls]
      • >>   SetSysClock -
      -
      [Address Reference Count : 1]
      • startup_stm32f10x_md.o(.text) -

      Systick_Period (Thumb, 256 bytes, Stack size 48 bytes, timer_systick_1.o(i.Systick_Period))

      [Stack]

      • Max Depth = 136
      • Call Chain = Systick_Period ⇒ __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round
      @@ -570,34 +566,34 @@ Global Symbols

    [Address Reference Count : 1]
    • startup_stm32f10x_md.o(RESET)
    -

    __scatterload_copy (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) +

    __scatterload_copy (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) -

    __scatterload_null (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) +

    __scatterload_null (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) -

    __scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED) +

    __scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)

    main (Thumb, 10 bytes, Stack size 0 bytes, principale.o(moncode))

    [Stack]

    • Max Depth = 168
    • Call Chain = main ⇒ Init_Cible ⇒ Init_Timer1 ⇒ __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round

    [Calls]
    • >>   Init_Cible -
    • >>   DriverGlobal +
    • >>   DriverGlobal

    [Address Reference Count : 1]
    • entry9a.o(.ARM.Collect$$$$0000000B)
    -

    Eteint_LED (Thumb, 22 bytes, Stack size 0 bytes, fonctionetape.o(moncode), UNUSED) +

    Eteint_LED (Thumb, 22 bytes, Stack size 0 bytes, fonctionetape.o(moncode), UNUSED) -

    Allume_LED (Thumb, 22 bytes, Stack size 0 bytes, fonctionetape.o(moncode), UNUSED) +

    Allume_LED (Thumb, 22 bytes, Stack size 0 bytes, fonctionetape.o(moncode), UNUSED) -

    Inverse_LED (Thumb, 42 bytes, Stack size 0 bytes, fonctionetape.o(moncode), UNUSED) +

    Inverse_LED (Thumb, 42 bytes, Stack size 0 bytes, fonctionetape.o(moncode), UNUSED) -

    Set_SCLK (Thumb, 22 bytes, Stack size 0 bytes, fonctionetape2.o(moncode)) -

    [Called By]

    • >>   DriverGlobal +

      Set_SCLK (Thumb, 14 bytes, Stack size 0 bytes, fonctionetape2.o(moncode)) +

      [Called By]

      • >>   DriverGlobal
      -

      Reset_SCLK (Thumb, 22 bytes, Stack size 0 bytes, fonctionetape2.o(moncode), UNUSED) +

      Reset_SCLK (Thumb, 14 bytes, Stack size 0 bytes, fonctionetape2.o(moncode), UNUSED) -

      DriverGlobal (Thumb, 26 bytes, Stack size 0 bytes, fonctionetape2.o(moncode)) -

      [Calls]

      • >>   Set_SCLK +

        DriverGlobal (Thumb, 26 bytes, Stack size 0 bytes, fonctionetape2.o(moncode)) +

        [Calls]

        • >>   Set_SCLK

        [Called By]
        • >>   main
        @@ -614,21 +610,7 @@ Global Symbols

        Local Symbols -

        -

        SetSysClock (Thumb, 8 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SetSysClock)) -

        [Stack]

        • Max Depth = 20
        • Call Chain = SetSysClock ⇒ SetSysClockTo72 -
        -
        [Calls]
        • >>   SetSysClockTo72 -
        -
        [Called By]
        • >>   SystemInit -
        - -

        SetSysClockTo72 (Thumb, 214 bytes, Stack size 12 bytes, system_stm32f10x.o(i.SetSysClockTo72)) -

        [Stack]

        • Max Depth = 12
        • Call Chain = SetSysClockTo72 -
        -
        [Called By]
        • >>   SetSysClock -
        -

        +

        Undefined Global Symbols


        diff --git a/Objects/fonctionetape.o b/Objects/fonctionetape.o index 84ea1874894180ca92531678eae98f819d634998..493c5521a3f94db65de52eedfec54bd6ca684f0f 100644 GIT binary patch delta 502 zcmew$^g(FCA)lgL1?T+Sg3O%MB89a4A_dpnq|}s@)D#6XJwr={ko^1{D}}_O+{EHs zg=o`MbK~SB1A|xwXRDad;?$zzn8ci_%KR9Y)Z*-t{DR5+jImw}YzzzxOxz3%Z6KPH zfuRdZ_kn1328MZ1{vs&72}*B+(#N6n>CIaitr-;`0J$*0!tn9`T^I*UGcnwnEXeFH zcpgcVnSqhv_~b(7myC6jqgaYf$noN2c2*s69Y;e;Q-g2?UESn@Qd{TzqLS1KU0>tL zA*=<4$liA>C~!$ENsRHyPfpB2}n%NE{<^w@{Mu!4fYI>&ne nh(}o%85lem7`PxjAj!tyHd&WbMLvKH=zA!DF_=O8`Cvf+kDqdE delta 503 zcmew$^g(FCA>SZh1?T+Sg3O%MA_Y@D12cuvf|SIPR0VSdjil1doD>C1GXqV9ko^1{ zD}}_O+{EHsg=mu$W7D+6ScXumnDETJl>GAI7^l*r)Wp)se2lT4YzzzxOxz3%?I4X1GzB3!tn9`9T*2pGcnwpEXeFH zcn(RFnSqhv*yKXymy@Geimk}^;AAFN9YqCQ-QxevPo7fP1t1I8)3AnZh*yw@6n4+!6X7X%E07;Xf97g=-(cGeNu*`nCO$#i|2= zz}~=4j&{4W&`J|vbuMIY^;_&0(#W1~B1*~)8=GIZ_&5T5LBH1yy2hG5iHIMy3mCi; z{*b-wI(7gn*CWv+Nt~{iq;1p;wi7T2P%R3z+CN+m*u1^y&UgRMTI{}xj>e8ixW6ZK zMhON}=H=s2!^-P(!HF*WW`z~ry0VCA#qc=MKE4jT;d59ANoEzw% zYh?JZz-Pt^Yff0g`|=gU)?BdmrNe|`&^`((J=9{@c2IBs*8d0 Xi#RE$C*?aOh5`MqNL7%g5T3Vo>`m&FB!ZTJt=uYPT`tRzk%oCP*)%f!vJ%n9`91f)OI3^|m z8pxGH0N*1|;Q&apE8d_Jy57JHogtqyoS+XCuRrt#d=M^crDk0t==Qj;T`&rZ+GyBy zLatrZ&bCKxud7{JES%FeJg>K`Ies6PYi}=f=PztI@4)7=ecc^&y*q(j9{JoE*}ga8 zEhh+gzl|G;2(E}3A@Dz#xDFM)kRKT%|l)~(G zIX@2Qv#P3&s}t&>Y)(B4fN4mGG8bc#_v7=3kK0M0)MoK7&s zk%A2TC^at$%-}nTqdQZeDsjY~?7k*3)jUfw5BNU9smR1AFEc0~Q=;%@6y*qJ65uFJ zjMAit$n)fOpbGbuX;Q3yTi+oPK;r``7Xwo!z#SnpLq&Lksm-I%{w3c+UR9@YlgFbcuugjs% zgQ_kKwXT-;o@?~9{HkF$ zH%zY&pbb@~1+07?c{m&2X53rt6GEIB7+CbIQ$WtzRH9Az)F zW9(%56ng<(@Daf1!!pCb2yO+TA3AL?P;EF#If2pf`h9HS=pr40_xi%o=RH}JTX+Z# z2PzbvTe!yFx}H10Wqa5iYq!!0=?bznWC=rJjyWa4*1$rmnWhQ zAZf47#2WZ42h>c|@hMV0Nc8x;`w3vwb@tI$k&GcVgp^AbsgVT2q{ z!&qR{!VXdfa%m-Lg1rT_ivI@*Lj^YQGBkwRL2k%DV(Qff*{YKnrHo}r~eNPd2fl|o`sZenq+ zLbPeBxp8umfk7;TvsFxJacWU)5>>KPE90Syp8snLloKu>Ts-WwM779R(jwV3AB&H@NWil{oP2R_}^LFo-@ZW&j2b0ssKvsBtg= delta 463 zcmdlZv`1({y>F1Of^&XuL1s>Bk%Fn7ftf;SK}upts)D(KMp9{JPKtu1nSrK4NPd2f zl|o`sZenq+LbOSWv1wXjEJLVOOn7EqN`859j8kb*YGUcc(>j`L3=9lRTnr2?Aew`L zp#w_yfM}rPG$?=8WJSjNf=Y})E)=jZeEcszS&+$JPy|VonSqgkXLBJ_KjUOZmRu|H z-8*>^i;kj#u5NNcsjYK4@08k$TBRh~W`5o)s&8OIIGcp=ZUdExu8vyn_3z$rte3L`ZbR(F}%}~H# X#|&nI2v#r)$_EC|`^5~vfI$EN)3&~w0(i~#8|HV+@0q_buP|$ho2P|&C-ZLRL(GGc zj{)S^G0t3KKF55Wd6xM;^8)h==2y<$z^<)-8zcaYa`AIuP3cqvSSP~|D{E_h&ms=M zs?)5UNc?1P6n#GQu6V0dvQ_xP_E#DA!KcMp?Wv~BIH~sWf8OQb|KFwayS;l`x1Q)v z#m7ZYPoaGNVA`(KtcyL_q;oVhlh}CAdbyl2Yo>ABE|^6F-;Ob27N)9(KAJVs+1!zw zk&5*@-$Na(Lhr*yOv}tqg3{$g!lFZ{xD3MRCRR41;#V9!{GpC-6RX;@23$GKGN8@zKrxV#1^T#&7w;E24PQ^Mi(IKq>!8f%~dXjHVP8j zpj+~?n?>s0wbH%1za~u-lp7@D5G6v$a;UeL(%dMvD{vSTo*@Q?@pG%E*SiiMJz)t7 Qy2o;pa!cc)Xi@mdAMf0n^Bm>EM$kEIg34#Z=L(Lv{QeWUXzT$>tAsYxqeG;@Znc1B}eYPp!z zONQF5woa7ITvpxF72BbXSyrw`)$P1KnOBc>WD}hy^y6@(M;kW_S!-%i8!X#~US7E6 zk4u#r0PxiU%n>R8_ZaUJt^s()_H)KpjIS9#Fn(eTN+M2(aU0`y#(j)Qfd^rXiKC1K zMw{^>;}yo+jB|`n7@s;f0xgYy>7EAQ+zD@7co+B~HAw-?lSPJ)zkbS|MHql@PEa`< z|IBPNa(-l2JTD*FK6uOadw1Ut%L|v42a3}b9{<<)dj5ZW&X;goliJ>%DVF<^mR&N= zwx<$k>&47upIImw_LOCxa`x7ruN$$gleV76ccE*C4AXg8zp14=8q<=g^l)0k!-h6o z$mGgd17M&H3(yUH!USon6N;#zFcJf!DUgDwID?TlGb3_8J`0jwxGNN1{fgI?D(!mq zdM0&iR+$-Ss7N{>&hh*ZduVLtdrg#aPqTcHEyp^f{CoHtO}>kK;K?$YYR z*kX}P;1cduc2Xb|F#=3>#5G0M0HW&6E+=x99t#5^jM)6@{IKC9>%>;SS0#5rxY1wC N6}n?BxP78vzX3yptd{@) diff --git a/Objects/system_stm32f10x.d b/Objects/system_stm32f10x.d index c11e92c..7b80ce1 100644 --- a/Objects/system_stm32f10x.d +++ b/Objects/system_stm32f10x.d @@ -1,9 +1,9 @@ -.\objects\system_stm32f10x.o: RTE\Device\STM32F103RB\system_stm32f10x.c -.\objects\system_stm32f10x.o: C:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include\stm32f10x.h -.\objects\system_stm32f10x.o: .\RTE\_Simul_\RTE_Components.h -.\objects\system_stm32f10x.o: C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\core_cm3.h -.\objects\system_stm32f10x.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h -.\objects\system_stm32f10x.o: C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\cmsis_version.h -.\objects\system_stm32f10x.o: C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\cmsis_compiler.h -.\objects\system_stm32f10x.o: C:\Programdata\Keil\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\cmsis_armcc.h -.\objects\system_stm32f10x.o: C:\Programdata\Keil\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include\system_stm32f10x.h +./objects/system_stm32f10x.o: RTE\Device\STM32F103RB\system_stm32f10x.c \ + C:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include\stm32f10x.h \ + RTE\_Simul_\RTE_Components.h \ + C:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include\core_cm3.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \ + C:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include\cmsis_version.h \ + C:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include\cmsis_compiler.h \ + C:\Users\alzyo\AppData\Local\Arm\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include\cmsis_armclang.h \ + C:\Users\alzyo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include\system_stm32f10x.h diff --git a/Objects/system_stm32f10x.o b/Objects/system_stm32f10x.o index 1c770032b564f79e022e9c371c77922a26fba293..43a6d4ad46abbd4bdea10de6002bfd191b6cdced 100644 GIT binary patch literal 5916 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

        {?JfcR*kv=H6M30oCd{FR- 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 -------------------- + +#ifndef __RTE_DEVICE_H +#define __RTE_DEVICE_H + + +#define GPIO_PORT(num) \ + ((num == 0) ? GPIOA : \ + (num == 1) ? GPIOB : \ + (num == 2) ? GPIOC : \ + (num == 3) ? GPIOD : \ + (num == 4) ? GPIOE : \ + (num == 5) ? GPIOF : \ + (num == 6) ? GPIOG : \ + NULL) + + +// Clock Configuration +// High-speed Internal Clock <1-999999999> +#define RTE_HSI 8000000 +// High-speed External Clock <1-999999999> +#define RTE_HSE 25000000 +// System Clock <1-999999999> +#define RTE_SYSCLK 72000000 +// HCLK Clock <1-999999999> +#define RTE_HCLK 72000000 +// APB1 Clock <1-999999999> +#define RTE_PCLK1 36000000 +// APB2 Clock <1-999999999> +#define RTE_PCLK2 72000000 +// ADC Clock <1-999999999> +#define RTE_ADCCLK 36000000 +// USB Clock +#define RTE_USBCLK 48000000 +// + + +// USART1 (Universal synchronous asynchronous receiver transmitter) +// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART +#define RTE_USART1 0 + +// USART1_TX Pin <0=>Not Used <1=>PA9 +#define RTE_USART1_TX_PORT_ID_DEF 0 +#if (RTE_USART1_TX_PORT_ID_DEF == 0) +#define RTE_USART1_TX_DEF 0 +#elif (RTE_USART1_TX_PORT_ID_DEF == 1) +#define RTE_USART1_TX_DEF 1 +#define RTE_USART1_TX_PORT_DEF GPIOA +#define RTE_USART1_TX_BIT_DEF 9 +#else +#error "Invalid USART1_TX Pin Configuration!" +#endif + +// USART1_RX Pin <0=>Not Used <1=>PA10 +#define RTE_USART1_RX_PORT_ID_DEF 0 +#if (RTE_USART1_RX_PORT_ID_DEF == 0) +#define RTE_USART1_RX_DEF 0 +#elif (RTE_USART1_RX_PORT_ID_DEF == 1) +#define RTE_USART1_RX_DEF 1 +#define RTE_USART1_RX_PORT_DEF GPIOA +#define RTE_USART1_RX_BIT_DEF 10 +#else +#error "Invalid USART1_RX Pin Configuration!" +#endif + +// USART1_CK Pin <0=>Not Used <1=>PA8 +#define RTE_USART1_CK_PORT_ID_DEF 0 +#if (RTE_USART1_CK_PORT_ID_DEF == 0) +#define RTE_USART1_CK 0 +#elif (RTE_USART1_CK_PORT_ID_DEF == 1) +#define RTE_USART1_CK 1 +#define RTE_USART1_CK_PORT_DEF GPIOA +#define RTE_USART1_CK_BIT_DEF 8 +#else +#error "Invalid USART1_CK Pin Configuration!" +#endif + +// USART1_CTS Pin <0=>Not Used <1=>PA11 +#define RTE_USART1_CTS_PORT_ID_DEF 0 +#if (RTE_USART1_CTS_PORT_ID_DEF == 0) +#define RTE_USART1_CTS 0 +#elif (RTE_USART1_CTS_PORT_ID_DEF == 1) +#define RTE_USART1_CTS 1 +#define RTE_USART1_CTS_PORT_DEF GPIOA +#define RTE_USART1_CTS_BIT_DEF 11 +#else +#error "Invalid USART1_CTS Pin Configuration!" +#endif + +// USART1_RTS Pin <0=>Not Used <1=>PA12 +#define RTE_USART1_RTS_PORT_ID_DEF 0 +#if (RTE_USART1_RTS_PORT_ID_DEF == 0) +#define RTE_USART1_RTS 0 +#elif (RTE_USART1_RTS_PORT_ID_DEF == 1) +#define RTE_USART1_RTS 1 +#define RTE_USART1_RTS_PORT_DEF GPIOA +#define RTE_USART1_RTS_BIT_DEF 12 +#else +#error "Invalid USART1_RTS Pin Configuration!" +#endif + +// USART1 Pin Remap +// Enable USART1 Pin Remapping +#define RTE_USART1_REMAP_FULL 0 + +// USART1_TX Pin <0=>Not Used <1=>PB6 +#define RTE_USART1_TX_PORT_ID_FULL 0 +#if (RTE_USART1_TX_PORT_ID_FULL == 0) +#define RTE_USART1_TX_FULL 0 +#elif (RTE_USART1_TX_PORT_ID_FULL == 1) +#define RTE_USART1_TX_FULL 1 +#define RTE_USART1_TX_PORT_FULL GPIOB +#define RTE_USART1_TX_BIT_FULL 6 +#else +#error "Invalid USART1_TX Pin Configuration!" +#endif + +// USART1_RX Pin <0=>Not Used <1=>PB7 +#define RTE_USART1_RX_PORT_ID_FULL 0 +#if (RTE_USART1_RX_PORT_ID_FULL == 0) +#define RTE_USART1_RX_FULL 0 +#elif (RTE_USART1_RX_PORT_ID_FULL == 1) +#define RTE_USART1_RX_FULL 1 +#define RTE_USART1_RX_PORT_FULL GPIOB +#define RTE_USART1_RX_BIT_FULL 7 +#else +#error "Invalid USART1_RX Pin Configuration!" +#endif +// + +#if (RTE_USART1_REMAP_FULL) +#define RTE_USART1_AF_REMAP AFIO_USART1_REMAP +#define RTE_USART1_TX RTE_USART1_TX_FULL +#define RTE_USART1_TX_PORT RTE_USART1_TX_PORT_FULL +#define RTE_USART1_TX_BIT RTE_USART1_TX_BIT_FULL +#define RTE_USART1_RX RTE_USART1_RX_FULL +#define RTE_USART1_RX_PORT RTE_USART1_RX_PORT_FULL +#define RTE_USART1_RX_BIT RTE_USART1_RX_BIT_FULL +#define RTE_USART1_CK_PORT RTE_USART1_CK_PORT_DEF +#define RTE_USART1_CK_BIT RTE_USART1_CK_BIT_DEF +#define RTE_USART1_CTS_PORT RTE_USART1_CTS_PORT_DEF +#define RTE_USART1_CTS_BIT RTE_USART1_CTS_BIT_DEF +#define RTE_USART1_RTS_PORT RTE_USART1_RTS_PORT_DEF +#define RTE_USART1_RTS_BIT RTE_USART1_RTS_BIT_DEF +#else +#define RTE_USART1_AF_REMAP AFIO_USART1_NO_REMAP +#define RTE_USART1_TX RTE_USART1_TX_DEF +#define RTE_USART1_TX_PORT RTE_USART1_TX_PORT_DEF +#define RTE_USART1_TX_BIT RTE_USART1_TX_BIT_DEF +#define RTE_USART1_RX RTE_USART1_RX_DEF +#define RTE_USART1_RX_PORT RTE_USART1_RX_PORT_DEF +#define RTE_USART1_RX_BIT RTE_USART1_RX_BIT_DEF +#define RTE_USART1_CK_PORT RTE_USART1_CK_PORT_DEF +#define RTE_USART1_CK_BIT RTE_USART1_CK_BIT_DEF +#define RTE_USART1_CTS_PORT RTE_USART1_CTS_PORT_DEF +#define RTE_USART1_CTS_BIT RTE_USART1_CTS_BIT_DEF +#define RTE_USART1_RTS_PORT RTE_USART1_RTS_PORT_DEF +#define RTE_USART1_RTS_BIT RTE_USART1_RTS_BIT_DEF +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <5=>5 +// Selects DMA Channel (only Channel 5 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Set DMA Channel priority +// +#define RTE_USART1_RX_DMA 0 +#define RTE_USART1_RX_DMA_NUMBER 1 +#define RTE_USART1_RX_DMA_CHANNEL 5 +#define RTE_USART1_RX_DMA_PRIORITY 0 +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <4=>4 +// Selects DMA Channel (only Channel 4 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Set DMA Channel priority +// +#define RTE_USART1_TX_DMA 0 +#define RTE_USART1_TX_DMA_NUMBER 1 +#define RTE_USART1_TX_DMA_CHANNEL 4 +#define RTE_USART1_TX_DMA_PRIORITY 0 +// + + +// USART2 (Universal synchronous asynchronous receiver transmitter) +// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART +#define RTE_USART2 0 + +// USART2_TX Pin <0=>Not Used <1=>PA2 +#define RTE_USART2_TX_PORT_ID_DEF 0 +#if (RTE_USART2_TX_PORT_ID_DEF == 0) +#define RTE_USART2_TX_DEF 0 +#elif (RTE_USART2_TX_PORT_ID_DEF == 1) +#define RTE_USART2_TX_DEF 1 +#define RTE_USART2_TX_PORT_DEF GPIOA +#define RTE_USART2_TX_BIT_DEF 2 +#else +#error "Invalid USART2_TX Pin Configuration!" +#endif + +// USART2_RX Pin <0=>Not Used <1=>PA3 +#define RTE_USART2_RX_PORT_ID_DEF 0 +#if (RTE_USART2_RX_PORT_ID_DEF == 0) +#define RTE_USART2_RX_DEF 0 +#elif (RTE_USART2_RX_PORT_ID_DEF == 1) +#define RTE_USART2_RX_DEF 1 +#define RTE_USART2_RX_PORT_DEF GPIOA +#define RTE_USART2_RX_BIT_DEF 3 +#else +#error "Invalid USART2_RX Pin Configuration!" +#endif + +// USART2_CK Pin <0=>Not Used <1=>PA4 +#define RTE_USART2_CK_PORT_ID_DEF 0 +#if (RTE_USART2_CK_PORT_ID_DEF == 0) +#define RTE_USART2_CK_DEF 0 +#elif (RTE_USART2_CK_PORT_ID_DEF == 1) +#define RTE_USART2_CK_DEF 1 +#define RTE_USART2_CK_PORT_DEF GPIOA +#define RTE_USART2_CK_BIT_DEF 4 +#else +#error "Invalid USART2_CK Pin Configuration!" +#endif + +// USART2_CTS Pin <0=>Not Used <1=>PA0 +#define RTE_USART2_CTS_PORT_ID_DEF 0 +#if (RTE_USART2_CTS_PORT_ID_DEF == 0) +#define RTE_USART2_CTS_DEF 0 +#elif (RTE_USART2_CTS_PORT_ID_DEF == 1) +#define RTE_USART2_CTS_DEF 1 +#define RTE_USART2_CTS_PORT_DEF GPIOA +#define RTE_USART2_CTS_BIT_DEF 0 +#else +#error "Invalid USART2_CTS Pin Configuration!" +#endif + +// USART2_RTS Pin <0=>Not Used <1=>PA1 +#define RTE_USART2_RTS_PORT_ID_DEF 0 +#if (RTE_USART2_RTS_PORT_ID_DEF == 0) +#define RTE_USART2_RTS_DEF 0 +#elif (RTE_USART2_RTS_PORT_ID_DEF == 1) +#define RTE_USART2_RTS_DEF 1 +#define RTE_USART2_RTS_PORT_DEF GPIOA +#define RTE_USART2_RTS_BIT_DEF 1 +#else +#error "Invalid USART2_RTS Pin Configuration!" +#endif + +// USART2 Pin Remap +// Enable USART2 Pin Remapping +#define RTE_USART2_REMAP_FULL 0 + +// USART2_TX Pin <0=>Not Used <1=>PD5 +#define RTE_USART2_TX_PORT_ID_FULL 0 +#if (RTE_USART2_TX_PORT_ID_FULL == 0) +#define RTE_USART2_TX_FULL 0 +#elif (RTE_USART2_TX_PORT_ID_FULL == 1) +#define RTE_USART2_TX_FULL 1 +#define RTE_USART2_TX_PORT_FULL GPIOD +#define RTE_USART2_TX_BIT_FULL 5 +#else +#error "Invalid USART2_TX Pin Configuration!" +#endif + +// USART2_RX Pin <0=>Not Used <1=>PD6 +#define RTE_USART2_RX_PORT_ID_FULL 0 +#if (RTE_USART2_RX_PORT_ID_FULL == 0) +#define RTE_USART2_RX_FULL 0 +#elif (RTE_USART2_RX_PORT_ID_FULL == 1) +#define RTE_USART2_RX_FULL 1 +#define RTE_USART2_RX_PORT_FULL GPIOD +#define RTE_USART2_RX_BIT_FULL 6 +#else +#error "Invalid USART2_RX Pin Configuration!" +#endif + +// USART2_CK Pin <0=>Not Used <1=>PD7 +#define RTE_USART2_CK_PORT_ID_FULL 0 +#if (RTE_USART2_CK_PORT_ID_FULL == 0) +#define RTE_USART2_CK_FULL 0 +#elif (RTE_USART2_CK_PORT_ID_FULL == 1) +#define RTE_USART2_CK_FULL 1 +#define RTE_USART2_CK_PORT_FULL GPIOD +#define RTE_USART2_CK_BIT_FULL 7 +#else +#error "Invalid USART2_CK Pin Configuration!" +#endif + +// USART2_CTS Pin <0=>Not Used <1=>PD3 +#define RTE_USART2_CTS_PORT_ID_FULL 0 +#if (RTE_USART2_CTS_PORT_ID_FULL == 0) +#define RTE_USART2_CTS_FULL 0 +#elif (RTE_USART2_CTS_PORT_ID_FULL == 1) +#define RTE_USART2_CTS_FULL 1 +#define RTE_USART2_CTS_PORT_FULL GPIOD +#define RTE_USART2_CTS_BIT_FULL 3 +#else +#error "Invalid USART2_CTS Pin Configuration!" +#endif + +// USART2_RTS Pin <0=>Not Used <1=>PD4 +#define RTE_USART2_RTS_PORT_ID_FULL 0 +#if (RTE_USART2_RTS_PORT_ID_FULL == 0) +#define RTE_USART2_RTS_FULL 0 +#elif (RTE_USART2_RTS_PORT_ID_FULL == 1) +#define RTE_USART2_RTS_FULL 1 +#define RTE_USART2_RTS_PORT_FULL GPIOD +#define RTE_USART2_RTS_BIT_FULL 4 +#else +#error "Invalid USART2_RTS Pin Configuration!" +#endif +// + +#if (RTE_USART2_REMAP_FULL) +#define RTE_USART2_AF_REMAP AFIO_USART2_REMAP +#define RTE_USART2_TX RTE_USART2_TX_FULL +#define RTE_USART2_TX_PORT RTE_USART2_TX_PORT_FULL +#define RTE_USART2_TX_BIT RTE_USART2_TX_BIT_FULL +#define RTE_USART2_RX RTE_USART2_RX_FULL +#define RTE_USART2_RX_PORT RTE_USART2_RX_PORT_FULL +#define RTE_USART2_RX_BIT RTE_USART2_RX_BIT_FULL +#define RTE_USART2_CK RTE_USART2_CK_FULL +#define RTE_USART2_CK_PORT RTE_USART2_CK_PORT_FULL +#define RTE_USART2_CK_BIT RTE_USART2_CK_BIT_FULL +#define RTE_USART2_CTS RTE_USART2_CTS_FULL +#define RTE_USART2_CTS_PORT RTE_USART2_CTS_PORT_FULL +#define RTE_USART2_CTS_BIT RTE_USART2_CTS_BIT_FULL +#define RTE_USART2_RTS RTE_USART2_RTS_FULL +#define RTE_USART2_RTS_PORT RTE_USART2_RTS_PORT_FULL +#define RTE_USART2_RTS_BIT RTE_USART2_RTS_BIT_FULL +#else +#define RTE_USART2_AF_REMAP AFIO_USART2_NO_REMAP +#define RTE_USART2_TX RTE_USART2_TX_DEF +#define RTE_USART2_TX_PORT RTE_USART2_TX_PORT_DEF +#define RTE_USART2_TX_BIT RTE_USART2_TX_BIT_DEF +#define RTE_USART2_RX RTE_USART2_RX_DEF +#define RTE_USART2_RX_PORT RTE_USART2_RX_PORT_DEF +#define RTE_USART2_RX_BIT RTE_USART2_RX_BIT_DEF +#define RTE_USART2_CK RTE_USART2_CK_DEF +#define RTE_USART2_CK_PORT RTE_USART2_CK_PORT_DEF +#define RTE_USART2_CK_BIT RTE_USART2_CK_BIT_DEF +#define RTE_USART2_CTS RTE_USART2_CTS_DEF +#define RTE_USART2_CTS_PORT RTE_USART2_CTS_PORT_DEF +#define RTE_USART2_CTS_BIT RTE_USART2_CTS_BIT_DEF +#define RTE_USART2_RTS RTE_USART2_RTS_DEF +#define RTE_USART2_RTS_PORT RTE_USART2_RTS_PORT_DEF +#define RTE_USART2_RTS_BIT RTE_USART2_RTS_BIT_DEF +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <6=>6 +// Selects DMA Channel (only Channel 6 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Set DMA Channel priority +// +#define RTE_USART2_RX_DMA 0 +#define RTE_USART2_RX_DMA_NUMBER 1 +#define RTE_USART2_RX_DMA_CHANNEL 6 +#define RTE_USART2_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <7=>7 +// Selects DMA Channel (only Channel 7 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Set DMA Channel priority +// +#define RTE_USART2_TX_DMA 0 +#define RTE_USART2_TX_DMA_NUMBER 1 +#define RTE_USART2_TX_DMA_CHANNEL 7 +#define RTE_USART2_TX_DMA_PRIORITY 0 + +// + + +// USART3 (Universal synchronous asynchronous receiver transmitter) +// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART +#define RTE_USART3 0 + +// USART3_TX Pin <0=>Not Used <1=>PB10 +#define RTE_USART3_TX_PORT_ID_DEF 0 +#if (RTE_USART3_TX_PORT_ID_DEF == 0) +#define RTE_USART3_TX_DEF 0 +#elif (RTE_USART3_TX_PORT_ID_DEF == 1) +#define RTE_USART3_TX_DEF 1 +#define RTE_USART3_TX_PORT_DEF GPIOB +#define RTE_USART3_TX_BIT_DEF 10 +#else +#error "Invalid USART3_TX Pin Configuration!" +#endif + +// USART3_RX Pin <0=>Not Used <1=>PB11 +#define RTE_USART3_RX_PORT_ID_DEF 0 +#if (RTE_USART3_RX_PORT_ID_DEF == 0) +#define RTE_USART3_RX_DEF 0 +#elif (RTE_USART3_RX_PORT_ID_DEF == 1) +#define RTE_USART3_RX_DEF 1 +#define RTE_USART3_RX_PORT_DEF GPIOB +#define RTE_USART3_RX_BIT_DEF 11 +#else +#error "Invalid USART3_RX Pin Configuration!" +#endif + +// USART3_CK Pin <0=>Not Used <1=>PB12 +#define RTE_USART3_CK_PORT_ID_DEF 0 +#if (RTE_USART3_CK_PORT_ID_DEF == 0) +#define RTE_USART3_CK_DEF 0 +#elif (RTE_USART3_CK_PORT_ID_DEF == 1) +#define RTE_USART3_CK_DEF 1 +#define RTE_USART3_CK_PORT_DEF GPIOB +#define RTE_USART3_CK_BIT_DEF 12 +#else +#error "Invalid USART3_CK Pin Configuration!" +#endif + +// USART3_CTS Pin <0=>Not Used <1=>PB13 +#define RTE_USART3_CTS_PORT_ID_DEF 0 +#if (RTE_USART3_CTS_PORT_ID_DEF == 0) +#define RTE_USART3_CTS_DEF 0 +#elif (RTE_USART3_CTS_PORT_ID_DEF == 1) +#define RTE_USART3_CTS_DEF 1 +#define RTE_USART3_CTS_PORT_DEF GPIOB +#define RTE_USART3_CTS_BIT_DEF 13 +#else +#error "Invalid USART3_CTS Pin Configuration!" +#endif + +// USART3_RTS Pin <0=>Not Used <1=>PB14 +#define RTE_USART3_RTS_PORT_ID_DEF 0 +#if (RTE_USART3_RTS_PORT_ID_DEF == 0) +#define RTE_USART3_RTS_DEF 0 +#elif (RTE_USART3_RTS_PORT_ID_DEF == 1) +#define RTE_USART3_RTS_DEF 1 +#define RTE_USART3_RTS_PORT_DEF GPIOB +#define RTE_USART3_RTS_BIT_DEF 14 +#else +#error "Invalid USART3_RTS Pin Configuration!" +#endif + +// USART3 Partial Pin Remap +// Enable USART3 Partial Pin Remapping +#define RTE_USART3_REMAP_PARTIAL 0 + +// USART3_TX Pin <0=>Not Used <1=>PC10 +#define RTE_USART3_TX_PORT_ID_PARTIAL 0 +#if (RTE_USART3_TX_PORT_ID_PARTIAL == 0) +#define RTE_USART3_TX_PARTIAL 0 +#elif (RTE_USART3_TX_PORT_ID_PARTIAL == 1) +#define RTE_USART3_TX_PARTIAL 1 +#define RTE_USART3_TX_PORT_PARTIAL GPIOC +#define RTE_USART3_TX_BIT_PARTIAL 10 +#else +#error "Invalid USART3_TX Pin Configuration!" +#endif + +// USART3_RX Pin <0=>Not Used <1=>PC11 +#define RTE_USART3_RX_PORT_ID_PARTIAL 0 +#if (RTE_USART3_RX_PORT_ID_PARTIAL == 0) +#define RTE_USART3_RX_PARTIAL 0 +#elif (RTE_USART3_RX_PORT_ID_PARTIAL == 1) +#define RTE_USART3_RX_PARTIAL 1 +#define RTE_USART3_RX_PORT_PARTIAL GPIOC +#define RTE_USART3_RX_BIT_PARTIAL 11 +#else +#error "Invalid USART3_RX Pin Configuration!" +#endif + +// USART3_CK Pin <0=>Not Used <1=>PC12 +#define RTE_USART3_CK_PORT_ID_PARTIAL 0 +#if (RTE_USART3_CK_PORT_ID_PARTIAL == 0) +#define RTE_USART3_CK_PARTIAL 0 +#elif (RTE_USART3_CK_PORT_ID_PARTIAL == 1) +#define RTE_USART3_CK_PARTIAL 1 +#define RTE_USART3_CK_PORT_PARTIAL GPIOC +#define RTE_USART3_CK_BIT_PARTIAL 12 +#else +#error "Invalid USART3_CK Pin Configuration!" +#endif +// + +// USART3 Full Pin Remap +// Enable USART3 Full Pin Remapping +#define RTE_USART3_REMAP_FULL 0 + +// USART3_TX Pin <0=>Not Used <1=>PD8 +#define RTE_USART3_TX_PORT_ID_FULL 0 +#if (RTE_USART3_TX_PORT_ID_FULL == 0) +#define RTE_USART3_TX_FULL 0 +#elif (RTE_USART3_TX_PORT_ID_FULL == 1) +#define RTE_USART3_TX_FULL 1 +#define RTE_USART3_TX_PORT_FULL GPIOD +#define RTE_USART3_TX_BIT_FULL 8 +#else +#error "Invalid USART3_TX Pin Configuration!" +#endif + +// USART3_RX Pin <0=>Not Used <1=>PD9 +#define RTE_USART3_RX_PORT_ID_FULL 0 +#if (RTE_USART3_RX_PORT_ID_FULL == 0) +#define RTE_USART3_RX_FULL 0 +#elif (RTE_USART3_RX_PORT_ID_FULL == 1) +#define RTE_USART3_RX_FULL 1 +#define RTE_USART3_RX_PORT_FULL GPIOD +#define RTE_USART3_RX_BIT_FULL 9 +#else +#error "Invalid USART3_RX Pin Configuration!" +#endif + +// USART3_CK Pin <0=>Not Used <1=>PD10 +#define RTE_USART3_CK_PORT_ID_FULL 0 +#if (RTE_USART3_CK_PORT_ID_FULL == 0) +#define RTE_USART3_CK_FULL 0 +#elif (RTE_USART3_CK_PORT_ID_FULL == 1) +#define RTE_USART3_CK_FULL 1 +#define RTE_USART3_CK_PORT_FULL GPIOD +#define RTE_USART3_CK_BIT_FULL 10 +#else +#error "Invalid USART3_CK Pin Configuration!" +#endif + +// USART3_CTS Pin <0=>Not Used <1=>PD11 +#define RTE_USART3_CTS_PORT_ID_FULL 0 +#if (RTE_USART3_CTS_PORT_ID_FULL == 0) +#define RTE_USART3_CTS_FULL 0 +#elif (RTE_USART3_CTS_PORT_ID_FULL == 1) +#define RTE_USART3_CTS_FULL 1 +#define RTE_USART3_CTS_PORT_FULL GPIOD +#define RTE_USART3_CTS_BIT_FULL 11 +#else +#error "Invalid USART3_CTS Pin Configuration!" +#endif + +// USART3_RTS Pin <0=>Not Used <1=>PD12 +#define RTE_USART3_RTS_PORT_ID_FULL 0 +#if (RTE_USART3_RTS_PORT_ID_FULL == 0) +#define RTE_USART3_RTS_FULL 0 +#elif (RTE_USART3_RTS_PORT_ID_FULL == 1) +#define RTE_USART3_RTS_FULL 1 +#define RTE_USART3_RTS_PORT_FULL GPIOD +#define RTE_USART3_RTS_BIT_FULL 12 +#else +#error "Invalid USART3_RTS Pin Configuration!" +#endif +// + +#if ((RTE_USART3_REMAP_PARTIAL == 1) && (RTE_USART3_REMAP_FULL == 1)) +#error "Invalid USART3 Pin Remap Configuration!" +#endif + +#if (RTE_USART3_REMAP_FULL) +#define RTE_USART3_AF_REMAP AFIO_USART3_REMAP_FULL +#define RTE_USART3_TX RTE_USART3_TX_FULL +#define RTE_USART3_TX_PORT RTE_USART3_TX_PORT_FULL +#define RTE_USART3_TX_BIT RTE_USART3_TX_BIT_FULL +#define RTE_USART3_RX RTE_USART3_RX_FULL +#define RTE_USART3_RX_PORT RTE_USART3_RX_PORT_FULL +#define RTE_USART3_RX_BIT RTE_USART3_RX_BIT_FULL +#define RTE_USART3_CK RTE_USART3_CK_FULL +#define RTE_USART3_CK_PORT RTE_USART3_CK_PORT_FULL +#define RTE_USART3_CK_BIT RTE_USART3_CK_BIT_FULL +#define RTE_USART3_CTS RTE_USART3_CTS_FULL +#define RTE_USART3_CTS_PORT RTE_USART3_CTS_PORT_FULL +#define RTE_USART3_CTS_BIT RTE_USART3_CTS_BIT_FULL +#define RTE_USART3_RTS RTE_USART3_RTS_FULL +#define RTE_USART3_RTS_PORT RTE_USART3_RTS_PORT_FULL +#define RTE_USART3_RTS_BIT RTE_USART3_RTS_BIT_FULL +#elif (RTE_USART3_REMAP_PARTIAL) +#define RTE_USART3_AF_REMAP AFIO_USART3_REMAP_PARTIAL +#define RTE_USART3_TX RTE_USART3_TX_PARTIAL +#define RTE_USART3_TX_PORT RTE_USART3_TX_PORT_PARTIAL +#define RTE_USART3_TX_BIT RTE_USART3_TX_BIT_PARTIAL +#define RTE_USART3_RX RTE_USART3_RX_PARTIAL +#define RTE_USART3_RX_PORT RTE_USART3_RX_PORT_PARTIAL +#define RTE_USART3_RX_BIT RTE_USART3_RX_BIT_PARTIAL +#define RTE_USART3_CK RTE_USART3_CK_PARTIAL +#define RTE_USART3_CK_PORT RTE_USART3_CK_PORT_PARTIAL +#define RTE_USART3_CK_BIT RTE_USART3_CK_BIT_PARTIAL +#define RTE_USART3_CTS RTE_USART3_CTS_DEF +#define RTE_USART3_CTS_PORT RTE_USART3_CTS_PORT_DEF +#define RTE_USART3_CTS_BIT RTE_USART3_CTS_BIT_DEF +#define RTE_USART3_RTS RTE_USART3_RTS_DEF +#define RTE_USART3_RTS_PORT RTE_USART3_RTS_PORT_DEF +#define RTE_USART3_RTS_BIT RTE_USART3_RTS_BIT_DEF +#else +#define RTE_USART3_AF_REMAP AFIO_USART3_NO_REMAP +#define RTE_USART3_TX RTE_USART3_TX_DEF +#define RTE_USART3_TX_PORT RTE_USART3_TX_PORT_DEF +#define RTE_USART3_TX_BIT RTE_USART3_TX_BIT_DEF +#define RTE_USART3_RX RTE_USART3_RX_DEF +#define RTE_USART3_RX_PORT RTE_USART3_RX_PORT_DEF +#define RTE_USART3_RX_BIT RTE_USART3_RX_BIT_DEF +#define RTE_USART3_CK RTE_USART3_CK_DEF +#define RTE_USART3_CK_PORT RTE_USART3_CK_PORT_DEF +#define RTE_USART3_CK_BIT RTE_USART3_CK_BIT_DEF +#define RTE_USART3_CTS RTE_USART3_CTS_DEF +#define RTE_USART3_CTS_PORT RTE_USART3_CTS_PORT_DEF +#define RTE_USART3_CTS_BIT RTE_USART3_CTS_BIT_DEF +#define RTE_USART3_RTS RTE_USART3_RTS_DEF +#define RTE_USART3_RTS_PORT RTE_USART3_RTS_PORT_DEF +#define RTE_USART3_RTS_BIT RTE_USART3_RTS_BIT_DEF +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <3=>3 +// Selects DMA Channel (only Channel 3 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Sets DMA Channel priority +// +#define RTE_USART3_RX_DMA 0 +#define RTE_USART3_RX_DMA_NUMBER 1 +#define RTE_USART3_RX_DMA_CHANNEL 3 +#define RTE_USART3_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <2=>2 +// Selects DMA Channel (only Channel 2 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Sets DMA Channel priority +// +#define RTE_USART3_TX_DMA 0 +#define RTE_USART3_TX_DMA_NUMBER 1 +#define RTE_USART3_TX_DMA_CHANNEL 2 +#define RTE_USART3_TX_DMA_PRIORITY 0 + +// + + +// UART4 (Universal asynchronous receiver transmitter) +// Configuration settings for Driver_USART4 in component ::CMSIS Driver:USART +#define RTE_UART4 0 +#define RTE_UART4_AF_REMAP AFIO_UNAVAILABLE_REMAP + +// UART4_TX Pin <0=>Not Used <1=>PC10 +#define RTE_UART4_TX_ID 0 +#if (RTE_UART4_TX_ID == 0) +#define RTE_UART4_TX 0 +#elif (RTE_UART4_TX_ID == 1) +#define RTE_UART4_TX 1 +#define RTE_UART4_TX_PORT GPIOC +#define RTE_UART4_TX_BIT 10 +#else +#error "Invalid UART4_TX Pin Configuration!" +#endif + +// UART4_RX Pin <0=>Not Used <1=>PC11 +#define RTE_UART4_RX_ID 0 +#if (RTE_UART4_RX_ID == 0) +#define RTE_UART4_RX 0 +#elif (RTE_UART4_RX_ID == 1) +#define RTE_UART4_RX 1 +#define RTE_UART4_RX_PORT GPIOC +#define RTE_UART4_RX_BIT 11 +#else +#error "Invalid UART4_RX Pin Configuration!" +#endif + + +// DMA Rx +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <3=>3 +// Selects DMA Channel (only Channel 3 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Sets DMA Channel priority +// +#define RTE_UART4_RX_DMA 0 +#define RTE_UART4_RX_DMA_NUMBER 2 +#define RTE_UART4_RX_DMA_CHANNEL 3 +#define RTE_UART4_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <5=>5 +// Selects DMA Channel (only Channel 5 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Sets DMA Channel priority +// +#define RTE_UART4_TX_DMA 0 +#define RTE_UART4_TX_DMA_NUMBER 2 +#define RTE_UART4_TX_DMA_CHANNEL 5 +#define RTE_UART4_TX_DMA_PRIORITY 0 + +// + + +// UART5 (Universal asynchronous receiver transmitter) +// Configuration settings for Driver_USART5 in component ::CMSIS Driver:USART +#define RTE_UART5 0 +#define RTE_UART5_AF_REMAP AFIO_UNAVAILABLE_REMAP + +// UART5_TX Pin <0=>Not Used <1=>PC12 +#define RTE_UART5_TX_ID 0 +#if (RTE_UART5_TX_ID == 0) +#define RTE_UART5_TX 0 +#elif (RTE_UART5_TX_ID == 1) +#define RTE_UART5_TX 1 +#define RTE_UART5_TX_PORT GPIOC +#define RTE_UART5_TX_BIT 12 +#else +#error "Invalid UART5_TX Pin Configuration!" +#endif + +// UART5_RX Pin <0=>Not Used <1=>PD2 +#define RTE_UART5_RX_ID 0 +#if (RTE_UART5_RX_ID == 0) +#define RTE_UART5_RX 0 +#elif (RTE_UART5_RX_ID == 1) +#define RTE_UART5_RX 1 +#define RTE_UART5_RX_PORT GPIOD +#define RTE_UART5_RX_BIT 2 +#else +#error "Invalid UART5_RX Pin Configuration!" +#endif +// + + +// I2C1 (Inter-integrated Circuit Interface 1) +// Configuration settings for Driver_I2C1 in component ::CMSIS Driver:I2C +#define RTE_I2C1 0 + +// I2C1_SCL Pin <0=>PB6 +#define RTE_I2C1_SCL_PORT_ID_DEF 0 +#if (RTE_I2C1_SCL_PORT_ID_DEF == 0) +#define RTE_I2C1_SCL_PORT_DEF GPIOB +#define RTE_I2C1_SCL_BIT_DEF 6 +#else +#error "Invalid I2C1_SCL Pin Configuration!" +#endif + +// I2C1_SDA Pin <0=>PB7 +#define RTE_I2C1_SDA_PORT_ID_DEF 0 +#if (RTE_I2C1_SDA_PORT_ID_DEF == 0) +#define RTE_I2C1_SDA_PORT_DEF GPIOB +#define RTE_I2C1_SDA_BIT_DEF 7 +#else +#error "Invalid I2C1_SCL Pin Configuration!" +#endif + +// I2C1 Pin Remap +// Enable I2C1 Pin Remapping +#define RTE_I2C1_REMAP_FULL 0 + +// I2C1_SCL Pin <0=>PB8 +#define RTE_I2C1_SCL_PORT_ID_FULL 0 +#if (RTE_I2C1_SCL_PORT_ID_FULL == 0) +#define RTE_I2C1_SCL_PORT_FULL GPIOB +#define RTE_I2C1_SCL_BIT_FULL 8 +#else +#error "Invalid I2C1_SCL Pin Configuration!" +#endif + +// I2C1_SDA Pin <0=>PB9 +#define RTE_I2C1_SDA_PORT_ID_FULL 0 +#if (RTE_I2C1_SDA_PORT_ID_FULL == 0) +#define RTE_I2C1_SDA_PORT_FULL GPIOB +#define RTE_I2C1_SDA_BIT_FULL 9 +#else +#error "Invalid I2C1_SCL Pin Configuration!" +#endif + +// + +#if (RTE_I2C1_REMAP_FULL) +#define RTE_I2C1_AF_REMAP AFIO_I2C1_REMAP +#define RTE_I2C1_SCL_PORT RTE_I2C1_SCL_PORT_FULL +#define RTE_I2C1_SCL_BIT RTE_I2C1_SCL_BIT_FULL +#define RTE_I2C1_SDA_PORT RTE_I2C1_SDA_PORT_FULL +#define RTE_I2C1_SDA_BIT RTE_I2C1_SDA_BIT_FULL +#else +#define RTE_I2C1_AF_REMAP AFIO_I2C1_NO_REMAP +#define RTE_I2C1_SCL_PORT RTE_I2C1_SCL_PORT_DEF +#define RTE_I2C1_SCL_BIT RTE_I2C1_SCL_BIT_DEF +#define RTE_I2C1_SDA_PORT RTE_I2C1_SDA_PORT_DEF +#define RTE_I2C1_SDA_BIT RTE_I2C1_SDA_BIT_DEF +#endif + + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <7=>7 +// Selects DMA Channel (only Channel 7 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_I2C1_RX_DMA 0 +#define RTE_I2C1_RX_DMA_NUMBER 1 +#define RTE_I2C1_RX_DMA_CHANNEL 7 +#define RTE_I2C1_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <6=>6 +// Selects DMA Channel (only Channel 6 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_I2C1_TX_DMA 0 +#define RTE_I2C1_TX_DMA_NUMBER 1 +#define RTE_I2C1_TX_DMA_CHANNEL 6 +#define RTE_I2C1_TX_DMA_PRIORITY 0 + +// + + +// I2C2 (Inter-integrated Circuit Interface 2) +// Configuration settings for Driver_I2C2 in component ::CMSIS Driver:I2C +#define RTE_I2C2 0 +#define RTE_I2C2_AF_REMAP AFIO_UNAVAILABLE_REMAP + +// I2C2_SCL Pin <0=>PB10 +#define RTE_I2C2_SCL_PORT_ID 0 +#if (RTE_I2C2_SCL_PORT_ID == 0) +#define RTE_I2C2_SCL_PORT GPIOB +#define RTE_I2C2_SCL_BIT 10 +#else +#error "Invalid I2C2_SCL Pin Configuration!" +#endif + +// I2C2_SDA Pin <0=>PB11 +#define RTE_I2C2_SDA_PORT_ID 0 +#if (RTE_I2C2_SDA_PORT_ID == 0) +#define RTE_I2C2_SDA_PORT GPIOB +#define RTE_I2C2_SDA_BIT 11 +#else +#error "Invalid I2C2_SCL Pin Configuration!" +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <5=>5 +// Selects DMA Channel (only Channel 5 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_I2C2_RX_DMA 1 +#define RTE_I2C2_RX_DMA_NUMBER 1 +#define RTE_I2C2_RX_DMA_CHANNEL 5 +#define RTE_I2C2_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <4=>4 +// Selects DMA Channel (only Channel 4 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_I2C2_TX_DMA 1 +#define RTE_I2C2_TX_DMA_NUMBER 1 +#define RTE_I2C2_TX_DMA_CHANNEL 4 +#define RTE_I2C2_TX_DMA_PRIORITY 0 + +// + + +// SPI1 (Serial Peripheral Interface 1) [Driver_SPI1] +// Configuration settings for Driver_SPI1 in component ::CMSIS Driver:SPI +#define RTE_SPI1 0 + +// SPI1_NSS Pin +// Configure Pin if exists +// GPIO Pxy (x = A..G, y = 0..15) +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SPI1_NSS_PIN 1 +#define RTE_SPI1_NSS_PORT GPIO_PORT(0) +#define RTE_SPI1_NSS_BIT 4 + +// SPI1_SCK Pin <0=>PA5 +#define RTE_SPI1_SCK_PORT_ID_DEF 0 +#if (RTE_SPI1_SCK_PORT_ID_DEF == 0) +#define RTE_SPI1_SCK_PORT_DEF GPIOA +#define RTE_SPI1_SCK_BIT_DEF 5 +#else +#error "Invalid SPI1_SCK Pin Configuration!" +#endif + +// SPI1_MISO Pin <0=>Not Used <1=>PA6 +#define RTE_SPI1_MISO_PORT_ID_DEF 0 +#if (RTE_SPI1_MISO_PORT_ID_DEF == 0) +#define RTE_SPI1_MISO_DEF 0 +#elif (RTE_SPI1_MISO_PORT_ID_DEF == 1) +#define RTE_SPI1_MISO_DEF 1 +#define RTE_SPI1_MISO_PORT_DEF GPIOA +#define RTE_SPI1_MISO_BIT_DEF 6 +#else +#error "Invalid SPI1_MISO Pin Configuration!" +#endif + +// SPI1_MOSI Pin <0=>Not Used <1=>PA7 +#define RTE_SPI1_MOSI_PORT_ID_DEF 0 +#if (RTE_SPI1_MOSI_PORT_ID_DEF == 0) +#define RTE_SPI1_MOSI_DEF 0 +#elif (RTE_SPI1_MOSI_PORT_ID_DEF == 1) +#define RTE_SPI1_MOSI_DEF 1 +#define RTE_SPI1_MOSI_PORT_DEF GPIOA +#define RTE_SPI1_MOSI_BIT_DEF 7 +#else +#error "Invalid SPI1_MISO Pin Configuration!" +#endif + +// SPI1 Pin Remap +// Enable SPI1 Pin Remapping. +#define RTE_SPI1_REMAP 0 + +// SPI1_SCK Pin <0=>PB3 +#define RTE_SPI1_SCK_PORT_ID_FULL 0 +#if (RTE_SPI1_SCK_PORT_ID_FULL == 0) +#define RTE_SPI1_SCK_PORT_FULL GPIOB +#define RTE_SPI1_SCK_BIT_FULL 3 +#else +#error "Invalid SPI1_SCK Pin Configuration!" +#endif + +// SPI1_MISO Pin <0=>Not Used <1=>PB4 +#define RTE_SPI1_MISO_PORT_ID_FULL 0 +#if (RTE_SPI1_MISO_PORT_ID_FULL == 0) +#define RTE_SPI1_MISO_FULL 0 +#elif (RTE_SPI1_MISO_PORT_ID_FULL == 1) +#define RTE_SPI1_MISO_FULL 1 +#define RTE_SPI1_MISO_PORT_FULL GPIOB +#define RTE_SPI1_MISO_BIT_FULL 4 +#else +#error "Invalid SPI1_MISO Pin Configuration!" +#endif +// SPI1_MOSI Pin <0=>Not Used <1=>PB5 +#define RTE_SPI1_MOSI_PORT_ID_FULL 0 +#if (RTE_SPI1_MOSI_PORT_ID_FULL == 0) +#define RTE_SPI1_MOSI_FULL 0 +#elif (RTE_SPI1_MOSI_PORT_ID_FULL == 1) +#define RTE_SPI1_MOSI_FULL 1 +#define RTE_SPI1_MOSI_PORT_FULL GPIOB +#define RTE_SPI1_MOSI_BIT_FULL 5 +#else +#error "Invalid SPI1_MOSI Pin Configuration!" +#endif + +// + +#if (RTE_SPI1_REMAP) +#define RTE_SPI1_AF_REMAP AFIO_SPI1_REMAP +#define RTE_SPI1_SCK_PORT RTE_SPI1_SCK_PORT_FULL +#define RTE_SPI1_SCK_BIT RTE_SPI1_SCK_BIT_FULL +#define RTE_SPI1_MISO RTE_SPI1_MISO_FULL +#define RTE_SPI1_MISO_PORT RTE_SPI1_MISO_PORT_FULL +#define RTE_SPI1_MISO_BIT RTE_SPI1_MISO_BIT_FULL +#define RTE_SPI1_MOSI RTE_SPI1_MOSI_FULL +#define RTE_SPI1_MOSI_PORT RTE_SPI1_MOSI_PORT_FULL +#define RTE_SPI1_MOSI_BIT RTE_SPI1_MOSI_BIT_FULL +#else +#define RTE_SPI1_AF_REMAP AFIO_SPI1_NO_REMAP +#define RTE_SPI1_SCK_PORT RTE_SPI1_SCK_PORT_DEF +#define RTE_SPI1_SCK_BIT RTE_SPI1_SCK_BIT_DEF +#define RTE_SPI1_MISO RTE_SPI1_MISO_DEF +#define RTE_SPI1_MISO_PORT RTE_SPI1_MISO_PORT_DEF +#define RTE_SPI1_MISO_BIT RTE_SPI1_MISO_BIT_DEF +#define RTE_SPI1_MOSI RTE_SPI1_MOSI_DEF +#define RTE_SPI1_MOSI_PORT RTE_SPI1_MOSI_PORT_DEF +#define RTE_SPI1_MOSI_BIT RTE_SPI1_MOSI_BIT_DEF +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <2=>2 +// Selects DMA Channel (only Channel 2 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI1_RX_DMA 0 +#define RTE_SPI1_RX_DMA_NUMBER 1 +#define RTE_SPI1_RX_DMA_CHANNEL 2 +#define RTE_SPI1_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <3=>3 +// Selects DMA Channel (only Channel 3 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI1_TX_DMA 0 +#define RTE_SPI1_TX_DMA_NUMBER 1 +#define RTE_SPI1_TX_DMA_CHANNEL 3 +#define RTE_SPI1_TX_DMA_PRIORITY 0 + +// + + +// SPI2 (Serial Peripheral Interface 2) [Driver_SPI2] +// Configuration settings for Driver_SPI2 in component ::CMSIS Driver:SPI +#define RTE_SPI2 0 + +// SPI2_NSS Pin +// Configure Pin if exists +// GPIO Pxy (x = A..G, y = 0..15) +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SPI2_NSS_PIN 1 +#define RTE_SPI2_NSS_PORT GPIO_PORT(1) +#define RTE_SPI2_NSS_BIT 12 + +// SPI2_SCK Pin <0=>PB13 +#define RTE_SPI2_SCK_PORT_ID 0 +#if (RTE_SPI2_SCK_PORT_ID == 0) +#define RTE_SPI2_SCK_PORT GPIOB +#define RTE_SPI2_SCK_BIT 13 +#define RTE_SPI2_SCK_REMAP 0 +#else +#error "Invalid SPI2_SCK Pin Configuration!" +#endif + +// SPI2_MISO Pin <0=>Not Used <1=>PB14 +#define RTE_SPI2_MISO_PORT_ID 0 +#if (RTE_SPI2_MISO_PORT_ID == 0) +#define RTE_SPI2_MISO 0 +#elif (RTE_SPI2_MISO_PORT_ID == 1) +#define RTE_SPI2_MISO 1 +#define RTE_SPI2_MISO_PORT GPIOB +#define RTE_SPI2_MISO_BIT 14 +#define RTE_SPI2_MISO_REMAP 0 +#else +#error "Invalid SPI2_MISO Pin Configuration!" +#endif + +// SPI2_MOSI Pin <0=>Not Used <1=>PB15 +#define RTE_SPI2_MOSI_PORT_ID 0 +#if (RTE_SPI2_MOSI_PORT_ID == 0) +#define RTE_SPI2_MOSI 0 +#elif (RTE_SPI2_MOSI_PORT_ID == 1) +#define RTE_SPI2_MOSI 1 +#define RTE_SPI2_MOSI_PORT GPIOB +#define RTE_SPI2_MOSI_BIT 15 +#define RTE_SPI2_MOSI_REMAP 0 +#else +#error "Invalid SPI2_MISO Pin Configuration!" +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <4=>4 +// Selects DMA Channel (only Channel 4 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI2_RX_DMA 0 +#define RTE_SPI2_RX_DMA_NUMBER 1 +#define RTE_SPI2_RX_DMA_CHANNEL 4 +#define RTE_SPI2_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <5=>5 +// Selects DMA Channel (only Channel 5 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI2_TX_DMA 0 +#define RTE_SPI2_TX_DMA_NUMBER 1 +#define RTE_SPI2_TX_DMA_CHANNEL 5 +#define RTE_SPI2_TX_DMA_PRIORITY 0 + +// + + +// SPI3 (Serial Peripheral Interface 3) [Driver_SPI3] +// Configuration settings for Driver_SPI3 in component ::CMSIS Driver:SPI +#define RTE_SPI3 0 + +// SPI3_NSS Pin +// Configure Pin if exists +// GPIO Pxy (x = A..G, y = 0..15) +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SPI3_NSS_PIN 1 +#define RTE_SPI3_NSS_PORT GPIO_PORT(0) +#define RTE_SPI3_NSS_BIT 15 + +// SPI3_SCK Pin <0=>PB3 +#define RTE_SPI3_SCK_PORT_ID_DEF 0 +#if (RTE_SPI3_SCK_PORT_ID_DEF == 0) +#define RTE_SPI3_SCK_PORT_DEF GPIOB +#define RTE_SPI3_SCK_BIT_DEF 3 +#else +#error "Invalid SPI3_SCK Pin Configuration!" +#endif + +// SPI3_MISO Pin <0=>Not Used <1=>PB4 +#define RTE_SPI3_MISO_PORT_ID_DEF 0 +#if (RTE_SPI3_MISO_PORT_ID_DEF == 0) +#define RTE_SPI3_MISO_DEF 0 +#elif (RTE_SPI3_MISO_PORT_ID_DEF == 1) +#define RTE_SPI3_MISO_DEF 1 +#define RTE_SPI3_MISO_PORT_DEF GPIOB +#define RTE_SPI3_MISO_BIT_DEF 4 +#else +#error "Invalid SPI3_MISO Pin Configuration!" +#endif + +// SPI3_MOSI <0=>Not Used Pin <1=>PB5 +#define RTE_SPI3_MOSI_PORT_ID_DEF 0 +#if (RTE_SPI3_MOSI_PORT_ID_DEF == 0) +#define RTE_SPI3_MOSI_DEF 0 +#elif (RTE_SPI3_MOSI_PORT_ID_DEF == 1) +#define RTE_SPI3_MOSI_DEF 1 +#define RTE_SPI3_MOSI_PORT_DEF GPIOB +#define RTE_SPI3_MOSI_BIT_DEF 5 +#else +#error "Invalid SPI3_MOSI Pin Configuration!" +#endif + +// SPI3 Pin Remap +// Enable SPI3 Pin Remapping. +// SPI 3 Pin Remapping is available only in connectivity line devices! +#define RTE_SPI3_REMAP 0 + +// SPI3_SCK Pin <0=>PC10 +#define RTE_SPI3_SCK_PORT_ID_FULL 0 +#if (RTE_SPI3_SCK_PORT_ID_FULL == 0) +#define RTE_SPI3_SCK_PORT_FULL GPIOC +#define RTE_SPI3_SCK_BIT_FULL 10 +#else +#error "Invalid SPI3_SCK Pin Configuration!" +#endif + +// SPI3_MISO Pin <0=>Not Used <1=>PC11 +#define RTE_SPI3_MISO_PORT_ID_FULL 0 +#if (RTE_SPI3_MISO_PORT_ID_FULL == 0) +#define RTE_SPI3_MISO_FULL 0 +#elif (RTE_SPI3_MISO_PORT_ID_FULL == 1) +#define RTE_SPI3_MISO_FULL 1 +#define RTE_SPI3_MISO_PORT_FULL GPIOC +#define RTE_SPI3_MISO_BIT_FULL 11 +#else +#error "Invalid SPI3_MISO Pin Configuration!" +#endif +// SPI3_MOSI Pin <0=>Not Used <1=>PC12 +#define RTE_SPI3_MOSI_PORT_ID_FULL 0 +#if (RTE_SPI3_MOSI_PORT_ID_FULL == 0) +#define RTE_SPI3_MOSI_FULL 0 +#elif (RTE_SPI3_MOSI_PORT_ID_FULL == 1) +#define RTE_SPI3_MOSI_FULL 1 +#define RTE_SPI3_MOSI_PORT_FULL GPIOC +#define RTE_SPI3_MOSI_BIT_FULL 12 +#else +#error "Invalid SPI3_MOSI Pin Configuration!" +#endif + +// + +#if (RTE_SPI3_REMAP) +#define RTE_SPI3_AF_REMAP AFIO_SPI3_REMAP +#define RTE_SPI3_SCK_PORT RTE_SPI3_SCK_PORT_FULL +#define RTE_SPI3_SCK_BIT RTE_SPI3_SCK_BIT_FULL +#define RTE_SPI3_MISO RTE_SPI3_MISO_FULL +#define RTE_SPI3_MISO_PORT RTE_SPI3_MISO_PORT_FULL +#define RTE_SPI3_MISO_BIT RTE_SPI3_MISO_BIT_FULL +#define RTE_SPI3_MOSI RTE_SPI3_MOSI_FULL +#define RTE_SPI3_MOSI_PORT RTE_SPI3_MOSI_PORT_FULL +#define RTE_SPI3_MOSI_BIT RTE_SPI3_MOSI_BIT_FULL +#else +#define RTE_SPI3_AF_REMAP AFIO_SPI3_NO_REMAP +#define RTE_SPI3_SCK_PORT RTE_SPI3_SCK_PORT_DEF +#define RTE_SPI3_SCK_BIT RTE_SPI3_SCK_BIT_DEF +#define RTE_SPI3_MISO RTE_SPI3_MISO_DEF +#define RTE_SPI3_MISO_PORT RTE_SPI3_MISO_PORT_DEF +#define RTE_SPI3_MISO_BIT RTE_SPI3_MISO_BIT_DEF +#define RTE_SPI3_MOSI RTE_SPI3_MOSI_DEF +#define RTE_SPI3_MOSI_PORT RTE_SPI3_MOSI_PORT_DEF +#define RTE_SPI3_MOSI_BIT RTE_SPI3_MOSI_BIT_DEF +#endif + +// DMA Rx +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <1=>1 +// Selects DMA Channel (only Channel 1 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI3_RX_DMA 0 +#define RTE_SPI3_RX_DMA_NUMBER 2 +#define RTE_SPI3_RX_DMA_CHANNEL 1 +#define RTE_SPI3_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <2=>2 +// Selects DMA Channel (only Channel 2 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI3_TX_DMA 0 +#define RTE_SPI3_TX_DMA_NUMBER 2 +#define RTE_SPI3_TX_DMA_CHANNEL 2 +#define RTE_SPI3_TX_DMA_PRIORITY 0 + +// + + +// SDIO (Secure Digital Input/Output) [Driver_MCI0] +// Configuration settings for Driver_MCI0 in component ::CMSIS Driver:MCI +#define RTE_SDIO 0 + +// SDIO Peripheral Bus +// SDIO_CK Pin <0=>PC12 +#define RTE_SDIO_CK_PORT_ID 0 +#if (RTE_SDIO_CK_PORT_ID == 0) + #define RTE_SDIO_CK_PORT GPIOC + #define RTE_SDIO_CK_PIN 12 +#else + #error "Invalid SDIO_CLK Pin Configuration!" +#endif +// SDIO_CMD Pin <0=>PD2 +#define RTE_SDIO_CMD_PORT_ID 0 +#if (RTE_SDIO_CMD_PORT_ID == 0) + #define RTE_SDIO_CMD_PORT GPIOD + #define RTE_SDIO_CMD_PIN 2 +#else + #error "Invalid SDIO_CMD Pin Configuration!" +#endif +// SDIO_D0 Pin <0=>PC8 +#define RTE_SDIO_D0_PORT_ID 0 +#if (RTE_SDIO_D0_PORT_ID == 0) + #define RTE_SDIO_D0_PORT GPIOC + #define RTE_SDIO_D0_PIN 8 +#else + #error "Invalid SDIO_DAT0 Pin Configuration!" +#endif +// SDIO_D[1 .. 3] +#define RTE_SDIO_BUS_WIDTH_4 1 +// SDIO_D1 Pin <0=>PC9 +#define RTE_SDIO_D1_PORT_ID 0 +#if (RTE_SDIO_D1_PORT_ID == 0) + #define RTE_SDIO_D1_PORT GPIOC + #define RTE_SDIO_D1_PIN 9 +#else + #error "Invalid SDIO_D1 Pin Configuration!" +#endif +// SDIO_D2 Pin <0=>PC10 +#define RTE_SDIO_D2_PORT_ID 0 +#if (RTE_SDIO_D2_PORT_ID == 0) + #define RTE_SDIO_D2_PORT GPIOC + #define RTE_SDIO_D2_PIN 10 +#else + #error "Invalid SDIO_D2 Pin Configuration!" +#endif +// SDIO_D3 Pin <0=>PC11 +#define RTE_SDIO_D3_PORT_ID 0 +#if (RTE_SDIO_D3_PORT_ID == 0) + #define RTE_SDIO_D3_PORT GPIOC + #define RTE_SDIO_D3_PIN 11 +#else + #error "Invalid SDIO_D3 Pin Configuration!" +#endif +// SDIO_D[1 .. 3] +// SDIO_D[4 .. 7] +#define RTE_SDIO_BUS_WIDTH_8 0 +// SDIO_D4 Pin <0=>PB8 +#define RTE_SDIO_D4_PORT_ID 0 +#if (RTE_SDIO_D4_PORT_ID == 0) + #define RTE_SDIO_D4_PORT GPIOB + #define RTE_SDIO_D4_PIN 8 +#else + #error "Invalid SDIO_D4 Pin Configuration!" +#endif +// SDIO_D5 Pin <0=>PB9 +#define RTE_SDIO_D5_PORT_ID 0 +#if (RTE_SDIO_D5_PORT_ID == 0) + #define RTE_SDIO_D5_PORT GPIOB + #define RTE_SDIO_D5_PIN 9 +#else + #error "Invalid SDIO_D5 Pin Configuration!" +#endif +// SDIO_D6 Pin <0=>PC6 +#define RTE_SDIO_D6_PORT_ID 0 +#if (RTE_SDIO_D6_PORT_ID == 0) + #define RTE_SDIO_D6_PORT GPIOC + #define RTE_SDIO_D6_PIN 6 +#else + #error "Invalid SDIO_D6 Pin Configuration!" +#endif +// SDIO_D7 Pin <0=>PC7 +#define RTE_SDIO_D7_PORT_ID 0 +#if (RTE_SDIO_D7_PORT_ID == 0) + #define RTE_SDIO_D7_PORT GPIOC + #define RTE_SDIO_D7_PIN 7 +#else + #error "Invalid SDIO_D7 Pin Configuration!" +#endif +// SDIO_D[4 .. 7] +// SDIO Peripheral Bus + +// Card Detect Pin +// Configure Pin if exists +// GPIO Pxy (x = A..H, y = 0..15) or (x = I, y = 0..11) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SDIO_CD_EN 1 +#define RTE_SDIO_CD_ACTIVE 0 +#define RTE_SDIO_CD_PORT GPIO_PORT(5) +#define RTE_SDIO_CD_PIN 11 + +// Write Protect Pin +// Configure Pin if exists +// GPIO Pxy (x = A..H, y = 0..15) or (x = I, y = 0..11) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SDIO_WP_EN 0 +#define RTE_SDIO_WP_ACTIVE 1 +#define RTE_SDIO_WP_PORT GPIO_PORT(0) +#define RTE_SDIO_WP_PIN 10 + +// DMA +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <4=>4 +// Selects DMA Channel (only Channel 4 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SDIO_DMA_NUMBER 2 +#define RTE_SDIO_DMA_CHANNEL 4 +#define RTE_SDIO_DMA_PRIORITY 0 + +// + + +// CAN1 (Controller Area Network 1) [Driver_CAN1] +// Configuration settings for Driver_CAN1 in component ::CMSIS Driver:CAN +#define RTE_CAN1 0 + +// CAN1_RX Pin <0=>PA11 <1=>PB8 <2=>PD0 +#define RTE_CAN1_RX_PORT_ID 0 +#if (RTE_CAN1_RX_PORT_ID == 0) +#define RTE_CAN1_RX_PORT GPIOA +#define RTE_CAN1_RX_BIT 11 +#elif (RTE_CAN1_RX_PORT_ID == 1) +#define RTE_CAN1_RX_PORT GPIOB +#define RTE_CAN1_RX_BIT 8 +#elif (RTE_CAN1_RX_PORT_ID == 2) +#define RTE_CAN1_RX_PORT GPIOD +#define RTE_CAN1_RX_BIT 0 +#else +#error "Invalid CAN1_RX Pin Configuration!" +#endif + +// CAN1_TX Pin <0=>PA12 <1=>PB9 <2=>PD1 +#define RTE_CAN1_TX_PORT_ID 0 +#if (RTE_CAN1_TX_PORT_ID == 0) +#define RTE_CAN1_TX_PORT GPIOA +#define RTE_CAN1_TX_BIT 12 +#elif (RTE_CAN1_TX_PORT_ID == 1) +#define RTE_CAN1_TX_PORT GPIOB +#define RTE_CAN1_TX_BIT 9 +#elif (RTE_CAN1_TX_PORT_ID == 2) +#define RTE_CAN1_TX_PORT GPIOD +#define RTE_CAN1_TX_BIT 1 +#else +#error "Invalid CAN1_TX Pin Configuration!" +#endif + +// + + +// CAN2 (Controller Area Network 2) [Driver_CAN2] +// Configuration settings for Driver_CAN2 in component ::CMSIS Driver:CAN +#define RTE_CAN2 0 + +// CAN2_RX Pin <0=>PB5 <1=>PB12 +#define RTE_CAN2_RX_PORT_ID 0 +#if (RTE_CAN2_RX_PORT_ID == 0) +#define RTE_CAN2_RX_PORT GPIOB +#define RTE_CAN2_RX_BIT 5 +#elif (RTE_CAN2_RX_PORT_ID == 1) +#define RTE_CAN2_RX_PORT GPIOB +#define RTE_CAN2_RX_BIT 12 +#else +#error "Invalid CAN2_RX Pin Configuration!" +#endif + +// CAN2_TX Pin <0=>PB6 <1=>PB13 +#define RTE_CAN2_TX_PORT_ID 0 +#if (RTE_CAN2_TX_PORT_ID == 0) +#define RTE_CAN2_TX_PORT GPIOB +#define RTE_CAN2_TX_BIT 6 +#elif (RTE_CAN2_TX_PORT_ID == 1) +#define RTE_CAN2_TX_PORT GPIOB +#define RTE_CAN2_TX_BIT 13 +#else +#error "Invalid CAN2_TX Pin Configuration!" +#endif + +// + + +// ETH (Ethernet Interface) [Driver_ETH_MAC0] +// Configuration settings for Driver_ETH_MAC0 in component ::CMSIS Driver:Ethernet MAC +#define RTE_ETH 0 + +// MII (Media Independent Interface) +// Enable Media Independent Interface pin configuration +#define RTE_ETH_MII 0 + +// ETH_MII_TX_CLK Pin <0=>PC3 +#define RTE_ETH_MII_TX_CLK_PORT_ID 0 +#if (RTE_ETH_MII_TX_CLK_PORT_ID == 0) +#define RTE_ETH_MII_TX_CLK_PORT GPIOC +#define RTE_ETH_MII_TX_CLK_PIN 3 +#else +#error "Invalid ETH_MII_TX_CLK Pin Configuration!" +#endif +// ETH_MII_TXD0 Pin <0=>PB12 +#define RTE_ETH_MII_TXD0_PORT_ID 0 +#if (RTE_ETH_MII_TXD0_PORT_ID == 0) +#define RTE_ETH_MII_TXD0_PORT GPIOB +#define RTE_ETH_MII_TXD0_PIN 12 +#else +#error "Invalid ETH_MII_TXD0 Pin Configuration!" +#endif +// ETH_MII_TXD1 Pin <0=>PB13 +#define RTE_ETH_MII_TXD1_PORT_ID 0 +#if (RTE_ETH_MII_TXD1_PORT_ID == 0) +#define RTE_ETH_MII_TXD1_PORT GPIOB +#define RTE_ETH_MII_TXD1_PIN 13 +#else +#error "Invalid ETH_MII_TXD1 Pin Configuration!" +#endif +// ETH_MII_TXD2 Pin <0=>PC2 +#define RTE_ETH_MII_TXD2_PORT_ID 0 +#if (RTE_ETH_MII_TXD2_PORT_ID == 0) +#define RTE_ETH_MII_TXD2_PORT GPIOC +#define RTE_ETH_MII_TXD2_PIN 2 +#else +#error "Invalid ETH_MII_TXD2 Pin Configuration!" +#endif +// ETH_MII_TXD3 Pin <0=>PB8 +#define RTE_ETH_MII_TXD3_PORT_ID 0 +#if (RTE_ETH_MII_TXD3_PORT_ID == 0) +#define RTE_ETH_MII_TXD3_PORT GPIOB +#define RTE_ETH_MII_TXD3_PIN 8 +#else +#error "Invalid ETH_MII_TXD3 Pin Configuration!" +#endif +// ETH_MII_TX_EN Pin <0=>PB11 +#define RTE_ETH_MII_TX_EN_PORT_ID 0 +#if (RTE_ETH_MII_TX_EN_PORT_ID == 0) +#define RTE_ETH_MII_TX_EN_PORT GPIOB +#define RTE_ETH_MII_TX_EN_PIN 11 +#else +#error "Invalid ETH_MII_TX_EN Pin Configuration!" +#endif +// ETH_MII_RX_CLK Pin <0=>PA1 +#define RTE_ETH_MII_RX_CLK_PORT_ID 0 +#if (RTE_ETH_MII_RX_CLK_PORT_ID == 0) +#define RTE_ETH_MII_RX_CLK_PORT GPIOA +#define RTE_ETH_MII_RX_CLK_PIN 1 +#else +#error "Invalid ETH_MII_RX_CLK Pin Configuration!" +#endif +// ETH_MII_RXD0 Pin <0=>PC4 +#define RTE_ETH_MII_RXD0_DEF 0 + +// ETH_MII_RXD1 Pin <0=>PC5 +#define RTE_ETH_MII_RXD1_DEF 0 + +// ETH_MII_RXD2 Pin <0=>PB0 +#define RTE_ETH_MII_RXD2_DEF 0 + +// ETH_MII_RXD3 Pin <0=>PB1 <1=>PD12 +#define RTE_ETH_MII_RXD3_DEF 0 + +// ETH_MII_RX_DV Pin <0=>PA7 +#define RTE_ETH_MII_RX_DV_DEF 0 + +// ETH_MII_RX_ER Pin <0=>PB10 +#define RTE_ETH_MII_RX_ER_PORT_ID 0 +#if (RTE_ETH_MII_RX_ER_PORT_ID == 0) +#define RTE_ETH_MII_RX_ER_PORT GPIOB +#define RTE_ETH_MII_RX_ER_PIN 10 +#else +#error "Invalid ETH_MII_RX_ER Pin Configuration!" +#endif +// ETH_MII_CRS Pin <0=>PA0 +#define RTE_ETH_MII_CRS_PORT_ID 0 +#if (RTE_ETH_MII_CRS_PORT_ID == 0) +#define RTE_ETH_MII_CRS_PORT GPIOA +#define RTE_ETH_MII_CRS_PIN 0 +#else +#error "Invalid ETH_MII_CRS Pin Configuration!" +#endif +// ETH_MII_COL Pin <0=>PA3 +#define RTE_ETH_MII_COL_PORT_ID 0 +#if (RTE_ETH_MII_COL_PORT_ID == 0) +#define RTE_ETH_MII_COL_PORT GPIOA +#define RTE_ETH_MII_COL_PIN 3 +#else +#error "Invalid ETH_MII_COL Pin Configuration!" +#endif + +// Ethernet MAC I/O remapping +// Remap Ethernet pins +#define RTE_ETH_MII_REMAP 0 + +// ETH_MII_RXD0 Pin <1=>PD9 +#define RTE_ETH_MII_RXD0_REMAP 1 + +// ETH_MII_RXD1 Pin <1=>PD10 +#define RTE_ETH_MII_RXD1_REMAP 1 + +// ETH_MII_RXD2 Pin <1=>PD11 +#define RTE_ETH_MII_RXD2_REMAP 1 + +// ETH_MII_RXD3 Pin <1=>PD12 +#define RTE_ETH_MII_RXD3_REMAP 1 + +// ETH_MII_RX_DV Pin <1=>PD8 +#define RTE_ETH_MII_RX_DV_REMAP 1 +// + +// + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RXD0_DEF == 0)) +#define RTE_ETH_MII_RXD0_PORT GPIOC +#define RTE_ETH_MII_RXD0_PIN 4 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RXD0_REMAP == 1)) +#define RTE_ETH_MII_RXD0_PORT GPIOD +#define RTE_ETH_MII_RXD0_PIN 9 +#else +#error "Invalid ETH_MII_RXD0 Pin Configuration!" +#endif + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RXD1_DEF == 0)) +#define RTE_ETH_MII_RXD1_PORT GPIOC +#define RTE_ETH_MII_RXD1_PIN 5 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RXD1_REMAP == 1)) +#define RTE_ETH_MII_RXD1_PORT GPIOD +#define RTE_ETH_MII_RXD1_PIN 10 +#else +#error "Invalid ETH_MII_RXD1 Pin Configuration!" +#endif + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RXD2_DEF == 0)) +#define RTE_ETH_MII_RXD2_PORT GPIOB +#define RTE_ETH_MII_RXD2_PIN 0 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RXD2_REMAP == 1)) +#define RTE_ETH_MII_RXD2_PORT GPIOD +#define RTE_ETH_MII_RXD2_PIN 11 +#else +#error "Invalid ETH_MII_RXD2 Pin Configuration!" +#endif + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RXD3_DEF == 0)) +#define RTE_ETH_MII_RXD3_PORT GPIOB +#define RTE_ETH_MII_RXD3_PIN 1 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RXD3_REMAP == 1)) +#define RTE_ETH_MII_RXD3_PORT GPIOD +#define RTE_ETH_MII_RXD3_PIN 12 +#else +#error "Invalid ETH_MII_RXD3 Pin Configuration!" +#endif + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RX_DV_DEF == 0)) +#define RTE_ETH_MII_RX_DV_PORT GPIOA +#define RTE_ETH_MII_RX_DV_PIN 7 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RX_DV_REMAP == 1)) +#define RTE_ETH_MII_RX_DV_PORT GPIOD +#define RTE_ETH_MII_RX_DV_PIN 8 +#else +#error "Invalid ETH_MII_RX_DV Pin Configuration!" +#endif + +// RMII (Reduced Media Independent Interface) +#define RTE_ETH_RMII 0 + +// ETH_RMII_TXD0 Pin <0=>PB12 +#define RTE_ETH_RMII_TXD0_PORT_ID 0 +#if (RTE_ETH_RMII_TXD0_PORT_ID == 0) +#define RTE_ETH_RMII_TXD0_PORT GPIOB +#define RTE_ETH_RMII_TXD0_PIN 12 +#else +#error "Invalid ETH_RMII_TXD0 Pin Configuration!" +#endif +// ETH_RMII_TXD1 Pin <0=>PB13 +#define RTE_ETH_RMII_TXD1_PORT_ID 0 +#if (RTE_ETH_RMII_TXD1_PORT_ID == 0) +#define RTE_ETH_RMII_TXD1_PORT GPIOB +#define RTE_ETH_RMII_TXD1_PIN 13 +#else +#error "Invalid ETH_RMII_TXD1 Pin Configuration!" +#endif +// ETH_RMII_TX_EN Pin <0=>PB11 +#define RTE_ETH_RMII_TX_EN_PORT_ID 0 +#if (RTE_ETH_RMII_TX_EN_PORT_ID == 0) +#define RTE_ETH_RMII_TX_EN_PORT GPIOB +#define RTE_ETH_RMII_TX_EN_PIN 11 +#else +#error "Invalid ETH_RMII_TX_EN Pin Configuration!" +#endif +// ETH_RMII_RXD0 Pin <0=>PC4 +#define RTE_ETH_RMII_RXD0_DEF 0 + +// ETH_RMII_RXD1 Pin <0=>PC5 +#define RTE_ETH_RMII_RXD1_DEF 0 + +// ETH_RMII_REF_CLK Pin <0=>PA1 +#define RTE_ETH_RMII_REF_CLK_PORT_ID 0 +#if (RTE_ETH_RMII_REF_CLK_PORT_ID == 0) +#define RTE_ETH_RMII_REF_CLK_PORT GPIOA +#define RTE_ETH_RMII_REF_CLK_PIN 1 +#else +#error "Invalid ETH_RMII_REF_CLK Pin Configuration!" +#endif +// ETH_RMII_CRS_DV Pin <0=>PA7 +#define RTE_ETH_RMII_CRS_DV_DEF 0 + +// Ethernet MAC I/O remapping +// Remap Ethernet pins +#define RTE_ETH_RMII_REMAP 0 +// ETH_RMII_RXD0 Pin <1=>PD9 +#define RTE_ETH_RMII_RXD0_REMAP 1 + +// ETH_RMII_RXD1 Pin <1=>PD10 +#define RTE_ETH_RMII_RXD1_REMAP 1 + +// ETH_RMII_CRS_DV Pin <1=>PD8 +#define RTE_ETH_RMII_CRS_DV_REMAP 1 +// + +#if ((RTE_ETH_RMII_REMAP == 0) && (RTE_ETH_RMII_RXD0_DEF == 0)) +#define RTE_ETH_RMII_RXD0_PORT GPIOC +#define RTE_ETH_RMII_RXD0_PIN 4 +#elif ((RTE_ETH_RMII_REMAP == 1) && (RTE_ETH_RMII_RXD0_REMAP == 1)) +#define RTE_ETH_RMII_RXD0_PORT GPIOD +#define RTE_ETH_RMII_RXD0_PIN 9 +#else +#error "Invalid ETH_RMII_RXD0 Pin Configuration!" +#endif + +#if ((RTE_ETH_RMII_REMAP == 0) && (RTE_ETH_RMII_RXD1_DEF == 0)) +#define RTE_ETH_RMII_RXD1_PORT GPIOC +#define RTE_ETH_RMII_RXD1_PIN 5 +#elif ((RTE_ETH_RMII_REMAP == 1) && (RTE_ETH_RMII_RXD1_REMAP == 1)) +#define RTE_ETH_RMII_RXD1_PORT GPIOD +#define RTE_ETH_RMII_RXD1_PIN 10 +#else +#error "Invalid ETH_RMII_RXD1 Pin Configuration!" +#endif + +#if ((RTE_ETH_RMII_REMAP == 0) && (RTE_ETH_RMII_CRS_DV_DEF == 0)) +#define RTE_ETH_RMII_CRS_DV_PORT GPIOA +#define RTE_ETH_RMII_CRS_DV_PIN 7 +#elif ((RTE_ETH_RMII_REMAP == 1) && (RTE_ETH_RMII_CRS_DV_REMAP == 1)) +#define RTE_ETH_RMII_CRS_DV_PORT GPIOD +#define RTE_ETH_RMII_CRS_DV_PIN 8 +#else +#error "Invalid ETH_RMII_CRS_DV Pin Configuration!" +#endif + +// + +// Management Data Interface +// ETH_MDC Pin <0=>PC1 +#define RTE_ETH_MDI_MDC_PORT_ID 0 +#if (RTE_ETH_MDI_MDC_PORT_ID == 0) +#define RTE_ETH_MDI_MDC_PORT GPIOC +#define RTE_ETH_MDI_MDC_PIN 1 +#else +#error "Invalid ETH_MDC Pin Configuration!" +#endif +// ETH_MDIO Pin <0=>PA2 +#define RTE_ETH_MDI_MDIO_PORT_ID 0 +#if (RTE_ETH_MDI_MDIO_PORT_ID == 0) +#define RTE_ETH_MDI_MDIO_PORT GPIOA +#define RTE_ETH_MDI_MDIO_PIN 2 +#else +#error "Invalid ETH_MDIO Pin Configuration!" +#endif +// + +// Reference 25MHz Clock generation on MCO pin <0=>Disabled <1=>Enabled +#define RTE_ETH_REF_CLOCK_ID 0 +#if (RTE_ETH_REF_CLOCK_ID == 0) +#define RTE_ETH_REF_CLOCK 0 +#elif (RTE_ETH_REF_CLOCK_ID == 1) +#define RTE_ETH_REF_CLOCK 1 +#else +#error "Invalid MCO Ethernet Reference Clock Configuration!" +#endif +// + + +// USB Device Full-speed +// Configuration settings for Driver_USBD0 in component ::Drivers:USB Device +#define RTE_USB_DEVICE 0 + +// CON On/Off Pin +// Configure Pin for driving D+ pull-up +// GPIO Pxy (x = A..G, y = 0..15) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_USB_DEVICE_CON_PIN 1 +#define RTE_USB_DEVICE_CON_ACTIVE 0 +#define RTE_USB_DEVICE_CON_PORT GPIO_PORT(1) +#define RTE_USB_DEVICE_CON_BIT 14 + +// + + +// USB OTG Full-speed +#define RTE_USB_OTG_FS 0 + +// Host [Driver_USBH0] +// Configuration settings for Driver_USBH0 in component ::Drivers:USB Host + +#define RTE_USB_OTG_FS_HOST 0 + +// VBUS Power On/Off Pin +// Configure Pin for driving VBUS +// GPIO Pxy (x = A..G, y = 0..15) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_OTG_FS_VBUS_PIN 1 +#define RTE_OTG_FS_VBUS_ACTIVE 0 +#define RTE_OTG_FS_VBUS_PORT GPIO_PORT(2) +#define RTE_OTG_FS_VBUS_BIT 9 + +// Overcurrent Detection Pin +// Configure Pin for overcurrent detection +// GPIO Pxy (x = A..G, y = 0..15) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_OTG_FS_OC_PIN 1 +#define RTE_OTG_FS_OC_ACTIVE 0 +#define RTE_OTG_FS_OC_PORT GPIO_PORT(4) +#define RTE_OTG_FS_OC_BIT 1 +// + +// + + +#endif /* __RTE_DEVICE_H */ diff --git a/RTE/Device/STM32F103RB/startup_stm32f10x_md.s.update@1.0.1 b/RTE/Device/STM32F103RB/startup_stm32f10x_md.s.update@1.0.1 new file mode 100644 index 0000000..1ab7096 --- /dev/null +++ b/RTE/Device/STM32F103RB/startup_stm32f10x_md.s.update@1.0.1 @@ -0,0 +1,308 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 STMicroelectronics. +;* All rights reserved. +;* +;* This software is licensed under terms that can be found in the LICENSE file +;* in the root directory of this software component. +;* If no LICENSE file comes with this software, it is provided AS-IS. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1_2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/RTE/Device/STM32F103RB/system_stm32f10x.c.update@1.0.1 b/RTE/Device/STM32F103RB/system_stm32f10x.c.update@1.0.1 new file mode 100644 index 0000000..9e31f67 --- /dev/null +++ b/RTE/Device/STM32F103RB/system_stm32f10x.c.update@1.0.1 @@ -0,0 +1,1092 @@ +/** + ****************************************************************************** + * @file system_stm32f10x.c + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * factors, AHB/APBx prescalers and Flash settings). + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f10x_xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (8 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f10x_xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on + * the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file. + * When HSE is used as system clock source, directly or through PLL, and you + * are using different crystal you have to adapt the HSE value to your own + * configuration. + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f10x_system + * @{ + */ + +/** @addtogroup STM32F10x_System_Private_Includes + * @{ + */ + +#include "stm32f10x.h" + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Defines + * @{ + */ + +/*!< Uncomment the line corresponding to the desired System clock (SYSCLK) + frequency (after reset the HSI is used as SYSCLK source) + + IMPORTANT NOTE: + ============== + 1. After each device reset the HSI is used as System clock source. + + 2. Please make sure that the selected System clock doesn't exceed your device's + maximum frequency. + + 3. If none of the define below is enabled, the HSI is used as System clock + source. + + 4. The System clock configuration functions provided within this file assume that: + - For Low, Medium and High density Value line devices an external 8MHz + crystal is used to drive the System clock. + - For Low, Medium and High density devices an external 8MHz crystal is + used to drive the System clock. + - For Connectivity line devices an external 25MHz crystal is used to drive + the System clock. + If you are using different crystal you have to adapt those functions accordingly. + */ + +#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) +/* #define SYSCLK_FREQ_HSE HSE_VALUE */ + #define SYSCLK_FREQ_24MHz 24000000 +#else +/* #define SYSCLK_FREQ_HSE HSE_VALUE */ +/* #define SYSCLK_FREQ_24MHz 24000000 */ +/* #define SYSCLK_FREQ_36MHz 36000000 */ +/* #define SYSCLK_FREQ_48MHz 48000000 */ +/* #define SYSCLK_FREQ_56MHz 56000000 */ +#define SYSCLK_FREQ_72MHz 72000000 +#endif + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM3210E-EVAL board (STM32 High density and XL-density devices) or on + STM32100E-EVAL board (STM32 High-density value line devices) as data memory */ +#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL) +/* #define DATA_IN_ExtSRAM */ +#endif + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Variables + * @{ + */ + +/******************************************************************************* +* Clock Definitions +*******************************************************************************/ +#ifdef SYSCLK_FREQ_HSE + uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_24MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_36MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_48MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_56MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_72MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /*!< System Clock Frequency (Core Clock) */ +#else /*!< HSI Selected as System Clock source */ + uint32_t SystemCoreClock = HSI_VALUE; /*!< System Clock Frequency (Core Clock) */ +#endif + +__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); + +#ifdef SYSCLK_FREQ_HSE + static void SetSysClockToHSE(void); +#elif defined SYSCLK_FREQ_24MHz + static void SetSysClockTo24(void); +#elif defined SYSCLK_FREQ_36MHz + static void SetSysClockTo36(void); +#elif defined SYSCLK_FREQ_48MHz + static void SetSysClockTo48(void); +#elif defined SYSCLK_FREQ_56MHz + static void SetSysClockTo56(void); +#elif defined SYSCLK_FREQ_72MHz + static void SetSysClockTo72(void); +#endif + +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemCoreClock variable. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +void SystemInit (void) +{ + /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ +#ifndef STM32F10X_CL + RCC->CFGR &= (uint32_t)0xF8FF0000; +#else + RCC->CFGR &= (uint32_t)0xF0FF0000; +#endif /* STM32F10X_CL */ + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ + RCC->CFGR &= (uint32_t)0xFF80FFFF; + +#ifdef STM32F10X_CL + /* Reset PLL2ON and PLL3ON bits */ + RCC->CR &= (uint32_t)0xEBFFFFFF; + + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x00FF0000; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000; +#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000; +#else + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000; +#endif /* STM32F10X_CL */ + +#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL) + #ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); + #endif /* DATA_IN_ExtSRAM */ +#endif + + /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */ + /* Configure the Flash Latency cycles and enable prefetch buffer */ + SetSysClock(); + +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz or 25 MHz, depending on the product used), user has to ensure + * that HSE_VALUE is same as the real frequency of the crystal used. + * Otherwise, this function may have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 0; + +#ifdef STM32F10X_CL + uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0, pll2mull = 0; +#endif /* STM32F10X_CL */ + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) + uint32_t prediv1factor = 0; +#endif /* STM32F10X_LD_VL or STM32F10X_MD_VL or STM32F10X_HD_VL */ + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock */ + + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + +#ifndef STM32F10X_CL + pllmull = ( pllmull >> 18) + 2; + + if (pllsource == 0x00) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + { + #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1; + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + #else + /* HSE selected as PLL clock entry */ + if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) + {/* HSE oscillator clock divided by 2 */ + SystemCoreClock = (HSE_VALUE >> 1) * pllmull; + } + else + { + SystemCoreClock = HSE_VALUE * pllmull; + } + #endif + } +#else + pllmull = pllmull >> 18; + + if (pllmull != 0x0D) + { + pllmull += 2; + } + else + { /* PLL multiplication factor = PLL input clock * 6.5 */ + pllmull = 13 / 2; + } + + if (pllsource == 0x00) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + {/* PREDIV1 selected as PLL clock entry */ + + /* Get PREDIV1 clock source and division factor */ + prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1; + + if (prediv1source == 0) + { + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + } + else + {/* PLL2 clock selected as PREDIV1 clock entry */ + + /* Get PREDIV2 division factor and PLL2 multiplication factor */ + prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4) + 1; + pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2; + SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; + } + } +#endif /* STM32F10X_CL */ + break; + + default: + SystemCoreClock = HSI_VALUE; + break; + } + + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +#ifdef SYSCLK_FREQ_HSE + SetSysClockToHSE(); +#elif defined SYSCLK_FREQ_24MHz + SetSysClockTo24(); +#elif defined SYSCLK_FREQ_36MHz + SetSysClockTo36(); +#elif defined SYSCLK_FREQ_48MHz + SetSysClockTo48(); +#elif defined SYSCLK_FREQ_56MHz + SetSysClockTo56(); +#elif defined SYSCLK_FREQ_72MHz + SetSysClockTo72(); +#endif + + /* If none of the define above is enabled, the HSI is used as System clock + source (default after reset) */ +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f10x.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f10x_xx.s/.c before jump to main. + * This function configures the external SRAM mounted on STM3210E-EVAL + * board (STM32 High density devices). This SRAM will be used as program + * data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is + required, then adjust the Register Addresses */ + + /* Enable FSMC clock */ + RCC->AHBENR = 0x00000114; + + /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ + RCC->APB2ENR = 0x000001E0; + +/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ +/*---------------- SRAM Address lines configuration -------------------------*/ +/*---------------- NOE and NWE configuration --------------------------------*/ +/*---------------- NE3 configuration ----------------------------------------*/ +/*---------------- NBL0, NBL1 configuration ---------------------------------*/ + + GPIOD->CRL = 0x44BB44BB; + GPIOD->CRH = 0xBBBBBBBB; + + GPIOE->CRL = 0xB44444BB; + GPIOE->CRH = 0xBBBBBBBB; + + GPIOF->CRL = 0x44BBBBBB; + GPIOF->CRH = 0xBBBB4444; + + GPIOG->CRL = 0x44BBBBBB; + GPIOG->CRH = 0x44444B44; + +/*---------------- FSMC Configuration ---------------------------------------*/ +/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ + + FSMC_Bank1->BTCR[4] = 0x00001011; + FSMC_Bank1->BTCR[5] = 0x00000200; +} +#endif /* DATA_IN_ExtSRAM */ + +#ifdef SYSCLK_FREQ_HSE +/** + * @brief Selects HSE as System clock source and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockToHSE(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + +#if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL && !defined STM32F10X_HD_VL + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 0 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + +#ifndef STM32F10X_CL + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; +#else + if (HSE_VALUE <= 24000000) + { + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; + } + else + { + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + } +#endif /* STM32F10X_CL */ +#endif + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + + /* Select HSE as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSE; + + /* Wait till HSE is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x04) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_24MHz +/** + * @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo24(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { +#if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL && !defined STM32F10X_HD_VL + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 0 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; +#endif + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL configuration: PLLCLK = PREDIV1 * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL6); + + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */ + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } +#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + /* PLL configuration: = (HSE / 2) * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL6); +#else + /* PLL configuration: = (HSE / 2) * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL6); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_36MHz +/** + * @brief Sets System clock frequency to 36MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo36(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 1 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + + /* PLL configuration: PLLCLK = PREDIV1 * 9 = 36 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL9); + + /*!< PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + +#else + /* PLL configuration: PLLCLK = (HSE / 2) * 9 = 36 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_48MHz +/** + * @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo48(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 1 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 6 = 48 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL6); +#else + /* PLL configuration: PLLCLK = HSE * 6 = 48 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} + +#elif defined SYSCLK_FREQ_56MHz +/** + * @brief Sets System clock frequency to 56MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo56(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 2 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 7 = 56 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL7); +#else + /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL7); + +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} + +#elif defined SYSCLK_FREQ_72MHz +/** + * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo72(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 2 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; + + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL9); +#else + /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | + RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/RTE/Device/STM32F107VC/RTE_Device.h.base@1.1.2 b/RTE/Device/STM32F107VC/RTE_Device.h.base@1.1.2 new file mode 100644 index 0000000..0d10ed8 --- /dev/null +++ b/RTE/Device/STM32F107VC/RTE_Device.h.base@1.1.2 @@ -0,0 +1,1828 @@ +/* ----------------------------------------------------------------------------- + * Copyright (c) 2013-2016 Arm Limited (or its affiliates). All + * rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * $Date: 09. September 2016 + * $Revision: V1.1.2 + * + * Project: RTE Device Configuration for STMicroelectronics STM32F1xx + * + * -------------------------------------------------------------------------- */ + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +#ifndef __RTE_DEVICE_H +#define __RTE_DEVICE_H + + +#define GPIO_PORT(num) \ + ((num == 0) ? GPIOA : \ + (num == 1) ? GPIOB : \ + (num == 2) ? GPIOC : \ + (num == 3) ? GPIOD : \ + (num == 4) ? GPIOE : \ + (num == 5) ? GPIOF : \ + (num == 6) ? GPIOG : \ + NULL) + + +// Clock Configuration +// High-speed Internal Clock <1-999999999> +#define RTE_HSI 8000000 +// High-speed External Clock <1-999999999> +#define RTE_HSE 25000000 +// System Clock <1-999999999> +#define RTE_SYSCLK 72000000 +// HCLK Clock <1-999999999> +#define RTE_HCLK 72000000 +// APB1 Clock <1-999999999> +#define RTE_PCLK1 36000000 +// APB2 Clock <1-999999999> +#define RTE_PCLK2 72000000 +// ADC Clock <1-999999999> +#define RTE_ADCCLK 36000000 +// USB Clock +#define RTE_USBCLK 48000000 +// + + +// USART1 (Universal synchronous asynchronous receiver transmitter) +// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART +#define RTE_USART1 0 + +// USART1_TX Pin <0=>Not Used <1=>PA9 +#define RTE_USART1_TX_PORT_ID_DEF 0 +#if (RTE_USART1_TX_PORT_ID_DEF == 0) +#define RTE_USART1_TX_DEF 0 +#elif (RTE_USART1_TX_PORT_ID_DEF == 1) +#define RTE_USART1_TX_DEF 1 +#define RTE_USART1_TX_PORT_DEF GPIOA +#define RTE_USART1_TX_BIT_DEF 9 +#else +#error "Invalid USART1_TX Pin Configuration!" +#endif + +// USART1_RX Pin <0=>Not Used <1=>PA10 +#define RTE_USART1_RX_PORT_ID_DEF 0 +#if (RTE_USART1_RX_PORT_ID_DEF == 0) +#define RTE_USART1_RX_DEF 0 +#elif (RTE_USART1_RX_PORT_ID_DEF == 1) +#define RTE_USART1_RX_DEF 1 +#define RTE_USART1_RX_PORT_DEF GPIOA +#define RTE_USART1_RX_BIT_DEF 10 +#else +#error "Invalid USART1_RX Pin Configuration!" +#endif + +// USART1_CK Pin <0=>Not Used <1=>PA8 +#define RTE_USART1_CK_PORT_ID_DEF 0 +#if (RTE_USART1_CK_PORT_ID_DEF == 0) +#define RTE_USART1_CK 0 +#elif (RTE_USART1_CK_PORT_ID_DEF == 1) +#define RTE_USART1_CK 1 +#define RTE_USART1_CK_PORT_DEF GPIOA +#define RTE_USART1_CK_BIT_DEF 8 +#else +#error "Invalid USART1_CK Pin Configuration!" +#endif + +// USART1_CTS Pin <0=>Not Used <1=>PA11 +#define RTE_USART1_CTS_PORT_ID_DEF 0 +#if (RTE_USART1_CTS_PORT_ID_DEF == 0) +#define RTE_USART1_CTS 0 +#elif (RTE_USART1_CTS_PORT_ID_DEF == 1) +#define RTE_USART1_CTS 1 +#define RTE_USART1_CTS_PORT_DEF GPIOA +#define RTE_USART1_CTS_BIT_DEF 11 +#else +#error "Invalid USART1_CTS Pin Configuration!" +#endif + +// USART1_RTS Pin <0=>Not Used <1=>PA12 +#define RTE_USART1_RTS_PORT_ID_DEF 0 +#if (RTE_USART1_RTS_PORT_ID_DEF == 0) +#define RTE_USART1_RTS 0 +#elif (RTE_USART1_RTS_PORT_ID_DEF == 1) +#define RTE_USART1_RTS 1 +#define RTE_USART1_RTS_PORT_DEF GPIOA +#define RTE_USART1_RTS_BIT_DEF 12 +#else +#error "Invalid USART1_RTS Pin Configuration!" +#endif + +// USART1 Pin Remap +// Enable USART1 Pin Remapping +#define RTE_USART1_REMAP_FULL 0 + +// USART1_TX Pin <0=>Not Used <1=>PB6 +#define RTE_USART1_TX_PORT_ID_FULL 0 +#if (RTE_USART1_TX_PORT_ID_FULL == 0) +#define RTE_USART1_TX_FULL 0 +#elif (RTE_USART1_TX_PORT_ID_FULL == 1) +#define RTE_USART1_TX_FULL 1 +#define RTE_USART1_TX_PORT_FULL GPIOB +#define RTE_USART1_TX_BIT_FULL 6 +#else +#error "Invalid USART1_TX Pin Configuration!" +#endif + +// USART1_RX Pin <0=>Not Used <1=>PB7 +#define RTE_USART1_RX_PORT_ID_FULL 0 +#if (RTE_USART1_RX_PORT_ID_FULL == 0) +#define RTE_USART1_RX_FULL 0 +#elif (RTE_USART1_RX_PORT_ID_FULL == 1) +#define RTE_USART1_RX_FULL 1 +#define RTE_USART1_RX_PORT_FULL GPIOB +#define RTE_USART1_RX_BIT_FULL 7 +#else +#error "Invalid USART1_RX Pin Configuration!" +#endif +// + +#if (RTE_USART1_REMAP_FULL) +#define RTE_USART1_AF_REMAP AFIO_USART1_REMAP +#define RTE_USART1_TX RTE_USART1_TX_FULL +#define RTE_USART1_TX_PORT RTE_USART1_TX_PORT_FULL +#define RTE_USART1_TX_BIT RTE_USART1_TX_BIT_FULL +#define RTE_USART1_RX RTE_USART1_RX_FULL +#define RTE_USART1_RX_PORT RTE_USART1_RX_PORT_FULL +#define RTE_USART1_RX_BIT RTE_USART1_RX_BIT_FULL +#define RTE_USART1_CK_PORT RTE_USART1_CK_PORT_DEF +#define RTE_USART1_CK_BIT RTE_USART1_CK_BIT_DEF +#define RTE_USART1_CTS_PORT RTE_USART1_CTS_PORT_DEF +#define RTE_USART1_CTS_BIT RTE_USART1_CTS_BIT_DEF +#define RTE_USART1_RTS_PORT RTE_USART1_RTS_PORT_DEF +#define RTE_USART1_RTS_BIT RTE_USART1_RTS_BIT_DEF +#else +#define RTE_USART1_AF_REMAP AFIO_USART1_NO_REMAP +#define RTE_USART1_TX RTE_USART1_TX_DEF +#define RTE_USART1_TX_PORT RTE_USART1_TX_PORT_DEF +#define RTE_USART1_TX_BIT RTE_USART1_TX_BIT_DEF +#define RTE_USART1_RX RTE_USART1_RX_DEF +#define RTE_USART1_RX_PORT RTE_USART1_RX_PORT_DEF +#define RTE_USART1_RX_BIT RTE_USART1_RX_BIT_DEF +#define RTE_USART1_CK_PORT RTE_USART1_CK_PORT_DEF +#define RTE_USART1_CK_BIT RTE_USART1_CK_BIT_DEF +#define RTE_USART1_CTS_PORT RTE_USART1_CTS_PORT_DEF +#define RTE_USART1_CTS_BIT RTE_USART1_CTS_BIT_DEF +#define RTE_USART1_RTS_PORT RTE_USART1_RTS_PORT_DEF +#define RTE_USART1_RTS_BIT RTE_USART1_RTS_BIT_DEF +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <5=>5 +// Selects DMA Channel (only Channel 5 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Set DMA Channel priority +// +#define RTE_USART1_RX_DMA 0 +#define RTE_USART1_RX_DMA_NUMBER 1 +#define RTE_USART1_RX_DMA_CHANNEL 5 +#define RTE_USART1_RX_DMA_PRIORITY 0 +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <4=>4 +// Selects DMA Channel (only Channel 4 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Set DMA Channel priority +// +#define RTE_USART1_TX_DMA 0 +#define RTE_USART1_TX_DMA_NUMBER 1 +#define RTE_USART1_TX_DMA_CHANNEL 4 +#define RTE_USART1_TX_DMA_PRIORITY 0 +// + + +// USART2 (Universal synchronous asynchronous receiver transmitter) +// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART +#define RTE_USART2 0 + +// USART2_TX Pin <0=>Not Used <1=>PA2 +#define RTE_USART2_TX_PORT_ID_DEF 0 +#if (RTE_USART2_TX_PORT_ID_DEF == 0) +#define RTE_USART2_TX_DEF 0 +#elif (RTE_USART2_TX_PORT_ID_DEF == 1) +#define RTE_USART2_TX_DEF 1 +#define RTE_USART2_TX_PORT_DEF GPIOA +#define RTE_USART2_TX_BIT_DEF 2 +#else +#error "Invalid USART2_TX Pin Configuration!" +#endif + +// USART2_RX Pin <0=>Not Used <1=>PA3 +#define RTE_USART2_RX_PORT_ID_DEF 0 +#if (RTE_USART2_RX_PORT_ID_DEF == 0) +#define RTE_USART2_RX_DEF 0 +#elif (RTE_USART2_RX_PORT_ID_DEF == 1) +#define RTE_USART2_RX_DEF 1 +#define RTE_USART2_RX_PORT_DEF GPIOA +#define RTE_USART2_RX_BIT_DEF 3 +#else +#error "Invalid USART2_RX Pin Configuration!" +#endif + +// USART2_CK Pin <0=>Not Used <1=>PA4 +#define RTE_USART2_CK_PORT_ID_DEF 0 +#if (RTE_USART2_CK_PORT_ID_DEF == 0) +#define RTE_USART2_CK_DEF 0 +#elif (RTE_USART2_CK_PORT_ID_DEF == 1) +#define RTE_USART2_CK_DEF 1 +#define RTE_USART2_CK_PORT_DEF GPIOA +#define RTE_USART2_CK_BIT_DEF 4 +#else +#error "Invalid USART2_CK Pin Configuration!" +#endif + +// USART2_CTS Pin <0=>Not Used <1=>PA0 +#define RTE_USART2_CTS_PORT_ID_DEF 0 +#if (RTE_USART2_CTS_PORT_ID_DEF == 0) +#define RTE_USART2_CTS_DEF 0 +#elif (RTE_USART2_CTS_PORT_ID_DEF == 1) +#define RTE_USART2_CTS_DEF 1 +#define RTE_USART2_CTS_PORT_DEF GPIOA +#define RTE_USART2_CTS_BIT_DEF 0 +#else +#error "Invalid USART2_CTS Pin Configuration!" +#endif + +// USART2_RTS Pin <0=>Not Used <1=>PA1 +#define RTE_USART2_RTS_PORT_ID_DEF 0 +#if (RTE_USART2_RTS_PORT_ID_DEF == 0) +#define RTE_USART2_RTS_DEF 0 +#elif (RTE_USART2_RTS_PORT_ID_DEF == 1) +#define RTE_USART2_RTS_DEF 1 +#define RTE_USART2_RTS_PORT_DEF GPIOA +#define RTE_USART2_RTS_BIT_DEF 1 +#else +#error "Invalid USART2_RTS Pin Configuration!" +#endif + +// USART2 Pin Remap +// Enable USART2 Pin Remapping +#define RTE_USART2_REMAP_FULL 0 + +// USART2_TX Pin <0=>Not Used <1=>PD5 +#define RTE_USART2_TX_PORT_ID_FULL 0 +#if (RTE_USART2_TX_PORT_ID_FULL == 0) +#define RTE_USART2_TX_FULL 0 +#elif (RTE_USART2_TX_PORT_ID_FULL == 1) +#define RTE_USART2_TX_FULL 1 +#define RTE_USART2_TX_PORT_FULL GPIOD +#define RTE_USART2_TX_BIT_FULL 5 +#else +#error "Invalid USART2_TX Pin Configuration!" +#endif + +// USART2_RX Pin <0=>Not Used <1=>PD6 +#define RTE_USART2_RX_PORT_ID_FULL 0 +#if (RTE_USART2_RX_PORT_ID_FULL == 0) +#define RTE_USART2_RX_FULL 0 +#elif (RTE_USART2_RX_PORT_ID_FULL == 1) +#define RTE_USART2_RX_FULL 1 +#define RTE_USART2_RX_PORT_FULL GPIOD +#define RTE_USART2_RX_BIT_FULL 6 +#else +#error "Invalid USART2_RX Pin Configuration!" +#endif + +// USART2_CK Pin <0=>Not Used <1=>PD7 +#define RTE_USART2_CK_PORT_ID_FULL 0 +#if (RTE_USART2_CK_PORT_ID_FULL == 0) +#define RTE_USART2_CK_FULL 0 +#elif (RTE_USART2_CK_PORT_ID_FULL == 1) +#define RTE_USART2_CK_FULL 1 +#define RTE_USART2_CK_PORT_FULL GPIOD +#define RTE_USART2_CK_BIT_FULL 7 +#else +#error "Invalid USART2_CK Pin Configuration!" +#endif + +// USART2_CTS Pin <0=>Not Used <1=>PD3 +#define RTE_USART2_CTS_PORT_ID_FULL 0 +#if (RTE_USART2_CTS_PORT_ID_FULL == 0) +#define RTE_USART2_CTS_FULL 0 +#elif (RTE_USART2_CTS_PORT_ID_FULL == 1) +#define RTE_USART2_CTS_FULL 1 +#define RTE_USART2_CTS_PORT_FULL GPIOD +#define RTE_USART2_CTS_BIT_FULL 3 +#else +#error "Invalid USART2_CTS Pin Configuration!" +#endif + +// USART2_RTS Pin <0=>Not Used <1=>PD4 +#define RTE_USART2_RTS_PORT_ID_FULL 0 +#if (RTE_USART2_RTS_PORT_ID_FULL == 0) +#define RTE_USART2_RTS_FULL 0 +#elif (RTE_USART2_RTS_PORT_ID_FULL == 1) +#define RTE_USART2_RTS_FULL 1 +#define RTE_USART2_RTS_PORT_FULL GPIOD +#define RTE_USART2_RTS_BIT_FULL 4 +#else +#error "Invalid USART2_RTS Pin Configuration!" +#endif +// + +#if (RTE_USART2_REMAP_FULL) +#define RTE_USART2_AF_REMAP AFIO_USART2_REMAP +#define RTE_USART2_TX RTE_USART2_TX_FULL +#define RTE_USART2_TX_PORT RTE_USART2_TX_PORT_FULL +#define RTE_USART2_TX_BIT RTE_USART2_TX_BIT_FULL +#define RTE_USART2_RX RTE_USART2_RX_FULL +#define RTE_USART2_RX_PORT RTE_USART2_RX_PORT_FULL +#define RTE_USART2_RX_BIT RTE_USART2_RX_BIT_FULL +#define RTE_USART2_CK RTE_USART2_CK_FULL +#define RTE_USART2_CK_PORT RTE_USART2_CK_PORT_FULL +#define RTE_USART2_CK_BIT RTE_USART2_CK_BIT_FULL +#define RTE_USART2_CTS RTE_USART2_CTS_FULL +#define RTE_USART2_CTS_PORT RTE_USART2_CTS_PORT_FULL +#define RTE_USART2_CTS_BIT RTE_USART2_CTS_BIT_FULL +#define RTE_USART2_RTS RTE_USART2_RTS_FULL +#define RTE_USART2_RTS_PORT RTE_USART2_RTS_PORT_FULL +#define RTE_USART2_RTS_BIT RTE_USART2_RTS_BIT_FULL +#else +#define RTE_USART2_AF_REMAP AFIO_USART2_NO_REMAP +#define RTE_USART2_TX RTE_USART2_TX_DEF +#define RTE_USART2_TX_PORT RTE_USART2_TX_PORT_DEF +#define RTE_USART2_TX_BIT RTE_USART2_TX_BIT_DEF +#define RTE_USART2_RX RTE_USART2_RX_DEF +#define RTE_USART2_RX_PORT RTE_USART2_RX_PORT_DEF +#define RTE_USART2_RX_BIT RTE_USART2_RX_BIT_DEF +#define RTE_USART2_CK RTE_USART2_CK_DEF +#define RTE_USART2_CK_PORT RTE_USART2_CK_PORT_DEF +#define RTE_USART2_CK_BIT RTE_USART2_CK_BIT_DEF +#define RTE_USART2_CTS RTE_USART2_CTS_DEF +#define RTE_USART2_CTS_PORT RTE_USART2_CTS_PORT_DEF +#define RTE_USART2_CTS_BIT RTE_USART2_CTS_BIT_DEF +#define RTE_USART2_RTS RTE_USART2_RTS_DEF +#define RTE_USART2_RTS_PORT RTE_USART2_RTS_PORT_DEF +#define RTE_USART2_RTS_BIT RTE_USART2_RTS_BIT_DEF +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <6=>6 +// Selects DMA Channel (only Channel 6 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Set DMA Channel priority +// +#define RTE_USART2_RX_DMA 0 +#define RTE_USART2_RX_DMA_NUMBER 1 +#define RTE_USART2_RX_DMA_CHANNEL 6 +#define RTE_USART2_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <7=>7 +// Selects DMA Channel (only Channel 7 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Set DMA Channel priority +// +#define RTE_USART2_TX_DMA 0 +#define RTE_USART2_TX_DMA_NUMBER 1 +#define RTE_USART2_TX_DMA_CHANNEL 7 +#define RTE_USART2_TX_DMA_PRIORITY 0 + +// + + +// USART3 (Universal synchronous asynchronous receiver transmitter) +// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART +#define RTE_USART3 0 + +// USART3_TX Pin <0=>Not Used <1=>PB10 +#define RTE_USART3_TX_PORT_ID_DEF 0 +#if (RTE_USART3_TX_PORT_ID_DEF == 0) +#define RTE_USART3_TX_DEF 0 +#elif (RTE_USART3_TX_PORT_ID_DEF == 1) +#define RTE_USART3_TX_DEF 1 +#define RTE_USART3_TX_PORT_DEF GPIOB +#define RTE_USART3_TX_BIT_DEF 10 +#else +#error "Invalid USART3_TX Pin Configuration!" +#endif + +// USART3_RX Pin <0=>Not Used <1=>PB11 +#define RTE_USART3_RX_PORT_ID_DEF 0 +#if (RTE_USART3_RX_PORT_ID_DEF == 0) +#define RTE_USART3_RX_DEF 0 +#elif (RTE_USART3_RX_PORT_ID_DEF == 1) +#define RTE_USART3_RX_DEF 1 +#define RTE_USART3_RX_PORT_DEF GPIOB +#define RTE_USART3_RX_BIT_DEF 11 +#else +#error "Invalid USART3_RX Pin Configuration!" +#endif + +// USART3_CK Pin <0=>Not Used <1=>PB12 +#define RTE_USART3_CK_PORT_ID_DEF 0 +#if (RTE_USART3_CK_PORT_ID_DEF == 0) +#define RTE_USART3_CK_DEF 0 +#elif (RTE_USART3_CK_PORT_ID_DEF == 1) +#define RTE_USART3_CK_DEF 1 +#define RTE_USART3_CK_PORT_DEF GPIOB +#define RTE_USART3_CK_BIT_DEF 12 +#else +#error "Invalid USART3_CK Pin Configuration!" +#endif + +// USART3_CTS Pin <0=>Not Used <1=>PB13 +#define RTE_USART3_CTS_PORT_ID_DEF 0 +#if (RTE_USART3_CTS_PORT_ID_DEF == 0) +#define RTE_USART3_CTS_DEF 0 +#elif (RTE_USART3_CTS_PORT_ID_DEF == 1) +#define RTE_USART3_CTS_DEF 1 +#define RTE_USART3_CTS_PORT_DEF GPIOB +#define RTE_USART3_CTS_BIT_DEF 13 +#else +#error "Invalid USART3_CTS Pin Configuration!" +#endif + +// USART3_RTS Pin <0=>Not Used <1=>PB14 +#define RTE_USART3_RTS_PORT_ID_DEF 0 +#if (RTE_USART3_RTS_PORT_ID_DEF == 0) +#define RTE_USART3_RTS_DEF 0 +#elif (RTE_USART3_RTS_PORT_ID_DEF == 1) +#define RTE_USART3_RTS_DEF 1 +#define RTE_USART3_RTS_PORT_DEF GPIOB +#define RTE_USART3_RTS_BIT_DEF 14 +#else +#error "Invalid USART3_RTS Pin Configuration!" +#endif + +// USART3 Partial Pin Remap +// Enable USART3 Partial Pin Remapping +#define RTE_USART3_REMAP_PARTIAL 0 + +// USART3_TX Pin <0=>Not Used <1=>PC10 +#define RTE_USART3_TX_PORT_ID_PARTIAL 0 +#if (RTE_USART3_TX_PORT_ID_PARTIAL == 0) +#define RTE_USART3_TX_PARTIAL 0 +#elif (RTE_USART3_TX_PORT_ID_PARTIAL == 1) +#define RTE_USART3_TX_PARTIAL 1 +#define RTE_USART3_TX_PORT_PARTIAL GPIOC +#define RTE_USART3_TX_BIT_PARTIAL 10 +#else +#error "Invalid USART3_TX Pin Configuration!" +#endif + +// USART3_RX Pin <0=>Not Used <1=>PC11 +#define RTE_USART3_RX_PORT_ID_PARTIAL 0 +#if (RTE_USART3_RX_PORT_ID_PARTIAL == 0) +#define RTE_USART3_RX_PARTIAL 0 +#elif (RTE_USART3_RX_PORT_ID_PARTIAL == 1) +#define RTE_USART3_RX_PARTIAL 1 +#define RTE_USART3_RX_PORT_PARTIAL GPIOC +#define RTE_USART3_RX_BIT_PARTIAL 11 +#else +#error "Invalid USART3_RX Pin Configuration!" +#endif + +// USART3_CK Pin <0=>Not Used <1=>PC12 +#define RTE_USART3_CK_PORT_ID_PARTIAL 0 +#if (RTE_USART3_CK_PORT_ID_PARTIAL == 0) +#define RTE_USART3_CK_PARTIAL 0 +#elif (RTE_USART3_CK_PORT_ID_PARTIAL == 1) +#define RTE_USART3_CK_PARTIAL 1 +#define RTE_USART3_CK_PORT_PARTIAL GPIOC +#define RTE_USART3_CK_BIT_PARTIAL 12 +#else +#error "Invalid USART3_CK Pin Configuration!" +#endif +// + +// USART3 Full Pin Remap +// Enable USART3 Full Pin Remapping +#define RTE_USART3_REMAP_FULL 0 + +// USART3_TX Pin <0=>Not Used <1=>PD8 +#define RTE_USART3_TX_PORT_ID_FULL 0 +#if (RTE_USART3_TX_PORT_ID_FULL == 0) +#define RTE_USART3_TX_FULL 0 +#elif (RTE_USART3_TX_PORT_ID_FULL == 1) +#define RTE_USART3_TX_FULL 1 +#define RTE_USART3_TX_PORT_FULL GPIOD +#define RTE_USART3_TX_BIT_FULL 8 +#else +#error "Invalid USART3_TX Pin Configuration!" +#endif + +// USART3_RX Pin <0=>Not Used <1=>PD9 +#define RTE_USART3_RX_PORT_ID_FULL 0 +#if (RTE_USART3_RX_PORT_ID_FULL == 0) +#define RTE_USART3_RX_FULL 0 +#elif (RTE_USART3_RX_PORT_ID_FULL == 1) +#define RTE_USART3_RX_FULL 1 +#define RTE_USART3_RX_PORT_FULL GPIOD +#define RTE_USART3_RX_BIT_FULL 9 +#else +#error "Invalid USART3_RX Pin Configuration!" +#endif + +// USART3_CK Pin <0=>Not Used <1=>PD10 +#define RTE_USART3_CK_PORT_ID_FULL 0 +#if (RTE_USART3_CK_PORT_ID_FULL == 0) +#define RTE_USART3_CK_FULL 0 +#elif (RTE_USART3_CK_PORT_ID_FULL == 1) +#define RTE_USART3_CK_FULL 1 +#define RTE_USART3_CK_PORT_FULL GPIOD +#define RTE_USART3_CK_BIT_FULL 10 +#else +#error "Invalid USART3_CK Pin Configuration!" +#endif + +// USART3_CTS Pin <0=>Not Used <1=>PD11 +#define RTE_USART3_CTS_PORT_ID_FULL 0 +#if (RTE_USART3_CTS_PORT_ID_FULL == 0) +#define RTE_USART3_CTS_FULL 0 +#elif (RTE_USART3_CTS_PORT_ID_FULL == 1) +#define RTE_USART3_CTS_FULL 1 +#define RTE_USART3_CTS_PORT_FULL GPIOD +#define RTE_USART3_CTS_BIT_FULL 11 +#else +#error "Invalid USART3_CTS Pin Configuration!" +#endif + +// USART3_RTS Pin <0=>Not Used <1=>PD12 +#define RTE_USART3_RTS_PORT_ID_FULL 0 +#if (RTE_USART3_RTS_PORT_ID_FULL == 0) +#define RTE_USART3_RTS_FULL 0 +#elif (RTE_USART3_RTS_PORT_ID_FULL == 1) +#define RTE_USART3_RTS_FULL 1 +#define RTE_USART3_RTS_PORT_FULL GPIOD +#define RTE_USART3_RTS_BIT_FULL 12 +#else +#error "Invalid USART3_RTS Pin Configuration!" +#endif +// + +#if ((RTE_USART3_REMAP_PARTIAL == 1) && (RTE_USART3_REMAP_FULL == 1)) +#error "Invalid USART3 Pin Remap Configuration!" +#endif + +#if (RTE_USART3_REMAP_FULL) +#define RTE_USART3_AF_REMAP AFIO_USART3_REMAP_FULL +#define RTE_USART3_TX RTE_USART3_TX_FULL +#define RTE_USART3_TX_PORT RTE_USART3_TX_PORT_FULL +#define RTE_USART3_TX_BIT RTE_USART3_TX_BIT_FULL +#define RTE_USART3_RX RTE_USART3_RX_FULL +#define RTE_USART3_RX_PORT RTE_USART3_RX_PORT_FULL +#define RTE_USART3_RX_BIT RTE_USART3_RX_BIT_FULL +#define RTE_USART3_CK RTE_USART3_CK_FULL +#define RTE_USART3_CK_PORT RTE_USART3_CK_PORT_FULL +#define RTE_USART3_CK_BIT RTE_USART3_CK_BIT_FULL +#define RTE_USART3_CTS RTE_USART3_CTS_FULL +#define RTE_USART3_CTS_PORT RTE_USART3_CTS_PORT_FULL +#define RTE_USART3_CTS_BIT RTE_USART3_CTS_BIT_FULL +#define RTE_USART3_RTS RTE_USART3_RTS_FULL +#define RTE_USART3_RTS_PORT RTE_USART3_RTS_PORT_FULL +#define RTE_USART3_RTS_BIT RTE_USART3_RTS_BIT_FULL +#elif (RTE_USART3_REMAP_PARTIAL) +#define RTE_USART3_AF_REMAP AFIO_USART3_REMAP_PARTIAL +#define RTE_USART3_TX RTE_USART3_TX_PARTIAL +#define RTE_USART3_TX_PORT RTE_USART3_TX_PORT_PARTIAL +#define RTE_USART3_TX_BIT RTE_USART3_TX_BIT_PARTIAL +#define RTE_USART3_RX RTE_USART3_RX_PARTIAL +#define RTE_USART3_RX_PORT RTE_USART3_RX_PORT_PARTIAL +#define RTE_USART3_RX_BIT RTE_USART3_RX_BIT_PARTIAL +#define RTE_USART3_CK RTE_USART3_CK_PARTIAL +#define RTE_USART3_CK_PORT RTE_USART3_CK_PORT_PARTIAL +#define RTE_USART3_CK_BIT RTE_USART3_CK_BIT_PARTIAL +#define RTE_USART3_CTS RTE_USART3_CTS_DEF +#define RTE_USART3_CTS_PORT RTE_USART3_CTS_PORT_DEF +#define RTE_USART3_CTS_BIT RTE_USART3_CTS_BIT_DEF +#define RTE_USART3_RTS RTE_USART3_RTS_DEF +#define RTE_USART3_RTS_PORT RTE_USART3_RTS_PORT_DEF +#define RTE_USART3_RTS_BIT RTE_USART3_RTS_BIT_DEF +#else +#define RTE_USART3_AF_REMAP AFIO_USART3_NO_REMAP +#define RTE_USART3_TX RTE_USART3_TX_DEF +#define RTE_USART3_TX_PORT RTE_USART3_TX_PORT_DEF +#define RTE_USART3_TX_BIT RTE_USART3_TX_BIT_DEF +#define RTE_USART3_RX RTE_USART3_RX_DEF +#define RTE_USART3_RX_PORT RTE_USART3_RX_PORT_DEF +#define RTE_USART3_RX_BIT RTE_USART3_RX_BIT_DEF +#define RTE_USART3_CK RTE_USART3_CK_DEF +#define RTE_USART3_CK_PORT RTE_USART3_CK_PORT_DEF +#define RTE_USART3_CK_BIT RTE_USART3_CK_BIT_DEF +#define RTE_USART3_CTS RTE_USART3_CTS_DEF +#define RTE_USART3_CTS_PORT RTE_USART3_CTS_PORT_DEF +#define RTE_USART3_CTS_BIT RTE_USART3_CTS_BIT_DEF +#define RTE_USART3_RTS RTE_USART3_RTS_DEF +#define RTE_USART3_RTS_PORT RTE_USART3_RTS_PORT_DEF +#define RTE_USART3_RTS_BIT RTE_USART3_RTS_BIT_DEF +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <3=>3 +// Selects DMA Channel (only Channel 3 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Sets DMA Channel priority +// +#define RTE_USART3_RX_DMA 0 +#define RTE_USART3_RX_DMA_NUMBER 1 +#define RTE_USART3_RX_DMA_CHANNEL 3 +#define RTE_USART3_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <2=>2 +// Selects DMA Channel (only Channel 2 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Sets DMA Channel priority +// +#define RTE_USART3_TX_DMA 0 +#define RTE_USART3_TX_DMA_NUMBER 1 +#define RTE_USART3_TX_DMA_CHANNEL 2 +#define RTE_USART3_TX_DMA_PRIORITY 0 + +// + + +// UART4 (Universal asynchronous receiver transmitter) +// Configuration settings for Driver_USART4 in component ::CMSIS Driver:USART +#define RTE_UART4 0 +#define RTE_UART4_AF_REMAP AFIO_UNAVAILABLE_REMAP + +// UART4_TX Pin <0=>Not Used <1=>PC10 +#define RTE_UART4_TX_ID 0 +#if (RTE_UART4_TX_ID == 0) +#define RTE_UART4_TX 0 +#elif (RTE_UART4_TX_ID == 1) +#define RTE_UART4_TX 1 +#define RTE_UART4_TX_PORT GPIOC +#define RTE_UART4_TX_BIT 10 +#else +#error "Invalid UART4_TX Pin Configuration!" +#endif + +// UART4_RX Pin <0=>Not Used <1=>PC11 +#define RTE_UART4_RX_ID 0 +#if (RTE_UART4_RX_ID == 0) +#define RTE_UART4_RX 0 +#elif (RTE_UART4_RX_ID == 1) +#define RTE_UART4_RX 1 +#define RTE_UART4_RX_PORT GPIOC +#define RTE_UART4_RX_BIT 11 +#else +#error "Invalid UART4_RX Pin Configuration!" +#endif + + +// DMA Rx +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <3=>3 +// Selects DMA Channel (only Channel 3 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Sets DMA Channel priority +// +#define RTE_UART4_RX_DMA 0 +#define RTE_UART4_RX_DMA_NUMBER 2 +#define RTE_UART4_RX_DMA_CHANNEL 3 +#define RTE_UART4_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <5=>5 +// Selects DMA Channel (only Channel 5 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very high +// Sets DMA Channel priority +// +#define RTE_UART4_TX_DMA 0 +#define RTE_UART4_TX_DMA_NUMBER 2 +#define RTE_UART4_TX_DMA_CHANNEL 5 +#define RTE_UART4_TX_DMA_PRIORITY 0 + +// + + +// UART5 (Universal asynchronous receiver transmitter) +// Configuration settings for Driver_USART5 in component ::CMSIS Driver:USART +#define RTE_UART5 0 +#define RTE_UART5_AF_REMAP AFIO_UNAVAILABLE_REMAP + +// UART5_TX Pin <0=>Not Used <1=>PC12 +#define RTE_UART5_TX_ID 0 +#if (RTE_UART5_TX_ID == 0) +#define RTE_UART5_TX 0 +#elif (RTE_UART5_TX_ID == 1) +#define RTE_UART5_TX 1 +#define RTE_UART5_TX_PORT GPIOC +#define RTE_UART5_TX_BIT 12 +#else +#error "Invalid UART5_TX Pin Configuration!" +#endif + +// UART5_RX Pin <0=>Not Used <1=>PD2 +#define RTE_UART5_RX_ID 0 +#if (RTE_UART5_RX_ID == 0) +#define RTE_UART5_RX 0 +#elif (RTE_UART5_RX_ID == 1) +#define RTE_UART5_RX 1 +#define RTE_UART5_RX_PORT GPIOD +#define RTE_UART5_RX_BIT 2 +#else +#error "Invalid UART5_RX Pin Configuration!" +#endif +// + + +// I2C1 (Inter-integrated Circuit Interface 1) +// Configuration settings for Driver_I2C1 in component ::CMSIS Driver:I2C +#define RTE_I2C1 0 + +// I2C1_SCL Pin <0=>PB6 +#define RTE_I2C1_SCL_PORT_ID_DEF 0 +#if (RTE_I2C1_SCL_PORT_ID_DEF == 0) +#define RTE_I2C1_SCL_PORT_DEF GPIOB +#define RTE_I2C1_SCL_BIT_DEF 6 +#else +#error "Invalid I2C1_SCL Pin Configuration!" +#endif + +// I2C1_SDA Pin <0=>PB7 +#define RTE_I2C1_SDA_PORT_ID_DEF 0 +#if (RTE_I2C1_SDA_PORT_ID_DEF == 0) +#define RTE_I2C1_SDA_PORT_DEF GPIOB +#define RTE_I2C1_SDA_BIT_DEF 7 +#else +#error "Invalid I2C1_SCL Pin Configuration!" +#endif + +// I2C1 Pin Remap +// Enable I2C1 Pin Remapping +#define RTE_I2C1_REMAP_FULL 0 + +// I2C1_SCL Pin <0=>PB8 +#define RTE_I2C1_SCL_PORT_ID_FULL 0 +#if (RTE_I2C1_SCL_PORT_ID_FULL == 0) +#define RTE_I2C1_SCL_PORT_FULL GPIOB +#define RTE_I2C1_SCL_BIT_FULL 8 +#else +#error "Invalid I2C1_SCL Pin Configuration!" +#endif + +// I2C1_SDA Pin <0=>PB9 +#define RTE_I2C1_SDA_PORT_ID_FULL 0 +#if (RTE_I2C1_SDA_PORT_ID_FULL == 0) +#define RTE_I2C1_SDA_PORT_FULL GPIOB +#define RTE_I2C1_SDA_BIT_FULL 9 +#else +#error "Invalid I2C1_SCL Pin Configuration!" +#endif + +// + +#if (RTE_I2C1_REMAP_FULL) +#define RTE_I2C1_AF_REMAP AFIO_I2C1_REMAP +#define RTE_I2C1_SCL_PORT RTE_I2C1_SCL_PORT_FULL +#define RTE_I2C1_SCL_BIT RTE_I2C1_SCL_BIT_FULL +#define RTE_I2C1_SDA_PORT RTE_I2C1_SDA_PORT_FULL +#define RTE_I2C1_SDA_BIT RTE_I2C1_SDA_BIT_FULL +#else +#define RTE_I2C1_AF_REMAP AFIO_I2C1_NO_REMAP +#define RTE_I2C1_SCL_PORT RTE_I2C1_SCL_PORT_DEF +#define RTE_I2C1_SCL_BIT RTE_I2C1_SCL_BIT_DEF +#define RTE_I2C1_SDA_PORT RTE_I2C1_SDA_PORT_DEF +#define RTE_I2C1_SDA_BIT RTE_I2C1_SDA_BIT_DEF +#endif + + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <7=>7 +// Selects DMA Channel (only Channel 7 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_I2C1_RX_DMA 0 +#define RTE_I2C1_RX_DMA_NUMBER 1 +#define RTE_I2C1_RX_DMA_CHANNEL 7 +#define RTE_I2C1_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <6=>6 +// Selects DMA Channel (only Channel 6 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_I2C1_TX_DMA 0 +#define RTE_I2C1_TX_DMA_NUMBER 1 +#define RTE_I2C1_TX_DMA_CHANNEL 6 +#define RTE_I2C1_TX_DMA_PRIORITY 0 + +// + + +// I2C2 (Inter-integrated Circuit Interface 2) +// Configuration settings for Driver_I2C2 in component ::CMSIS Driver:I2C +#define RTE_I2C2 0 +#define RTE_I2C2_AF_REMAP AFIO_UNAVAILABLE_REMAP + +// I2C2_SCL Pin <0=>PB10 +#define RTE_I2C2_SCL_PORT_ID 0 +#if (RTE_I2C2_SCL_PORT_ID == 0) +#define RTE_I2C2_SCL_PORT GPIOB +#define RTE_I2C2_SCL_BIT 10 +#else +#error "Invalid I2C2_SCL Pin Configuration!" +#endif + +// I2C2_SDA Pin <0=>PB11 +#define RTE_I2C2_SDA_PORT_ID 0 +#if (RTE_I2C2_SDA_PORT_ID == 0) +#define RTE_I2C2_SDA_PORT GPIOB +#define RTE_I2C2_SDA_BIT 11 +#else +#error "Invalid I2C2_SCL Pin Configuration!" +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <5=>5 +// Selects DMA Channel (only Channel 5 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_I2C2_RX_DMA 1 +#define RTE_I2C2_RX_DMA_NUMBER 1 +#define RTE_I2C2_RX_DMA_CHANNEL 5 +#define RTE_I2C2_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <4=>4 +// Selects DMA Channel (only Channel 4 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_I2C2_TX_DMA 1 +#define RTE_I2C2_TX_DMA_NUMBER 1 +#define RTE_I2C2_TX_DMA_CHANNEL 4 +#define RTE_I2C2_TX_DMA_PRIORITY 0 + +// + + +// SPI1 (Serial Peripheral Interface 1) [Driver_SPI1] +// Configuration settings for Driver_SPI1 in component ::CMSIS Driver:SPI +#define RTE_SPI1 0 + +// SPI1_NSS Pin +// Configure Pin if exists +// GPIO Pxy (x = A..G, y = 0..15) +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SPI1_NSS_PIN 1 +#define RTE_SPI1_NSS_PORT GPIO_PORT(0) +#define RTE_SPI1_NSS_BIT 4 + +// SPI1_SCK Pin <0=>PA5 +#define RTE_SPI1_SCK_PORT_ID_DEF 0 +#if (RTE_SPI1_SCK_PORT_ID_DEF == 0) +#define RTE_SPI1_SCK_PORT_DEF GPIOA +#define RTE_SPI1_SCK_BIT_DEF 5 +#else +#error "Invalid SPI1_SCK Pin Configuration!" +#endif + +// SPI1_MISO Pin <0=>Not Used <1=>PA6 +#define RTE_SPI1_MISO_PORT_ID_DEF 0 +#if (RTE_SPI1_MISO_PORT_ID_DEF == 0) +#define RTE_SPI1_MISO_DEF 0 +#elif (RTE_SPI1_MISO_PORT_ID_DEF == 1) +#define RTE_SPI1_MISO_DEF 1 +#define RTE_SPI1_MISO_PORT_DEF GPIOA +#define RTE_SPI1_MISO_BIT_DEF 6 +#else +#error "Invalid SPI1_MISO Pin Configuration!" +#endif + +// SPI1_MOSI Pin <0=>Not Used <1=>PA7 +#define RTE_SPI1_MOSI_PORT_ID_DEF 0 +#if (RTE_SPI1_MOSI_PORT_ID_DEF == 0) +#define RTE_SPI1_MOSI_DEF 0 +#elif (RTE_SPI1_MOSI_PORT_ID_DEF == 1) +#define RTE_SPI1_MOSI_DEF 1 +#define RTE_SPI1_MOSI_PORT_DEF GPIOA +#define RTE_SPI1_MOSI_BIT_DEF 7 +#else +#error "Invalid SPI1_MISO Pin Configuration!" +#endif + +// SPI1 Pin Remap +// Enable SPI1 Pin Remapping. +#define RTE_SPI1_REMAP 0 + +// SPI1_SCK Pin <0=>PB3 +#define RTE_SPI1_SCK_PORT_ID_FULL 0 +#if (RTE_SPI1_SCK_PORT_ID_FULL == 0) +#define RTE_SPI1_SCK_PORT_FULL GPIOB +#define RTE_SPI1_SCK_BIT_FULL 3 +#else +#error "Invalid SPI1_SCK Pin Configuration!" +#endif + +// SPI1_MISO Pin <0=>Not Used <1=>PB4 +#define RTE_SPI1_MISO_PORT_ID_FULL 0 +#if (RTE_SPI1_MISO_PORT_ID_FULL == 0) +#define RTE_SPI1_MISO_FULL 0 +#elif (RTE_SPI1_MISO_PORT_ID_FULL == 1) +#define RTE_SPI1_MISO_FULL 1 +#define RTE_SPI1_MISO_PORT_FULL GPIOB +#define RTE_SPI1_MISO_BIT_FULL 4 +#else +#error "Invalid SPI1_MISO Pin Configuration!" +#endif +// SPI1_MOSI Pin <0=>Not Used <1=>PB5 +#define RTE_SPI1_MOSI_PORT_ID_FULL 0 +#if (RTE_SPI1_MOSI_PORT_ID_FULL == 0) +#define RTE_SPI1_MOSI_FULL 0 +#elif (RTE_SPI1_MOSI_PORT_ID_FULL == 1) +#define RTE_SPI1_MOSI_FULL 1 +#define RTE_SPI1_MOSI_PORT_FULL GPIOB +#define RTE_SPI1_MOSI_BIT_FULL 5 +#else +#error "Invalid SPI1_MOSI Pin Configuration!" +#endif + +// + +#if (RTE_SPI1_REMAP) +#define RTE_SPI1_AF_REMAP AFIO_SPI1_REMAP +#define RTE_SPI1_SCK_PORT RTE_SPI1_SCK_PORT_FULL +#define RTE_SPI1_SCK_BIT RTE_SPI1_SCK_BIT_FULL +#define RTE_SPI1_MISO RTE_SPI1_MISO_FULL +#define RTE_SPI1_MISO_PORT RTE_SPI1_MISO_PORT_FULL +#define RTE_SPI1_MISO_BIT RTE_SPI1_MISO_BIT_FULL +#define RTE_SPI1_MOSI RTE_SPI1_MOSI_FULL +#define RTE_SPI1_MOSI_PORT RTE_SPI1_MOSI_PORT_FULL +#define RTE_SPI1_MOSI_BIT RTE_SPI1_MOSI_BIT_FULL +#else +#define RTE_SPI1_AF_REMAP AFIO_SPI1_NO_REMAP +#define RTE_SPI1_SCK_PORT RTE_SPI1_SCK_PORT_DEF +#define RTE_SPI1_SCK_BIT RTE_SPI1_SCK_BIT_DEF +#define RTE_SPI1_MISO RTE_SPI1_MISO_DEF +#define RTE_SPI1_MISO_PORT RTE_SPI1_MISO_PORT_DEF +#define RTE_SPI1_MISO_BIT RTE_SPI1_MISO_BIT_DEF +#define RTE_SPI1_MOSI RTE_SPI1_MOSI_DEF +#define RTE_SPI1_MOSI_PORT RTE_SPI1_MOSI_PORT_DEF +#define RTE_SPI1_MOSI_BIT RTE_SPI1_MOSI_BIT_DEF +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <2=>2 +// Selects DMA Channel (only Channel 2 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI1_RX_DMA 0 +#define RTE_SPI1_RX_DMA_NUMBER 1 +#define RTE_SPI1_RX_DMA_CHANNEL 2 +#define RTE_SPI1_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <3=>3 +// Selects DMA Channel (only Channel 3 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI1_TX_DMA 0 +#define RTE_SPI1_TX_DMA_NUMBER 1 +#define RTE_SPI1_TX_DMA_CHANNEL 3 +#define RTE_SPI1_TX_DMA_PRIORITY 0 + +// + + +// SPI2 (Serial Peripheral Interface 2) [Driver_SPI2] +// Configuration settings for Driver_SPI2 in component ::CMSIS Driver:SPI +#define RTE_SPI2 0 + +// SPI2_NSS Pin +// Configure Pin if exists +// GPIO Pxy (x = A..G, y = 0..15) +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SPI2_NSS_PIN 1 +#define RTE_SPI2_NSS_PORT GPIO_PORT(1) +#define RTE_SPI2_NSS_BIT 12 + +// SPI2_SCK Pin <0=>PB13 +#define RTE_SPI2_SCK_PORT_ID 0 +#if (RTE_SPI2_SCK_PORT_ID == 0) +#define RTE_SPI2_SCK_PORT GPIOB +#define RTE_SPI2_SCK_BIT 13 +#define RTE_SPI2_SCK_REMAP 0 +#else +#error "Invalid SPI2_SCK Pin Configuration!" +#endif + +// SPI2_MISO Pin <0=>Not Used <1=>PB14 +#define RTE_SPI2_MISO_PORT_ID 0 +#if (RTE_SPI2_MISO_PORT_ID == 0) +#define RTE_SPI2_MISO 0 +#elif (RTE_SPI2_MISO_PORT_ID == 1) +#define RTE_SPI2_MISO 1 +#define RTE_SPI2_MISO_PORT GPIOB +#define RTE_SPI2_MISO_BIT 14 +#define RTE_SPI2_MISO_REMAP 0 +#else +#error "Invalid SPI2_MISO Pin Configuration!" +#endif + +// SPI2_MOSI Pin <0=>Not Used <1=>PB15 +#define RTE_SPI2_MOSI_PORT_ID 0 +#if (RTE_SPI2_MOSI_PORT_ID == 0) +#define RTE_SPI2_MOSI 0 +#elif (RTE_SPI2_MOSI_PORT_ID == 1) +#define RTE_SPI2_MOSI 1 +#define RTE_SPI2_MOSI_PORT GPIOB +#define RTE_SPI2_MOSI_BIT 15 +#define RTE_SPI2_MOSI_REMAP 0 +#else +#error "Invalid SPI2_MISO Pin Configuration!" +#endif + +// DMA Rx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <4=>4 +// Selects DMA Channel (only Channel 4 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI2_RX_DMA 0 +#define RTE_SPI2_RX_DMA_NUMBER 1 +#define RTE_SPI2_RX_DMA_CHANNEL 4 +#define RTE_SPI2_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <1=>1 +// Selects DMA Number (only DMA1 can be used) +// Channel <5=>5 +// Selects DMA Channel (only Channel 5 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI2_TX_DMA 0 +#define RTE_SPI2_TX_DMA_NUMBER 1 +#define RTE_SPI2_TX_DMA_CHANNEL 5 +#define RTE_SPI2_TX_DMA_PRIORITY 0 + +// + + +// SPI3 (Serial Peripheral Interface 3) [Driver_SPI3] +// Configuration settings for Driver_SPI3 in component ::CMSIS Driver:SPI +#define RTE_SPI3 0 + +// SPI3_NSS Pin +// Configure Pin if exists +// GPIO Pxy (x = A..G, y = 0..15) +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SPI3_NSS_PIN 1 +#define RTE_SPI3_NSS_PORT GPIO_PORT(0) +#define RTE_SPI3_NSS_BIT 15 + +// SPI3_SCK Pin <0=>PB3 +#define RTE_SPI3_SCK_PORT_ID_DEF 0 +#if (RTE_SPI3_SCK_PORT_ID_DEF == 0) +#define RTE_SPI3_SCK_PORT_DEF GPIOB +#define RTE_SPI3_SCK_BIT_DEF 3 +#else +#error "Invalid SPI3_SCK Pin Configuration!" +#endif + +// SPI3_MISO Pin <0=>Not Used <1=>PB4 +#define RTE_SPI3_MISO_PORT_ID_DEF 0 +#if (RTE_SPI3_MISO_PORT_ID_DEF == 0) +#define RTE_SPI3_MISO_DEF 0 +#elif (RTE_SPI3_MISO_PORT_ID_DEF == 1) +#define RTE_SPI3_MISO_DEF 1 +#define RTE_SPI3_MISO_PORT_DEF GPIOB +#define RTE_SPI3_MISO_BIT_DEF 4 +#else +#error "Invalid SPI3_MISO Pin Configuration!" +#endif + +// SPI3_MOSI <0=>Not Used Pin <1=>PB5 +#define RTE_SPI3_MOSI_PORT_ID_DEF 0 +#if (RTE_SPI3_MOSI_PORT_ID_DEF == 0) +#define RTE_SPI3_MOSI_DEF 0 +#elif (RTE_SPI3_MOSI_PORT_ID_DEF == 1) +#define RTE_SPI3_MOSI_DEF 1 +#define RTE_SPI3_MOSI_PORT_DEF GPIOB +#define RTE_SPI3_MOSI_BIT_DEF 5 +#else +#error "Invalid SPI3_MOSI Pin Configuration!" +#endif + +// SPI3 Pin Remap +// Enable SPI3 Pin Remapping. +// SPI 3 Pin Remapping is available only in connectivity line devices! +#define RTE_SPI3_REMAP 0 + +// SPI3_SCK Pin <0=>PC10 +#define RTE_SPI3_SCK_PORT_ID_FULL 0 +#if (RTE_SPI3_SCK_PORT_ID_FULL == 0) +#define RTE_SPI3_SCK_PORT_FULL GPIOC +#define RTE_SPI3_SCK_BIT_FULL 10 +#else +#error "Invalid SPI3_SCK Pin Configuration!" +#endif + +// SPI3_MISO Pin <0=>Not Used <1=>PC11 +#define RTE_SPI3_MISO_PORT_ID_FULL 0 +#if (RTE_SPI3_MISO_PORT_ID_FULL == 0) +#define RTE_SPI3_MISO_FULL 0 +#elif (RTE_SPI3_MISO_PORT_ID_FULL == 1) +#define RTE_SPI3_MISO_FULL 1 +#define RTE_SPI3_MISO_PORT_FULL GPIOC +#define RTE_SPI3_MISO_BIT_FULL 11 +#else +#error "Invalid SPI3_MISO Pin Configuration!" +#endif +// SPI3_MOSI Pin <0=>Not Used <1=>PC12 +#define RTE_SPI3_MOSI_PORT_ID_FULL 0 +#if (RTE_SPI3_MOSI_PORT_ID_FULL == 0) +#define RTE_SPI3_MOSI_FULL 0 +#elif (RTE_SPI3_MOSI_PORT_ID_FULL == 1) +#define RTE_SPI3_MOSI_FULL 1 +#define RTE_SPI3_MOSI_PORT_FULL GPIOC +#define RTE_SPI3_MOSI_BIT_FULL 12 +#else +#error "Invalid SPI3_MOSI Pin Configuration!" +#endif + +// + +#if (RTE_SPI3_REMAP) +#define RTE_SPI3_AF_REMAP AFIO_SPI3_REMAP +#define RTE_SPI3_SCK_PORT RTE_SPI3_SCK_PORT_FULL +#define RTE_SPI3_SCK_BIT RTE_SPI3_SCK_BIT_FULL +#define RTE_SPI3_MISO RTE_SPI3_MISO_FULL +#define RTE_SPI3_MISO_PORT RTE_SPI3_MISO_PORT_FULL +#define RTE_SPI3_MISO_BIT RTE_SPI3_MISO_BIT_FULL +#define RTE_SPI3_MOSI RTE_SPI3_MOSI_FULL +#define RTE_SPI3_MOSI_PORT RTE_SPI3_MOSI_PORT_FULL +#define RTE_SPI3_MOSI_BIT RTE_SPI3_MOSI_BIT_FULL +#else +#define RTE_SPI3_AF_REMAP AFIO_SPI3_NO_REMAP +#define RTE_SPI3_SCK_PORT RTE_SPI3_SCK_PORT_DEF +#define RTE_SPI3_SCK_BIT RTE_SPI3_SCK_BIT_DEF +#define RTE_SPI3_MISO RTE_SPI3_MISO_DEF +#define RTE_SPI3_MISO_PORT RTE_SPI3_MISO_PORT_DEF +#define RTE_SPI3_MISO_BIT RTE_SPI3_MISO_BIT_DEF +#define RTE_SPI3_MOSI RTE_SPI3_MOSI_DEF +#define RTE_SPI3_MOSI_PORT RTE_SPI3_MOSI_PORT_DEF +#define RTE_SPI3_MOSI_BIT RTE_SPI3_MOSI_BIT_DEF +#endif + +// DMA Rx +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <1=>1 +// Selects DMA Channel (only Channel 1 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI3_RX_DMA 0 +#define RTE_SPI3_RX_DMA_NUMBER 2 +#define RTE_SPI3_RX_DMA_CHANNEL 1 +#define RTE_SPI3_RX_DMA_PRIORITY 0 + +// DMA Tx +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <2=>2 +// Selects DMA Channel (only Channel 2 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SPI3_TX_DMA 0 +#define RTE_SPI3_TX_DMA_NUMBER 2 +#define RTE_SPI3_TX_DMA_CHANNEL 2 +#define RTE_SPI3_TX_DMA_PRIORITY 0 + +// + + +// SDIO (Secure Digital Input/Output) [Driver_MCI0] +// Configuration settings for Driver_MCI0 in component ::CMSIS Driver:MCI +#define RTE_SDIO 0 + +// SDIO Peripheral Bus +// SDIO_CK Pin <0=>PC12 +#define RTE_SDIO_CK_PORT_ID 0 +#if (RTE_SDIO_CK_PORT_ID == 0) + #define RTE_SDIO_CK_PORT GPIOC + #define RTE_SDIO_CK_PIN 12 +#else + #error "Invalid SDIO_CLK Pin Configuration!" +#endif +// SDIO_CMD Pin <0=>PD2 +#define RTE_SDIO_CMD_PORT_ID 0 +#if (RTE_SDIO_CMD_PORT_ID == 0) + #define RTE_SDIO_CMD_PORT GPIOD + #define RTE_SDIO_CMD_PIN 2 +#else + #error "Invalid SDIO_CMD Pin Configuration!" +#endif +// SDIO_D0 Pin <0=>PC8 +#define RTE_SDIO_D0_PORT_ID 0 +#if (RTE_SDIO_D0_PORT_ID == 0) + #define RTE_SDIO_D0_PORT GPIOC + #define RTE_SDIO_D0_PIN 8 +#else + #error "Invalid SDIO_DAT0 Pin Configuration!" +#endif +// SDIO_D[1 .. 3] +#define RTE_SDIO_BUS_WIDTH_4 1 +// SDIO_D1 Pin <0=>PC9 +#define RTE_SDIO_D1_PORT_ID 0 +#if (RTE_SDIO_D1_PORT_ID == 0) + #define RTE_SDIO_D1_PORT GPIOC + #define RTE_SDIO_D1_PIN 9 +#else + #error "Invalid SDIO_D1 Pin Configuration!" +#endif +// SDIO_D2 Pin <0=>PC10 +#define RTE_SDIO_D2_PORT_ID 0 +#if (RTE_SDIO_D2_PORT_ID == 0) + #define RTE_SDIO_D2_PORT GPIOC + #define RTE_SDIO_D2_PIN 10 +#else + #error "Invalid SDIO_D2 Pin Configuration!" +#endif +// SDIO_D3 Pin <0=>PC11 +#define RTE_SDIO_D3_PORT_ID 0 +#if (RTE_SDIO_D3_PORT_ID == 0) + #define RTE_SDIO_D3_PORT GPIOC + #define RTE_SDIO_D3_PIN 11 +#else + #error "Invalid SDIO_D3 Pin Configuration!" +#endif +// SDIO_D[1 .. 3] +// SDIO_D[4 .. 7] +#define RTE_SDIO_BUS_WIDTH_8 0 +// SDIO_D4 Pin <0=>PB8 +#define RTE_SDIO_D4_PORT_ID 0 +#if (RTE_SDIO_D4_PORT_ID == 0) + #define RTE_SDIO_D4_PORT GPIOB + #define RTE_SDIO_D4_PIN 8 +#else + #error "Invalid SDIO_D4 Pin Configuration!" +#endif +// SDIO_D5 Pin <0=>PB9 +#define RTE_SDIO_D5_PORT_ID 0 +#if (RTE_SDIO_D5_PORT_ID == 0) + #define RTE_SDIO_D5_PORT GPIOB + #define RTE_SDIO_D5_PIN 9 +#else + #error "Invalid SDIO_D5 Pin Configuration!" +#endif +// SDIO_D6 Pin <0=>PC6 +#define RTE_SDIO_D6_PORT_ID 0 +#if (RTE_SDIO_D6_PORT_ID == 0) + #define RTE_SDIO_D6_PORT GPIOC + #define RTE_SDIO_D6_PIN 6 +#else + #error "Invalid SDIO_D6 Pin Configuration!" +#endif +// SDIO_D7 Pin <0=>PC7 +#define RTE_SDIO_D7_PORT_ID 0 +#if (RTE_SDIO_D7_PORT_ID == 0) + #define RTE_SDIO_D7_PORT GPIOC + #define RTE_SDIO_D7_PIN 7 +#else + #error "Invalid SDIO_D7 Pin Configuration!" +#endif +// SDIO_D[4 .. 7] +// SDIO Peripheral Bus + +// Card Detect Pin +// Configure Pin if exists +// GPIO Pxy (x = A..H, y = 0..15) or (x = I, y = 0..11) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SDIO_CD_EN 1 +#define RTE_SDIO_CD_ACTIVE 0 +#define RTE_SDIO_CD_PORT GPIO_PORT(5) +#define RTE_SDIO_CD_PIN 11 + +// Write Protect Pin +// Configure Pin if exists +// GPIO Pxy (x = A..H, y = 0..15) or (x = I, y = 0..11) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_SDIO_WP_EN 0 +#define RTE_SDIO_WP_ACTIVE 1 +#define RTE_SDIO_WP_PORT GPIO_PORT(0) +#define RTE_SDIO_WP_PIN 10 + +// DMA +// Number <2=>2 +// Selects DMA Number (only DMA2 can be used) +// Channel <4=>4 +// Selects DMA Channel (only Channel 4 can be used) +// Priority <0=>Low <1=>Medium <2=>High <3=>Very High +// Selects DMA Priority +// +#define RTE_SDIO_DMA_NUMBER 2 +#define RTE_SDIO_DMA_CHANNEL 4 +#define RTE_SDIO_DMA_PRIORITY 0 + +// + + +// CAN1 (Controller Area Network 1) [Driver_CAN1] +// Configuration settings for Driver_CAN1 in component ::CMSIS Driver:CAN +#define RTE_CAN1 0 + +// CAN1_RX Pin <0=>PA11 <1=>PB8 <2=>PD0 +#define RTE_CAN1_RX_PORT_ID 0 +#if (RTE_CAN1_RX_PORT_ID == 0) +#define RTE_CAN1_RX_PORT GPIOA +#define RTE_CAN1_RX_BIT 11 +#elif (RTE_CAN1_RX_PORT_ID == 1) +#define RTE_CAN1_RX_PORT GPIOB +#define RTE_CAN1_RX_BIT 8 +#elif (RTE_CAN1_RX_PORT_ID == 2) +#define RTE_CAN1_RX_PORT GPIOD +#define RTE_CAN1_RX_BIT 0 +#else +#error "Invalid CAN1_RX Pin Configuration!" +#endif + +// CAN1_TX Pin <0=>PA12 <1=>PB9 <2=>PD1 +#define RTE_CAN1_TX_PORT_ID 0 +#if (RTE_CAN1_TX_PORT_ID == 0) +#define RTE_CAN1_TX_PORT GPIOA +#define RTE_CAN1_TX_BIT 12 +#elif (RTE_CAN1_TX_PORT_ID == 1) +#define RTE_CAN1_TX_PORT GPIOB +#define RTE_CAN1_TX_BIT 9 +#elif (RTE_CAN1_TX_PORT_ID == 2) +#define RTE_CAN1_TX_PORT GPIOD +#define RTE_CAN1_TX_BIT 1 +#else +#error "Invalid CAN1_TX Pin Configuration!" +#endif + +// + + +// CAN2 (Controller Area Network 2) [Driver_CAN2] +// Configuration settings for Driver_CAN2 in component ::CMSIS Driver:CAN +#define RTE_CAN2 0 + +// CAN2_RX Pin <0=>PB5 <1=>PB12 +#define RTE_CAN2_RX_PORT_ID 0 +#if (RTE_CAN2_RX_PORT_ID == 0) +#define RTE_CAN2_RX_PORT GPIOB +#define RTE_CAN2_RX_BIT 5 +#elif (RTE_CAN2_RX_PORT_ID == 1) +#define RTE_CAN2_RX_PORT GPIOB +#define RTE_CAN2_RX_BIT 12 +#else +#error "Invalid CAN2_RX Pin Configuration!" +#endif + +// CAN2_TX Pin <0=>PB6 <1=>PB13 +#define RTE_CAN2_TX_PORT_ID 0 +#if (RTE_CAN2_TX_PORT_ID == 0) +#define RTE_CAN2_TX_PORT GPIOB +#define RTE_CAN2_TX_BIT 6 +#elif (RTE_CAN2_TX_PORT_ID == 1) +#define RTE_CAN2_TX_PORT GPIOB +#define RTE_CAN2_TX_BIT 13 +#else +#error "Invalid CAN2_TX Pin Configuration!" +#endif + +// + + +// ETH (Ethernet Interface) [Driver_ETH_MAC0] +// Configuration settings for Driver_ETH_MAC0 in component ::CMSIS Driver:Ethernet MAC +#define RTE_ETH 0 + +// MII (Media Independent Interface) +// Enable Media Independent Interface pin configuration +#define RTE_ETH_MII 0 + +// ETH_MII_TX_CLK Pin <0=>PC3 +#define RTE_ETH_MII_TX_CLK_PORT_ID 0 +#if (RTE_ETH_MII_TX_CLK_PORT_ID == 0) +#define RTE_ETH_MII_TX_CLK_PORT GPIOC +#define RTE_ETH_MII_TX_CLK_PIN 3 +#else +#error "Invalid ETH_MII_TX_CLK Pin Configuration!" +#endif +// ETH_MII_TXD0 Pin <0=>PB12 +#define RTE_ETH_MII_TXD0_PORT_ID 0 +#if (RTE_ETH_MII_TXD0_PORT_ID == 0) +#define RTE_ETH_MII_TXD0_PORT GPIOB +#define RTE_ETH_MII_TXD0_PIN 12 +#else +#error "Invalid ETH_MII_TXD0 Pin Configuration!" +#endif +// ETH_MII_TXD1 Pin <0=>PB13 +#define RTE_ETH_MII_TXD1_PORT_ID 0 +#if (RTE_ETH_MII_TXD1_PORT_ID == 0) +#define RTE_ETH_MII_TXD1_PORT GPIOB +#define RTE_ETH_MII_TXD1_PIN 13 +#else +#error "Invalid ETH_MII_TXD1 Pin Configuration!" +#endif +// ETH_MII_TXD2 Pin <0=>PC2 +#define RTE_ETH_MII_TXD2_PORT_ID 0 +#if (RTE_ETH_MII_TXD2_PORT_ID == 0) +#define RTE_ETH_MII_TXD2_PORT GPIOC +#define RTE_ETH_MII_TXD2_PIN 2 +#else +#error "Invalid ETH_MII_TXD2 Pin Configuration!" +#endif +// ETH_MII_TXD3 Pin <0=>PB8 +#define RTE_ETH_MII_TXD3_PORT_ID 0 +#if (RTE_ETH_MII_TXD3_PORT_ID == 0) +#define RTE_ETH_MII_TXD3_PORT GPIOB +#define RTE_ETH_MII_TXD3_PIN 8 +#else +#error "Invalid ETH_MII_TXD3 Pin Configuration!" +#endif +// ETH_MII_TX_EN Pin <0=>PB11 +#define RTE_ETH_MII_TX_EN_PORT_ID 0 +#if (RTE_ETH_MII_TX_EN_PORT_ID == 0) +#define RTE_ETH_MII_TX_EN_PORT GPIOB +#define RTE_ETH_MII_TX_EN_PIN 11 +#else +#error "Invalid ETH_MII_TX_EN Pin Configuration!" +#endif +// ETH_MII_RX_CLK Pin <0=>PA1 +#define RTE_ETH_MII_RX_CLK_PORT_ID 0 +#if (RTE_ETH_MII_RX_CLK_PORT_ID == 0) +#define RTE_ETH_MII_RX_CLK_PORT GPIOA +#define RTE_ETH_MII_RX_CLK_PIN 1 +#else +#error "Invalid ETH_MII_RX_CLK Pin Configuration!" +#endif +// ETH_MII_RXD0 Pin <0=>PC4 +#define RTE_ETH_MII_RXD0_DEF 0 + +// ETH_MII_RXD1 Pin <0=>PC5 +#define RTE_ETH_MII_RXD1_DEF 0 + +// ETH_MII_RXD2 Pin <0=>PB0 +#define RTE_ETH_MII_RXD2_DEF 0 + +// ETH_MII_RXD3 Pin <0=>PB1 <1=>PD12 +#define RTE_ETH_MII_RXD3_DEF 0 + +// ETH_MII_RX_DV Pin <0=>PA7 +#define RTE_ETH_MII_RX_DV_DEF 0 + +// ETH_MII_RX_ER Pin <0=>PB10 +#define RTE_ETH_MII_RX_ER_PORT_ID 0 +#if (RTE_ETH_MII_RX_ER_PORT_ID == 0) +#define RTE_ETH_MII_RX_ER_PORT GPIOB +#define RTE_ETH_MII_RX_ER_PIN 10 +#else +#error "Invalid ETH_MII_RX_ER Pin Configuration!" +#endif +// ETH_MII_CRS Pin <0=>PA0 +#define RTE_ETH_MII_CRS_PORT_ID 0 +#if (RTE_ETH_MII_CRS_PORT_ID == 0) +#define RTE_ETH_MII_CRS_PORT GPIOA +#define RTE_ETH_MII_CRS_PIN 0 +#else +#error "Invalid ETH_MII_CRS Pin Configuration!" +#endif +// ETH_MII_COL Pin <0=>PA3 +#define RTE_ETH_MII_COL_PORT_ID 0 +#if (RTE_ETH_MII_COL_PORT_ID == 0) +#define RTE_ETH_MII_COL_PORT GPIOA +#define RTE_ETH_MII_COL_PIN 3 +#else +#error "Invalid ETH_MII_COL Pin Configuration!" +#endif + +// Ethernet MAC I/O remapping +// Remap Ethernet pins +#define RTE_ETH_MII_REMAP 0 + +// ETH_MII_RXD0 Pin <1=>PD9 +#define RTE_ETH_MII_RXD0_REMAP 1 + +// ETH_MII_RXD1 Pin <1=>PD10 +#define RTE_ETH_MII_RXD1_REMAP 1 + +// ETH_MII_RXD2 Pin <1=>PD11 +#define RTE_ETH_MII_RXD2_REMAP 1 + +// ETH_MII_RXD3 Pin <1=>PD12 +#define RTE_ETH_MII_RXD3_REMAP 1 + +// ETH_MII_RX_DV Pin <1=>PD8 +#define RTE_ETH_MII_RX_DV_REMAP 1 +// + +// + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RXD0_DEF == 0)) +#define RTE_ETH_MII_RXD0_PORT GPIOC +#define RTE_ETH_MII_RXD0_PIN 4 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RXD0_REMAP == 1)) +#define RTE_ETH_MII_RXD0_PORT GPIOD +#define RTE_ETH_MII_RXD0_PIN 9 +#else +#error "Invalid ETH_MII_RXD0 Pin Configuration!" +#endif + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RXD1_DEF == 0)) +#define RTE_ETH_MII_RXD1_PORT GPIOC +#define RTE_ETH_MII_RXD1_PIN 5 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RXD1_REMAP == 1)) +#define RTE_ETH_MII_RXD1_PORT GPIOD +#define RTE_ETH_MII_RXD1_PIN 10 +#else +#error "Invalid ETH_MII_RXD1 Pin Configuration!" +#endif + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RXD2_DEF == 0)) +#define RTE_ETH_MII_RXD2_PORT GPIOB +#define RTE_ETH_MII_RXD2_PIN 0 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RXD2_REMAP == 1)) +#define RTE_ETH_MII_RXD2_PORT GPIOD +#define RTE_ETH_MII_RXD2_PIN 11 +#else +#error "Invalid ETH_MII_RXD2 Pin Configuration!" +#endif + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RXD3_DEF == 0)) +#define RTE_ETH_MII_RXD3_PORT GPIOB +#define RTE_ETH_MII_RXD3_PIN 1 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RXD3_REMAP == 1)) +#define RTE_ETH_MII_RXD3_PORT GPIOD +#define RTE_ETH_MII_RXD3_PIN 12 +#else +#error "Invalid ETH_MII_RXD3 Pin Configuration!" +#endif + +#if ((RTE_ETH_MII_REMAP == 0) && (RTE_ETH_MII_RX_DV_DEF == 0)) +#define RTE_ETH_MII_RX_DV_PORT GPIOA +#define RTE_ETH_MII_RX_DV_PIN 7 +#elif ((RTE_ETH_MII_REMAP == 1) && (RTE_ETH_MII_RX_DV_REMAP == 1)) +#define RTE_ETH_MII_RX_DV_PORT GPIOD +#define RTE_ETH_MII_RX_DV_PIN 8 +#else +#error "Invalid ETH_MII_RX_DV Pin Configuration!" +#endif + +// RMII (Reduced Media Independent Interface) +#define RTE_ETH_RMII 0 + +// ETH_RMII_TXD0 Pin <0=>PB12 +#define RTE_ETH_RMII_TXD0_PORT_ID 0 +#if (RTE_ETH_RMII_TXD0_PORT_ID == 0) +#define RTE_ETH_RMII_TXD0_PORT GPIOB +#define RTE_ETH_RMII_TXD0_PIN 12 +#else +#error "Invalid ETH_RMII_TXD0 Pin Configuration!" +#endif +// ETH_RMII_TXD1 Pin <0=>PB13 +#define RTE_ETH_RMII_TXD1_PORT_ID 0 +#if (RTE_ETH_RMII_TXD1_PORT_ID == 0) +#define RTE_ETH_RMII_TXD1_PORT GPIOB +#define RTE_ETH_RMII_TXD1_PIN 13 +#else +#error "Invalid ETH_RMII_TXD1 Pin Configuration!" +#endif +// ETH_RMII_TX_EN Pin <0=>PB11 +#define RTE_ETH_RMII_TX_EN_PORT_ID 0 +#if (RTE_ETH_RMII_TX_EN_PORT_ID == 0) +#define RTE_ETH_RMII_TX_EN_PORT GPIOB +#define RTE_ETH_RMII_TX_EN_PIN 11 +#else +#error "Invalid ETH_RMII_TX_EN Pin Configuration!" +#endif +// ETH_RMII_RXD0 Pin <0=>PC4 +#define RTE_ETH_RMII_RXD0_DEF 0 + +// ETH_RMII_RXD1 Pin <0=>PC5 +#define RTE_ETH_RMII_RXD1_DEF 0 + +// ETH_RMII_REF_CLK Pin <0=>PA1 +#define RTE_ETH_RMII_REF_CLK_PORT_ID 0 +#if (RTE_ETH_RMII_REF_CLK_PORT_ID == 0) +#define RTE_ETH_RMII_REF_CLK_PORT GPIOA +#define RTE_ETH_RMII_REF_CLK_PIN 1 +#else +#error "Invalid ETH_RMII_REF_CLK Pin Configuration!" +#endif +// ETH_RMII_CRS_DV Pin <0=>PA7 +#define RTE_ETH_RMII_CRS_DV_DEF 0 + +// Ethernet MAC I/O remapping +// Remap Ethernet pins +#define RTE_ETH_RMII_REMAP 0 +// ETH_RMII_RXD0 Pin <1=>PD9 +#define RTE_ETH_RMII_RXD0_REMAP 1 + +// ETH_RMII_RXD1 Pin <1=>PD10 +#define RTE_ETH_RMII_RXD1_REMAP 1 + +// ETH_RMII_CRS_DV Pin <1=>PD8 +#define RTE_ETH_RMII_CRS_DV_REMAP 1 +// + +#if ((RTE_ETH_RMII_REMAP == 0) && (RTE_ETH_RMII_RXD0_DEF == 0)) +#define RTE_ETH_RMII_RXD0_PORT GPIOC +#define RTE_ETH_RMII_RXD0_PIN 4 +#elif ((RTE_ETH_RMII_REMAP == 1) && (RTE_ETH_RMII_RXD0_REMAP == 1)) +#define RTE_ETH_RMII_RXD0_PORT GPIOD +#define RTE_ETH_RMII_RXD0_PIN 9 +#else +#error "Invalid ETH_RMII_RXD0 Pin Configuration!" +#endif + +#if ((RTE_ETH_RMII_REMAP == 0) && (RTE_ETH_RMII_RXD1_DEF == 0)) +#define RTE_ETH_RMII_RXD1_PORT GPIOC +#define RTE_ETH_RMII_RXD1_PIN 5 +#elif ((RTE_ETH_RMII_REMAP == 1) && (RTE_ETH_RMII_RXD1_REMAP == 1)) +#define RTE_ETH_RMII_RXD1_PORT GPIOD +#define RTE_ETH_RMII_RXD1_PIN 10 +#else +#error "Invalid ETH_RMII_RXD1 Pin Configuration!" +#endif + +#if ((RTE_ETH_RMII_REMAP == 0) && (RTE_ETH_RMII_CRS_DV_DEF == 0)) +#define RTE_ETH_RMII_CRS_DV_PORT GPIOA +#define RTE_ETH_RMII_CRS_DV_PIN 7 +#elif ((RTE_ETH_RMII_REMAP == 1) && (RTE_ETH_RMII_CRS_DV_REMAP == 1)) +#define RTE_ETH_RMII_CRS_DV_PORT GPIOD +#define RTE_ETH_RMII_CRS_DV_PIN 8 +#else +#error "Invalid ETH_RMII_CRS_DV Pin Configuration!" +#endif + +// + +// Management Data Interface +// ETH_MDC Pin <0=>PC1 +#define RTE_ETH_MDI_MDC_PORT_ID 0 +#if (RTE_ETH_MDI_MDC_PORT_ID == 0) +#define RTE_ETH_MDI_MDC_PORT GPIOC +#define RTE_ETH_MDI_MDC_PIN 1 +#else +#error "Invalid ETH_MDC Pin Configuration!" +#endif +// ETH_MDIO Pin <0=>PA2 +#define RTE_ETH_MDI_MDIO_PORT_ID 0 +#if (RTE_ETH_MDI_MDIO_PORT_ID == 0) +#define RTE_ETH_MDI_MDIO_PORT GPIOA +#define RTE_ETH_MDI_MDIO_PIN 2 +#else +#error "Invalid ETH_MDIO Pin Configuration!" +#endif +// + +// Reference 25MHz Clock generation on MCO pin <0=>Disabled <1=>Enabled +#define RTE_ETH_REF_CLOCK_ID 0 +#if (RTE_ETH_REF_CLOCK_ID == 0) +#define RTE_ETH_REF_CLOCK 0 +#elif (RTE_ETH_REF_CLOCK_ID == 1) +#define RTE_ETH_REF_CLOCK 1 +#else +#error "Invalid MCO Ethernet Reference Clock Configuration!" +#endif +// + + +// USB Device Full-speed +// Configuration settings for Driver_USBD0 in component ::Drivers:USB Device +#define RTE_USB_DEVICE 0 + +// CON On/Off Pin +// Configure Pin for driving D+ pull-up +// GPIO Pxy (x = A..G, y = 0..15) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_USB_DEVICE_CON_PIN 1 +#define RTE_USB_DEVICE_CON_ACTIVE 0 +#define RTE_USB_DEVICE_CON_PORT GPIO_PORT(1) +#define RTE_USB_DEVICE_CON_BIT 14 + +// + + +// USB OTG Full-speed +#define RTE_USB_OTG_FS 0 + +// Host [Driver_USBH0] +// Configuration settings for Driver_USBH0 in component ::Drivers:USB Host + +#define RTE_USB_OTG_FS_HOST 0 + +// VBUS Power On/Off Pin +// Configure Pin for driving VBUS +// GPIO Pxy (x = A..G, y = 0..15) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_OTG_FS_VBUS_PIN 1 +#define RTE_OTG_FS_VBUS_ACTIVE 0 +#define RTE_OTG_FS_VBUS_PORT GPIO_PORT(2) +#define RTE_OTG_FS_VBUS_BIT 9 + +// Overcurrent Detection Pin +// Configure Pin for overcurrent detection +// GPIO Pxy (x = A..G, y = 0..15) +// Active State <0=>Low <1=>High +// Selects Active State Logical Level +// Port <0=>GPIOA <1=>GPIOB <2=>GPIOC <3=>GPIOD +// <4=>GPIOE <5=>GPIOF <6=>GPIOG +// Selects Port Name +// Bit <0-15> +// Selects Port Bit +// +#define RTE_OTG_FS_OC_PIN 1 +#define RTE_OTG_FS_OC_ACTIVE 0 +#define RTE_OTG_FS_OC_PORT GPIO_PORT(4) +#define RTE_OTG_FS_OC_BIT 1 +// + +// + + +#endif /* __RTE_DEVICE_H */ diff --git a/RTE/Device/STM32F107VC/startup_stm32f10x_cl.s.update@1.0.1 b/RTE/Device/STM32F107VC/startup_stm32f10x_cl.s.update@1.0.1 new file mode 100644 index 0000000..e40f734 --- /dev/null +++ b/RTE/Device/STM32F107VC/startup_stm32f10x_cl.s.update@1.0.1 @@ -0,0 +1,369 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_cl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Connectivity line devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 STMicroelectronics. +;* All rights reserved. +;* +;* This software is licensed under terms that can be found in the LICENSE file +;* in the root directory of this software component. +;* If no LICENSE file comes with this software, it is provided AS-IS. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 and ADC2 + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C1 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC alarm through EXTI line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_IRQHandler ; TIM6 + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_IRQHandler ; DMA2 Channel4 + DCD DMA2_Channel5_IRQHandler ; DMA2 Channel5 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Channel1_IRQHandler [WEAK] + EXPORT DMA2_Channel2_IRQHandler [WEAK] + EXPORT DMA2_Channel3_IRQHandler [WEAK] + EXPORT DMA2_Channel4_IRQHandler [WEAK] + EXPORT DMA2_Channel5_IRQHandler [WEAK] + EXPORT ETH_IRQHandler [WEAK] + EXPORT ETH_WKUP_IRQHandler [WEAK] + EXPORT CAN2_TX_IRQHandler [WEAK] + EXPORT CAN2_RX0_IRQHandler [WEAK] + EXPORT CAN2_RX1_IRQHandler [WEAK] + EXPORT CAN2_SCE_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +OTG_FS_WKUP_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_IRQHandler +TIM7_IRQHandler +DMA2_Channel1_IRQHandler +DMA2_Channel2_IRQHandler +DMA2_Channel3_IRQHandler +DMA2_Channel4_IRQHandler +DMA2_Channel5_IRQHandler +ETH_IRQHandler +ETH_WKUP_IRQHandler +CAN2_TX_IRQHandler +CAN2_RX0_IRQHandler +CAN2_RX1_IRQHandler +CAN2_SCE_IRQHandler +OTG_FS_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/RTE/Device/STM32F107VC/system_stm32f10x.c.update@1.0.1 b/RTE/Device/STM32F107VC/system_stm32f10x.c.update@1.0.1 new file mode 100644 index 0000000..9e31f67 --- /dev/null +++ b/RTE/Device/STM32F107VC/system_stm32f10x.c.update@1.0.1 @@ -0,0 +1,1092 @@ +/** + ****************************************************************************** + * @file system_stm32f10x.c + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * factors, AHB/APBx prescalers and Flash settings). + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f10x_xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (8 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f10x_xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on + * the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file. + * When HSE is used as system clock source, directly or through PLL, and you + * are using different crystal you have to adapt the HSE value to your own + * configuration. + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f10x_system + * @{ + */ + +/** @addtogroup STM32F10x_System_Private_Includes + * @{ + */ + +#include "stm32f10x.h" + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Defines + * @{ + */ + +/*!< Uncomment the line corresponding to the desired System clock (SYSCLK) + frequency (after reset the HSI is used as SYSCLK source) + + IMPORTANT NOTE: + ============== + 1. After each device reset the HSI is used as System clock source. + + 2. Please make sure that the selected System clock doesn't exceed your device's + maximum frequency. + + 3. If none of the define below is enabled, the HSI is used as System clock + source. + + 4. The System clock configuration functions provided within this file assume that: + - For Low, Medium and High density Value line devices an external 8MHz + crystal is used to drive the System clock. + - For Low, Medium and High density devices an external 8MHz crystal is + used to drive the System clock. + - For Connectivity line devices an external 25MHz crystal is used to drive + the System clock. + If you are using different crystal you have to adapt those functions accordingly. + */ + +#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) +/* #define SYSCLK_FREQ_HSE HSE_VALUE */ + #define SYSCLK_FREQ_24MHz 24000000 +#else +/* #define SYSCLK_FREQ_HSE HSE_VALUE */ +/* #define SYSCLK_FREQ_24MHz 24000000 */ +/* #define SYSCLK_FREQ_36MHz 36000000 */ +/* #define SYSCLK_FREQ_48MHz 48000000 */ +/* #define SYSCLK_FREQ_56MHz 56000000 */ +#define SYSCLK_FREQ_72MHz 72000000 +#endif + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM3210E-EVAL board (STM32 High density and XL-density devices) or on + STM32100E-EVAL board (STM32 High-density value line devices) as data memory */ +#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL) +/* #define DATA_IN_ExtSRAM */ +#endif + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Variables + * @{ + */ + +/******************************************************************************* +* Clock Definitions +*******************************************************************************/ +#ifdef SYSCLK_FREQ_HSE + uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_24MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_36MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_48MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_56MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_72MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /*!< System Clock Frequency (Core Clock) */ +#else /*!< HSI Selected as System Clock source */ + uint32_t SystemCoreClock = HSI_VALUE; /*!< System Clock Frequency (Core Clock) */ +#endif + +__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); + +#ifdef SYSCLK_FREQ_HSE + static void SetSysClockToHSE(void); +#elif defined SYSCLK_FREQ_24MHz + static void SetSysClockTo24(void); +#elif defined SYSCLK_FREQ_36MHz + static void SetSysClockTo36(void); +#elif defined SYSCLK_FREQ_48MHz + static void SetSysClockTo48(void); +#elif defined SYSCLK_FREQ_56MHz + static void SetSysClockTo56(void); +#elif defined SYSCLK_FREQ_72MHz + static void SetSysClockTo72(void); +#endif + +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemCoreClock variable. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +void SystemInit (void) +{ + /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ +#ifndef STM32F10X_CL + RCC->CFGR &= (uint32_t)0xF8FF0000; +#else + RCC->CFGR &= (uint32_t)0xF0FF0000; +#endif /* STM32F10X_CL */ + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ + RCC->CFGR &= (uint32_t)0xFF80FFFF; + +#ifdef STM32F10X_CL + /* Reset PLL2ON and PLL3ON bits */ + RCC->CR &= (uint32_t)0xEBFFFFFF; + + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x00FF0000; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000; +#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000; +#else + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000; +#endif /* STM32F10X_CL */ + +#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL) + #ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); + #endif /* DATA_IN_ExtSRAM */ +#endif + + /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */ + /* Configure the Flash Latency cycles and enable prefetch buffer */ + SetSysClock(); + +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz or 25 MHz, depending on the product used), user has to ensure + * that HSE_VALUE is same as the real frequency of the crystal used. + * Otherwise, this function may have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 0; + +#ifdef STM32F10X_CL + uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0, pll2mull = 0; +#endif /* STM32F10X_CL */ + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) + uint32_t prediv1factor = 0; +#endif /* STM32F10X_LD_VL or STM32F10X_MD_VL or STM32F10X_HD_VL */ + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock */ + + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + +#ifndef STM32F10X_CL + pllmull = ( pllmull >> 18) + 2; + + if (pllsource == 0x00) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + { + #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1; + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + #else + /* HSE selected as PLL clock entry */ + if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) + {/* HSE oscillator clock divided by 2 */ + SystemCoreClock = (HSE_VALUE >> 1) * pllmull; + } + else + { + SystemCoreClock = HSE_VALUE * pllmull; + } + #endif + } +#else + pllmull = pllmull >> 18; + + if (pllmull != 0x0D) + { + pllmull += 2; + } + else + { /* PLL multiplication factor = PLL input clock * 6.5 */ + pllmull = 13 / 2; + } + + if (pllsource == 0x00) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + {/* PREDIV1 selected as PLL clock entry */ + + /* Get PREDIV1 clock source and division factor */ + prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1; + + if (prediv1source == 0) + { + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + } + else + {/* PLL2 clock selected as PREDIV1 clock entry */ + + /* Get PREDIV2 division factor and PLL2 multiplication factor */ + prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4) + 1; + pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2; + SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; + } + } +#endif /* STM32F10X_CL */ + break; + + default: + SystemCoreClock = HSI_VALUE; + break; + } + + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +#ifdef SYSCLK_FREQ_HSE + SetSysClockToHSE(); +#elif defined SYSCLK_FREQ_24MHz + SetSysClockTo24(); +#elif defined SYSCLK_FREQ_36MHz + SetSysClockTo36(); +#elif defined SYSCLK_FREQ_48MHz + SetSysClockTo48(); +#elif defined SYSCLK_FREQ_56MHz + SetSysClockTo56(); +#elif defined SYSCLK_FREQ_72MHz + SetSysClockTo72(); +#endif + + /* If none of the define above is enabled, the HSI is used as System clock + source (default after reset) */ +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f10x.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f10x_xx.s/.c before jump to main. + * This function configures the external SRAM mounted on STM3210E-EVAL + * board (STM32 High density devices). This SRAM will be used as program + * data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is + required, then adjust the Register Addresses */ + + /* Enable FSMC clock */ + RCC->AHBENR = 0x00000114; + + /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ + RCC->APB2ENR = 0x000001E0; + +/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ +/*---------------- SRAM Address lines configuration -------------------------*/ +/*---------------- NOE and NWE configuration --------------------------------*/ +/*---------------- NE3 configuration ----------------------------------------*/ +/*---------------- NBL0, NBL1 configuration ---------------------------------*/ + + GPIOD->CRL = 0x44BB44BB; + GPIOD->CRH = 0xBBBBBBBB; + + GPIOE->CRL = 0xB44444BB; + GPIOE->CRH = 0xBBBBBBBB; + + GPIOF->CRL = 0x44BBBBBB; + GPIOF->CRH = 0xBBBB4444; + + GPIOG->CRL = 0x44BBBBBB; + GPIOG->CRH = 0x44444B44; + +/*---------------- FSMC Configuration ---------------------------------------*/ +/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ + + FSMC_Bank1->BTCR[4] = 0x00001011; + FSMC_Bank1->BTCR[5] = 0x00000200; +} +#endif /* DATA_IN_ExtSRAM */ + +#ifdef SYSCLK_FREQ_HSE +/** + * @brief Selects HSE as System clock source and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockToHSE(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + +#if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL && !defined STM32F10X_HD_VL + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 0 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + +#ifndef STM32F10X_CL + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; +#else + if (HSE_VALUE <= 24000000) + { + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; + } + else + { + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + } +#endif /* STM32F10X_CL */ +#endif + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + + /* Select HSE as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSE; + + /* Wait till HSE is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x04) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_24MHz +/** + * @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo24(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { +#if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL && !defined STM32F10X_HD_VL + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 0 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; +#endif + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL configuration: PLLCLK = PREDIV1 * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL6); + + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */ + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } +#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + /* PLL configuration: = (HSE / 2) * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL6); +#else + /* PLL configuration: = (HSE / 2) * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL6); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_36MHz +/** + * @brief Sets System clock frequency to 36MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo36(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 1 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + + /* PLL configuration: PLLCLK = PREDIV1 * 9 = 36 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL9); + + /*!< PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + +#else + /* PLL configuration: PLLCLK = (HSE / 2) * 9 = 36 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_48MHz +/** + * @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo48(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 1 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 6 = 48 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL6); +#else + /* PLL configuration: PLLCLK = HSE * 6 = 48 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} + +#elif defined SYSCLK_FREQ_56MHz +/** + * @brief Sets System clock frequency to 56MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo56(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 2 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 7 = 56 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL7); +#else + /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL7); + +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} + +#elif defined SYSCLK_FREQ_72MHz +/** + * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo72(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 2 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; + + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL9); +#else + /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | + RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */