50#if !defined (HSE_VALUE)
51 #define HSE_VALUE ((uint32_t)25000000)
54#if !defined (HSI_VALUE)
55 #define HSI_VALUE ((uint32_t)16000000)
76#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
77 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
78 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
83#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
84 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
96#if defined(USER_VECT_TAB_ADDRESS)
100#if defined(VECT_TAB_SRAM)
101#define VECT_TAB_BASE_ADDRESS SRAM_BASE
104#define VECT_TAB_BASE_ADDRESS FLASH_BASE
107#if !defined(VECT_TAB_OFFSET)
108#define VECT_TAB_OFFSET 0x00000000U
137uint32_t SystemCoreClock = 16000000;
138const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
139const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
148#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
149 static void SystemInit_ExtMemCtl(
void);
170 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
171 SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));
174#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
175 SystemInit_ExtMemCtl();
179#if defined(USER_VECT_TAB_ADDRESS)
180 SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
222 uint32_t tmp, pllvco, pllp, pllsource, pllm;
225 tmp = RCC->CFGR & RCC_CFGR_SWS;
240 pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
241 pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
246 pllvco = (
HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
251 pllvco = (
HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
254 pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
255 SystemCoreClock = pllvco/pllp;
263 tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
265 SystemCoreClock >>= tmp;
268#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM)
269#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
270 || defined(STM32F469xx) || defined(STM32F479xx)
279void SystemInit_ExtMemCtl(
void)
281 __IO uint32_t tmp = 0x00;
283 register uint32_t tmpreg = 0, timeout = 0xFFFF;
284 register __IO uint32_t index;
287 RCC->AHB1ENR |= 0x000001F8;
290 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
293 GPIOD->AFR[0] = 0x00CCC0CC;
294 GPIOD->AFR[1] = 0xCCCCCCCC;
296 GPIOD->MODER = 0xAAAA0A8A;
298 GPIOD->OSPEEDR = 0xFFFF0FCF;
300 GPIOD->OTYPER = 0x00000000;
302 GPIOD->PUPDR = 0x00000000;
305 GPIOE->AFR[0] = 0xC00CC0CC;
306 GPIOE->AFR[1] = 0xCCCCCCCC;
308 GPIOE->MODER = 0xAAAA828A;
310 GPIOE->OSPEEDR = 0xFFFFC3CF;
312 GPIOE->OTYPER = 0x00000000;
314 GPIOE->PUPDR = 0x00000000;
317 GPIOF->AFR[0] = 0xCCCCCCCC;
318 GPIOF->AFR[1] = 0xCCCCCCCC;
320 GPIOF->MODER = 0xAA800AAA;
322 GPIOF->OSPEEDR = 0xAA800AAA;
324 GPIOF->OTYPER = 0x00000000;
326 GPIOF->PUPDR = 0x00000000;
329 GPIOG->AFR[0] = 0xCCCCCCCC;
330 GPIOG->AFR[1] = 0xCCCCCCCC;
332 GPIOG->MODER = 0xAAAAAAAA;
334 GPIOG->OSPEEDR = 0xAAAAAAAA;
336 GPIOG->OTYPER = 0x00000000;
338 GPIOG->PUPDR = 0x00000000;
341 GPIOH->AFR[0] = 0x00C0CC00;
342 GPIOH->AFR[1] = 0xCCCCCCCC;
344 GPIOH->MODER = 0xAAAA08A0;
346 GPIOH->OSPEEDR = 0xAAAA08A0;
348 GPIOH->OTYPER = 0x00000000;
350 GPIOH->PUPDR = 0x00000000;
353 GPIOI->AFR[0] = 0xCCCCCCCC;
354 GPIOI->AFR[1] = 0x00000CC0;
356 GPIOI->MODER = 0x0028AAAA;
358 GPIOI->OSPEEDR = 0x0028AAAA;
360 GPIOI->OTYPER = 0x00000000;
362 GPIOI->PUPDR = 0x00000000;
366 RCC->AHB3ENR |= 0x00000001;
368 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
370 FMC_Bank5_6->SDCR[0] = 0x000019E4;
371 FMC_Bank5_6->SDTR[0] = 0x01115351;
375 FMC_Bank5_6->SDCMR = 0x00000011;
376 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
377 while((tmpreg != 0) && (timeout-- > 0))
379 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
383 for (index = 0; index<1000; index++);
386 FMC_Bank5_6->SDCMR = 0x00000012;
387 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
389 while((tmpreg != 0) && (timeout-- > 0))
391 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
395 FMC_Bank5_6->SDCMR = 0x00000073;
396 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
398 while((tmpreg != 0) && (timeout-- > 0))
400 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
404 FMC_Bank5_6->SDCMR = 0x00046014;
405 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
407 while((tmpreg != 0) && (timeout-- > 0))
409 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
413 tmpreg = FMC_Bank5_6->SDRTR;
414 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
417 tmpreg = FMC_Bank5_6->SDCR[0];
418 FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
420#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
422 FMC_Bank1->BTCR[2] = 0x00001011;
423 FMC_Bank1->BTCR[3] = 0x00000201;
424 FMC_Bank1E->BWTR[2] = 0x0fffffff;
426#if defined(STM32F469xx) || defined(STM32F479xx)
428 FMC_Bank1->BTCR[2] = 0x00001091;
429 FMC_Bank1->BTCR[3] = 0x00110212;
430 FMC_Bank1E->BWTR[2] = 0x0fffffff;
436#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
445void SystemInit_ExtMemCtl(
void)
447 __IO uint32_t tmp = 0x00;
448#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
449 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
450#if defined (DATA_IN_ExtSDRAM)
451 register uint32_t tmpreg = 0, timeout = 0xFFFF;
452 register __IO uint32_t index;
454#if defined(STM32F446xx)
457 RCC->AHB1ENR |= 0x0000007D;
461 RCC->AHB1ENR |= 0x000001F8;
464 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
466#if defined(STM32F446xx)
468 GPIOA->AFR[0] |= 0xC0000000;
469 GPIOA->AFR[1] |= 0x00000000;
471 GPIOA->MODER |= 0x00008000;
473 GPIOA->OSPEEDR |= 0x00008000;
475 GPIOA->OTYPER |= 0x00000000;
477 GPIOA->PUPDR |= 0x00000000;
480 GPIOC->AFR[0] |= 0x00CC0000;
481 GPIOC->AFR[1] |= 0x00000000;
483 GPIOC->MODER |= 0x00000A00;
485 GPIOC->OSPEEDR |= 0x00000A00;
487 GPIOC->OTYPER |= 0x00000000;
489 GPIOC->PUPDR |= 0x00000000;
493 GPIOD->AFR[0] = 0x000000CC;
494 GPIOD->AFR[1] = 0xCC000CCC;
496 GPIOD->MODER = 0xA02A000A;
498 GPIOD->OSPEEDR = 0xA02A000A;
500 GPIOD->OTYPER = 0x00000000;
502 GPIOD->PUPDR = 0x00000000;
505 GPIOE->AFR[0] = 0xC00000CC;
506 GPIOE->AFR[1] = 0xCCCCCCCC;
508 GPIOE->MODER = 0xAAAA800A;
510 GPIOE->OSPEEDR = 0xAAAA800A;
512 GPIOE->OTYPER = 0x00000000;
514 GPIOE->PUPDR = 0x00000000;
517 GPIOF->AFR[0] = 0xCCCCCCCC;
518 GPIOF->AFR[1] = 0xCCCCCCCC;
520 GPIOF->MODER = 0xAA800AAA;
522 GPIOF->OSPEEDR = 0xAA800AAA;
524 GPIOF->OTYPER = 0x00000000;
526 GPIOF->PUPDR = 0x00000000;
529 GPIOG->AFR[0] = 0xCCCCCCCC;
530 GPIOG->AFR[1] = 0xCCCCCCCC;
532 GPIOG->MODER = 0xAAAAAAAA;
534 GPIOG->OSPEEDR = 0xAAAAAAAA;
536 GPIOG->OTYPER = 0x00000000;
538 GPIOG->PUPDR = 0x00000000;
540#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
541 || defined(STM32F469xx) || defined(STM32F479xx)
543 GPIOH->AFR[0] = 0x00C0CC00;
544 GPIOH->AFR[1] = 0xCCCCCCCC;
546 GPIOH->MODER = 0xAAAA08A0;
548 GPIOH->OSPEEDR = 0xAAAA08A0;
550 GPIOH->OTYPER = 0x00000000;
552 GPIOH->PUPDR = 0x00000000;
555 GPIOI->AFR[0] = 0xCCCCCCCC;
556 GPIOI->AFR[1] = 0x00000CC0;
558 GPIOI->MODER = 0x0028AAAA;
560 GPIOI->OSPEEDR = 0x0028AAAA;
562 GPIOI->OTYPER = 0x00000000;
564 GPIOI->PUPDR = 0x00000000;
569 RCC->AHB3ENR |= 0x00000001;
571 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
574#if defined(STM32F446xx)
575 FMC_Bank5_6->SDCR[0] = 0x00001954;
577 FMC_Bank5_6->SDCR[0] = 0x000019E4;
579 FMC_Bank5_6->SDTR[0] = 0x01115351;
583 FMC_Bank5_6->SDCMR = 0x00000011;
584 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
585 while((tmpreg != 0) && (timeout-- > 0))
587 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
591 for (index = 0; index<1000; index++);
594 FMC_Bank5_6->SDCMR = 0x00000012;
595 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
597 while((tmpreg != 0) && (timeout-- > 0))
599 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
603#if defined(STM32F446xx)
604 FMC_Bank5_6->SDCMR = 0x000000F3;
606 FMC_Bank5_6->SDCMR = 0x00000073;
608 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
610 while((tmpreg != 0) && (timeout-- > 0))
612 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
616#if defined(STM32F446xx)
617 FMC_Bank5_6->SDCMR = 0x00044014;
619 FMC_Bank5_6->SDCMR = 0x00046014;
621 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
623 while((tmpreg != 0) && (timeout-- > 0))
625 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
629 tmpreg = FMC_Bank5_6->SDRTR;
630#if defined(STM32F446xx)
631 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1));
633 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
637 tmpreg = FMC_Bank5_6->SDCR[0];
638 FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
642#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
643 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
644 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
646#if defined(DATA_IN_ExtSRAM)
649 RCC->AHB1ENR |= 0x00000078;
651 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);
654 GPIOD->AFR[0] = 0x00CCC0CC;
655 GPIOD->AFR[1] = 0xCCCCCCCC;
657 GPIOD->MODER = 0xAAAA0A8A;
659 GPIOD->OSPEEDR = 0xFFFF0FCF;
661 GPIOD->OTYPER = 0x00000000;
663 GPIOD->PUPDR = 0x00000000;
666 GPIOE->AFR[0] = 0xC00CC0CC;
667 GPIOE->AFR[1] = 0xCCCCCCCC;
669 GPIOE->MODER = 0xAAAA828A;
671 GPIOE->OSPEEDR = 0xFFFFC3CF;
673 GPIOE->OTYPER = 0x00000000;
675 GPIOE->PUPDR = 0x00000000;
678 GPIOF->AFR[0] = 0x00CCCCCC;
679 GPIOF->AFR[1] = 0xCCCC0000;
681 GPIOF->MODER = 0xAA000AAA;
683 GPIOF->OSPEEDR = 0xFF000FFF;
685 GPIOF->OTYPER = 0x00000000;
687 GPIOF->PUPDR = 0x00000000;
690 GPIOG->AFR[0] = 0x00CCCCCC;
691 GPIOG->AFR[1] = 0x000000C0;
693 GPIOG->MODER = 0x00085AAA;
695 GPIOG->OSPEEDR = 0x000CAFFF;
697 GPIOG->OTYPER = 0x00000000;
699 GPIOG->PUPDR = 0x00000000;
703 RCC->AHB3ENR |= 0x00000001;
705#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
707 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
709 FMC_Bank1->BTCR[2] = 0x00001011;
710 FMC_Bank1->BTCR[3] = 0x00000201;
711 FMC_Bank1E->BWTR[2] = 0x0fffffff;
713#if defined(STM32F469xx) || defined(STM32F479xx)
715 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
717 FMC_Bank1->BTCR[2] = 0x00001091;
718 FMC_Bank1->BTCR[3] = 0x00110212;
719 FMC_Bank1E->BWTR[2] = 0x0fffffff;
721#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\
722 || defined(STM32F412Zx) || defined(STM32F412Vx)
724 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);
726 FSMC_Bank1->BTCR[2] = 0x00001011;
727 FSMC_Bank1->BTCR[3] = 0x00000201;
728 FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF;
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...