53#if !defined (HSE_VALUE)
54 #define HSE_VALUE ((uint32_t)8000000)
58#if !defined (HSI_VALUE)
59 #define HSI_VALUE ((uint32_t)16000000)
80#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
81 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
82 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
87#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
88 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
96#define VECT_TAB_OFFSET 0x00
124const uint8_t
AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
134#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
156 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
157 SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));
160#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
166 SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET;
168 SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
210 uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
213 tmp = RCC->CFGR & RCC_CFGR_SWS;
228 pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
229 pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
234 pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
239 pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
242 pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
256#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM)
257#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
258 || defined(STM32F469xx) || defined(STM32F479xx)
269 __IO uint32_t tmp = 0x00;
271 register uint32_t tmpreg = 0, timeout = 0xFFFF;
272 register __IO uint32_t index;
275 RCC->AHB1ENR |= 0x000001F8;
278 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
281 GPIOD->AFR[0] = 0x00CCC0CC;
282 GPIOD->AFR[1] = 0xCCCCCCCC;
284 GPIOD->MODER = 0xAAAA0A8A;
286 GPIOD->OSPEEDR = 0xFFFF0FCF;
288 GPIOD->OTYPER = 0x00000000;
290 GPIOD->PUPDR = 0x00000000;
293 GPIOE->AFR[0] = 0xC00CC0CC;
294 GPIOE->AFR[1] = 0xCCCCCCCC;
296 GPIOE->MODER = 0xAAAA828A;
298 GPIOE->OSPEEDR = 0xFFFFC3CF;
300 GPIOE->OTYPER = 0x00000000;
302 GPIOE->PUPDR = 0x00000000;
305 GPIOF->AFR[0] = 0xCCCCCCCC;
306 GPIOF->AFR[1] = 0xCCCCCCCC;
308 GPIOF->MODER = 0xAA800AAA;
310 GPIOF->OSPEEDR = 0xAA800AAA;
312 GPIOF->OTYPER = 0x00000000;
314 GPIOF->PUPDR = 0x00000000;
317 GPIOG->AFR[0] = 0xCCCCCCCC;
318 GPIOG->AFR[1] = 0xCCCCCCCC;
320 GPIOG->MODER = 0xAAAAAAAA;
322 GPIOG->OSPEEDR = 0xAAAAAAAA;
324 GPIOG->OTYPER = 0x00000000;
326 GPIOG->PUPDR = 0x00000000;
329 GPIOH->AFR[0] = 0x00C0CC00;
330 GPIOH->AFR[1] = 0xCCCCCCCC;
332 GPIOH->MODER = 0xAAAA08A0;
334 GPIOH->OSPEEDR = 0xAAAA08A0;
336 GPIOH->OTYPER = 0x00000000;
338 GPIOH->PUPDR = 0x00000000;
341 GPIOI->AFR[0] = 0xCCCCCCCC;
342 GPIOI->AFR[1] = 0x00000CC0;
344 GPIOI->MODER = 0x0028AAAA;
346 GPIOI->OSPEEDR = 0x0028AAAA;
348 GPIOI->OTYPER = 0x00000000;
350 GPIOI->PUPDR = 0x00000000;
354 RCC->AHB3ENR |= 0x00000001;
356 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
358 FMC_Bank5_6->SDCR[0] = 0x000019E4;
359 FMC_Bank5_6->SDTR[0] = 0x01115351;
363 FMC_Bank5_6->SDCMR = 0x00000011;
364 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
365 while((tmpreg != 0) && (timeout-- > 0))
367 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
371 for (index = 0; index<1000; index++);
374 FMC_Bank5_6->SDCMR = 0x00000012;
376 while((tmpreg != 0) && (timeout-- > 0))
378 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
382 FMC_Bank5_6->SDCMR = 0x00000073;
384 while((tmpreg != 0) && (timeout-- > 0))
386 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
390 FMC_Bank5_6->SDCMR = 0x00046014;
392 while((tmpreg != 0) && (timeout-- > 0))
394 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
398 tmpreg = FMC_Bank5_6->SDRTR;
399 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
402 tmpreg = FMC_Bank5_6->SDCR[0];
403 FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
405#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
407 FMC_Bank1->BTCR[2] = 0x00001011;
408 FMC_Bank1->BTCR[3] = 0x00000201;
409 FMC_Bank1E->BWTR[2] = 0x0fffffff;
411#if defined(STM32F469xx) || defined(STM32F479xx)
413 FMC_Bank1->BTCR[2] = 0x00001091;
414 FMC_Bank1->BTCR[3] = 0x00110212;
415 FMC_Bank1E->BWTR[2] = 0x0fffffff;
421#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
432 __IO uint32_t tmp = 0x00;
433#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
434 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
435#if defined (DATA_IN_ExtSDRAM)
436 register uint32_t tmpreg = 0, timeout = 0xFFFF;
437 register __IO uint32_t index;
439#if defined(STM32F446xx)
442 RCC->AHB1ENR |= 0x0000007D;
446 RCC->AHB1ENR |= 0x000001F8;
449 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
451#if defined(STM32F446xx)
453 GPIOA->AFR[0] |= 0xC0000000;
454 GPIOA->AFR[1] |= 0x00000000;
456 GPIOA->MODER |= 0x00008000;
458 GPIOA->OSPEEDR |= 0x00008000;
460 GPIOA->OTYPER |= 0x00000000;
462 GPIOA->PUPDR |= 0x00000000;
465 GPIOC->AFR[0] |= 0x00CC0000;
466 GPIOC->AFR[1] |= 0x00000000;
468 GPIOC->MODER |= 0x00000A00;
470 GPIOC->OSPEEDR |= 0x00000A00;
472 GPIOC->OTYPER |= 0x00000000;
474 GPIOC->PUPDR |= 0x00000000;
478 GPIOD->AFR[0] = 0x000000CC;
479 GPIOD->AFR[1] = 0xCC000CCC;
481 GPIOD->MODER = 0xA02A000A;
483 GPIOD->OSPEEDR = 0xA02A000A;
485 GPIOD->OTYPER = 0x00000000;
487 GPIOD->PUPDR = 0x00000000;
490 GPIOE->AFR[0] = 0xC00000CC;
491 GPIOE->AFR[1] = 0xCCCCCCCC;
493 GPIOE->MODER = 0xAAAA800A;
495 GPIOE->OSPEEDR = 0xAAAA800A;
497 GPIOE->OTYPER = 0x00000000;
499 GPIOE->PUPDR = 0x00000000;
502 GPIOF->AFR[0] = 0xCCCCCCCC;
503 GPIOF->AFR[1] = 0xCCCCCCCC;
505 GPIOF->MODER = 0xAA800AAA;
507 GPIOF->OSPEEDR = 0xAA800AAA;
509 GPIOF->OTYPER = 0x00000000;
511 GPIOF->PUPDR = 0x00000000;
514 GPIOG->AFR[0] = 0xCCCCCCCC;
515 GPIOG->AFR[1] = 0xCCCCCCCC;
517 GPIOG->MODER = 0xAAAAAAAA;
519 GPIOG->OSPEEDR = 0xAAAAAAAA;
521 GPIOG->OTYPER = 0x00000000;
523 GPIOG->PUPDR = 0x00000000;
525#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
526 || defined(STM32F469xx) || defined(STM32F479xx)
528 GPIOH->AFR[0] = 0x00C0CC00;
529 GPIOH->AFR[1] = 0xCCCCCCCC;
531 GPIOH->MODER = 0xAAAA08A0;
533 GPIOH->OSPEEDR = 0xAAAA08A0;
535 GPIOH->OTYPER = 0x00000000;
537 GPIOH->PUPDR = 0x00000000;
540 GPIOI->AFR[0] = 0xCCCCCCCC;
541 GPIOI->AFR[1] = 0x00000CC0;
543 GPIOI->MODER = 0x0028AAAA;
545 GPIOI->OSPEEDR = 0x0028AAAA;
547 GPIOI->OTYPER = 0x00000000;
549 GPIOI->PUPDR = 0x00000000;
554 RCC->AHB3ENR |= 0x00000001;
556 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
559#if defined(STM32F446xx)
560 FMC_Bank5_6->SDCR[0] = 0x00001954;
562 FMC_Bank5_6->SDCR[0] = 0x000019E4;
564 FMC_Bank5_6->SDTR[0] = 0x01115351;
568 FMC_Bank5_6->SDCMR = 0x00000011;
569 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
570 while((tmpreg != 0) && (timeout-- > 0))
572 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
576 for (index = 0; index<1000; index++);
579 FMC_Bank5_6->SDCMR = 0x00000012;
581 while((tmpreg != 0) && (timeout-- > 0))
583 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
587#if defined(STM32F446xx)
588 FMC_Bank5_6->SDCMR = 0x000000F3;
590 FMC_Bank5_6->SDCMR = 0x00000073;
593 while((tmpreg != 0) && (timeout-- > 0))
595 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
599#if defined(STM32F446xx)
600 FMC_Bank5_6->SDCMR = 0x00044014;
602 FMC_Bank5_6->SDCMR = 0x00046014;
605 while((tmpreg != 0) && (timeout-- > 0))
607 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
611 tmpreg = FMC_Bank5_6->SDRTR;
612#if defined(STM32F446xx)
613 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1));
615 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
619 tmpreg = FMC_Bank5_6->SDCR[0];
620 FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
624#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
625 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
626 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
628#if defined(DATA_IN_ExtSRAM)
631 RCC->AHB1ENR |= 0x00000078;
633 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);
636 GPIOD->AFR[0] = 0x00CCC0CC;
637 GPIOD->AFR[1] = 0xCCCCCCCC;
639 GPIOD->MODER = 0xAAAA0A8A;
641 GPIOD->OSPEEDR = 0xFFFF0FCF;
643 GPIOD->OTYPER = 0x00000000;
645 GPIOD->PUPDR = 0x00000000;
648 GPIOE->AFR[0] = 0xC00CC0CC;
649 GPIOE->AFR[1] = 0xCCCCCCCC;
651 GPIOE->MODER = 0xAAAA828A;
653 GPIOE->OSPEEDR = 0xFFFFC3CF;
655 GPIOE->OTYPER = 0x00000000;
657 GPIOE->PUPDR = 0x00000000;
660 GPIOF->AFR[0] = 0x00CCCCCC;
661 GPIOF->AFR[1] = 0xCCCC0000;
663 GPIOF->MODER = 0xAA000AAA;
665 GPIOF->OSPEEDR = 0xFF000FFF;
667 GPIOF->OTYPER = 0x00000000;
669 GPIOF->PUPDR = 0x00000000;
672 GPIOG->AFR[0] = 0x00CCCCCC;
673 GPIOG->AFR[1] = 0x000000C0;
675 GPIOG->MODER = 0x00085AAA;
677 GPIOG->OSPEEDR = 0x000CAFFF;
679 GPIOG->OTYPER = 0x00000000;
681 GPIOG->PUPDR = 0x00000000;
685 RCC->AHB3ENR |= 0x00000001;
687#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
689 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
691 FMC_Bank1->BTCR[2] = 0x00001011;
692 FMC_Bank1->BTCR[3] = 0x00000201;
693 FMC_Bank1E->BWTR[2] = 0x0fffffff;
695#if defined(STM32F469xx) || defined(STM32F479xx)
697 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
699 FMC_Bank1->BTCR[2] = 0x00001091;
700 FMC_Bank1->BTCR[3] = 0x00110212;
701 FMC_Bank1E->BWTR[2] = 0x0fffffff;
703#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\
704 || defined(STM32F412Zx) || defined(STM32F412Vx)
706 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);
708 FSMC_Bank1->BTCR[2] = 0x00001011;
709 FSMC_Bank1->BTCR[3] = 0x00000201;
710 FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF;
static void SystemInit_ExtMemCtl(void)
Setup the external memory controller. Called in startup_stm32f4xx.s before jump to main....
void SystemInit(void)
Setup the microcontroller system Initialize the FPU setting, vector table location and External memor...
void SystemCoreClockUpdate(void)
Update SystemCoreClock variable according to Clock Register Values. The SystemCoreClock variable cont...
const uint8_t APBPrescTable[8]
const uint8_t AHBPrescTable[16]