53static void SetSysClock(
void);
55#if !defined (HSE_VALUE)
56 #define HSE_VALUE ((uint32_t)12000000)
59#if !defined (HSI_VALUE)
60 #define HSI_VALUE ((uint32_t)16000000)
82#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
83 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
84 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
89#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
90 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
102#if defined(USER_VECT_TAB_ADDRESS)
106#if defined(VECT_TAB_SRAM)
107#define VECT_TAB_BASE_ADDRESS SRAM_BASE
109#define VECT_TAB_OFFSET 0x00000000U
112#define VECT_TAB_BASE_ADDRESS FLASH_BASE
114#define VECT_TAB_OFFSET 0x00000000U
145const uint8_t
AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
155#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
156 static void SystemInit_ExtMemCtl(
void);
177 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
178 SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));
181 #if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
182 SystemInit_ExtMemCtl();
186 #if defined(USER_VECT_TAB_ADDRESS)
187 SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
192 RCC->CR |= (uint32_t)0x00000001;
195 RCC->CFGR = 0x00000000;
198 RCC->CR &= (uint32_t)0xFEF6FFFF;
201 RCC->PLLCFGR = 0x24003010;
204 RCC->CR &= (uint32_t)0xFFFBFFFF;
207 RCC->CIR = 0x00000000;
220static void SetSysClock(
void)
226 volatile unsigned int StartUpCounter = 0;
232 RCC->CR |= RCC_CR_HSEON;
236 while(((RCC->CR & RCC_CR_HSERDY) == 0) && StartUpCounter!= HSE_STARTUP_TIMEOUT)
242 if((RCC->CR & RCC_CR_HSERDY) == RCC_CR_HSERDY)
247 RCC->APB1ENR |= RCC_APB1ENR_PWREN;
256 RCC->CFGR |= (0x04 << RCC_CFGR_PPRE2_Pos);
259 RCC->CFGR |= (0x05 << RCC_CFGR_PPRE1_Pos);
269 RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (1 << 22) | (PLL_Q << 24);
272 RCC->CR |= RCC_CR_PLLON;
275 while((RCC->CR & RCC_CR_PLLRDY) == 0);
278 FLASH->ACR &= ~(FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | (FLASH_ACR_LATENCY));
279 FLASH->ACR |= (FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | (0x05 << FLASH_ACR_LATENCY_Pos));
293 while((RCC->CR & RCC_CR_PLLON) != RCC_CR_PLLON);
312 if((RCC->CR & RCC_CR_HSIRDY) == RCC_CR_HSIRDY)
317 RCC->APB1ENR |= RCC_APB1ENR_PWREN;
326 RCC->CFGR |= (0x04 << RCC_CFGR_PPRE2_Pos);
329 RCC->CFGR |= (0x05 << RCC_CFGR_PPRE1_Pos);
339 RCC->PLLCFGR = HSIPLL_M | (HSIPLL_N << 6) | (((HSIPLL_P >> 1) -1) << 16) | (HSIPLL_Q << 24);
342 RCC->CR |= RCC_CR_PLLON;
345 while((RCC->CR & RCC_CR_PLLRDY) == 0);
348 FLASH->ACR &= ~(FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | (FLASH_ACR_LATENCY));
349 FLASH->ACR |= (FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | (0x05 << FLASH_ACR_LATENCY_Pos));
363 while((RCC->CR & RCC_CR_PLLON) != RCC_CR_PLLON);
370 #if defined (RTC_ENABLE)
371 volatile unsigned int BackupResetCounter = 0;
377 RCC->BDCR |= RCC_BDCR_BDRST;
378 for(BackupResetCounter = 0; BackupResetCounter <= 5; BackupResetCounter++);
379 RCC->BDCR &= ~(RCC_BDCR_BDRST);
380 for(BackupResetCounter = 0; BackupResetCounter <= 5; BackupResetCounter++);
383 RCC->BDCR &= ~(RCC_BDCR_RTCEN | RCC_BDCR_RTCSEL | RCC_BDCR_LSEON);
389 RCC->BDCR |= RCC_BDCR_RTCEN | (0x01 << RCC_BDCR_RTCSEL_Pos) | RCC_BDCR_LSEON;
440 uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
458 pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
459 pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
464 pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
469 pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
472 pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
486#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM)
487#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
488 || defined(STM32F469xx) || defined(STM32F479xx)
497void SystemInit_ExtMemCtl(
void)
499 __IO uint32_t tmp = 0x00;
501 register uint32_t tmpreg = 0, timeout = 0xFFFF;
502 register __IO uint32_t index;
505 RCC->AHB1ENR |= 0x000001F8;
508 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
511 GPIOD->AFR[0] = 0x00CCC0CC;
512 GPIOD->AFR[1] = 0xCCCCCCCC;
514 GPIOD->MODER = 0xAAAA0A8A;
516 GPIOD->OSPEEDR = 0xFFFF0FCF;
518 GPIOD->OTYPER = 0x00000000;
520 GPIOD->PUPDR = 0x00000000;
523 GPIOE->AFR[0] = 0xC00CC0CC;
524 GPIOE->AFR[1] = 0xCCCCCCCC;
526 GPIOE->MODER = 0xAAAA828A;
528 GPIOE->OSPEEDR = 0xFFFFC3CF;
530 GPIOE->OTYPER = 0x00000000;
532 GPIOE->PUPDR = 0x00000000;
535 GPIOF->AFR[0] = 0xCCCCCCCC;
536 GPIOF->AFR[1] = 0xCCCCCCCC;
538 GPIOF->MODER = 0xAA800AAA;
540 GPIOF->OSPEEDR = 0xAA800AAA;
542 GPIOF->OTYPER = 0x00000000;
544 GPIOF->PUPDR = 0x00000000;
547 GPIOG->AFR[0] = 0xCCCCCCCC;
548 GPIOG->AFR[1] = 0xCCCCCCCC;
550 GPIOG->MODER = 0xAAAAAAAA;
552 GPIOG->OSPEEDR = 0xAAAAAAAA;
554 GPIOG->OTYPER = 0x00000000;
556 GPIOG->PUPDR = 0x00000000;
559 GPIOH->AFR[0] = 0x00C0CC00;
560 GPIOH->AFR[1] = 0xCCCCCCCC;
562 GPIOH->MODER = 0xAAAA08A0;
564 GPIOH->OSPEEDR = 0xAAAA08A0;
566 GPIOH->OTYPER = 0x00000000;
568 GPIOH->PUPDR = 0x00000000;
571 GPIOI->AFR[0] = 0xCCCCCCCC;
572 GPIOI->AFR[1] = 0x00000CC0;
574 GPIOI->MODER = 0x0028AAAA;
576 GPIOI->OSPEEDR = 0x0028AAAA;
578 GPIOI->OTYPER = 0x00000000;
580 GPIOI->PUPDR = 0x00000000;
584 RCC->AHB3ENR |= 0x00000001;
586 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
588 FMC_Bank5_6->SDCR[0] = 0x000019E4;
589 FMC_Bank5_6->SDTR[0] = 0x01115351;
593 FMC_Bank5_6->SDCMR = 0x00000011;
594 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
595 while((tmpreg != 0) && (timeout-- > 0))
597 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
601 for (index = 0; index<1000; index++);
604 FMC_Bank5_6->SDCMR = 0x00000012;
605 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
607 while((tmpreg != 0) && (timeout-- > 0))
609 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
613 FMC_Bank5_6->SDCMR = 0x00000073;
614 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
616 while((tmpreg != 0) && (timeout-- > 0))
618 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
622 FMC_Bank5_6->SDCMR = 0x00046014;
623 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
625 while((tmpreg != 0) && (timeout-- > 0))
627 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
631 tmpreg = FMC_Bank5_6->SDRTR;
632 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
635 tmpreg = FMC_Bank5_6->SDCR[0];
636 FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
638#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
640 FMC_Bank1->BTCR[2] = 0x00001011;
641 FMC_Bank1->BTCR[3] = 0x00000201;
642 FMC_Bank1E->BWTR[2] = 0x0fffffff;
644#if defined(STM32F469xx) || defined(STM32F479xx)
646 FMC_Bank1->BTCR[2] = 0x00001091;
647 FMC_Bank1->BTCR[3] = 0x00110212;
648 FMC_Bank1E->BWTR[2] = 0x0fffffff;
654#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
663void SystemInit_ExtMemCtl(
void)
665 __IO uint32_t tmp = 0x00;
666#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
667 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
668#if defined (DATA_IN_ExtSDRAM)
669 register uint32_t tmpreg = 0, timeout = 0xFFFF;
670 register __IO uint32_t index;
672#if defined(STM32F446xx)
675 RCC->AHB1ENR |= 0x0000007D;
679 RCC->AHB1ENR |= 0x000001F8;
682 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
684#if defined(STM32F446xx)
686 GPIOA->AFR[0] |= 0xC0000000;
687 GPIOA->AFR[1] |= 0x00000000;
689 GPIOA->MODER |= 0x00008000;
691 GPIOA->OSPEEDR |= 0x00008000;
693 GPIOA->OTYPER |= 0x00000000;
695 GPIOA->PUPDR |= 0x00000000;
698 GPIOC->AFR[0] |= 0x00CC0000;
699 GPIOC->AFR[1] |= 0x00000000;
701 GPIOC->MODER |= 0x00000A00;
703 GPIOC->OSPEEDR |= 0x00000A00;
705 GPIOC->OTYPER |= 0x00000000;
707 GPIOC->PUPDR |= 0x00000000;
711 GPIOD->AFR[0] = 0x000000CC;
712 GPIOD->AFR[1] = 0xCC000CCC;
714 GPIOD->MODER = 0xA02A000A;
716 GPIOD->OSPEEDR = 0xA02A000A;
718 GPIOD->OTYPER = 0x00000000;
720 GPIOD->PUPDR = 0x00000000;
723 GPIOE->AFR[0] = 0xC00000CC;
724 GPIOE->AFR[1] = 0xCCCCCCCC;
726 GPIOE->MODER = 0xAAAA800A;
728 GPIOE->OSPEEDR = 0xAAAA800A;
730 GPIOE->OTYPER = 0x00000000;
732 GPIOE->PUPDR = 0x00000000;
735 GPIOF->AFR[0] = 0xCCCCCCCC;
736 GPIOF->AFR[1] = 0xCCCCCCCC;
738 GPIOF->MODER = 0xAA800AAA;
740 GPIOF->OSPEEDR = 0xAA800AAA;
742 GPIOF->OTYPER = 0x00000000;
744 GPIOF->PUPDR = 0x00000000;
747 GPIOG->AFR[0] = 0xCCCCCCCC;
748 GPIOG->AFR[1] = 0xCCCCCCCC;
750 GPIOG->MODER = 0xAAAAAAAA;
752 GPIOG->OSPEEDR = 0xAAAAAAAA;
754 GPIOG->OTYPER = 0x00000000;
756 GPIOG->PUPDR = 0x00000000;
758#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
759 || defined(STM32F469xx) || defined(STM32F479xx)
761 GPIOH->AFR[0] = 0x00C0CC00;
762 GPIOH->AFR[1] = 0xCCCCCCCC;
764 GPIOH->MODER = 0xAAAA08A0;
766 GPIOH->OSPEEDR = 0xAAAA08A0;
768 GPIOH->OTYPER = 0x00000000;
770 GPIOH->PUPDR = 0x00000000;
773 GPIOI->AFR[0] = 0xCCCCCCCC;
774 GPIOI->AFR[1] = 0x00000CC0;
776 GPIOI->MODER = 0x0028AAAA;
778 GPIOI->OSPEEDR = 0x0028AAAA;
780 GPIOI->OTYPER = 0x00000000;
782 GPIOI->PUPDR = 0x00000000;
787 RCC->AHB3ENR |= 0x00000001;
789 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
792#if defined(STM32F446xx)
793 FMC_Bank5_6->SDCR[0] = 0x00001954;
795 FMC_Bank5_6->SDCR[0] = 0x000019E4;
797 FMC_Bank5_6->SDTR[0] = 0x01115351;
801 FMC_Bank5_6->SDCMR = 0x00000011;
802 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
803 while((tmpreg != 0) && (timeout-- > 0))
805 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
809 for (index = 0; index<1000; index++);
812 FMC_Bank5_6->SDCMR = 0x00000012;
813 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
815 while((tmpreg != 0) && (timeout-- > 0))
817 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
821#if defined(STM32F446xx)
822 FMC_Bank5_6->SDCMR = 0x000000F3;
824 FMC_Bank5_6->SDCMR = 0x00000073;
826 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
828 while((tmpreg != 0) && (timeout-- > 0))
830 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
834#if defined(STM32F446xx)
835 FMC_Bank5_6->SDCMR = 0x00044014;
837 FMC_Bank5_6->SDCMR = 0x00046014;
839 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
841 while((tmpreg != 0) && (timeout-- > 0))
843 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
847 tmpreg = FMC_Bank5_6->SDRTR;
848#if defined(STM32F446xx)
849 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1));
851 FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
855 tmpreg = FMC_Bank5_6->SDCR[0];
856 FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
860#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
861 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
862 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
864#if defined(DATA_IN_ExtSRAM)
867 RCC->AHB1ENR |= 0x00000078;
869 tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);
872 GPIOD->AFR[0] = 0x00CCC0CC;
873 GPIOD->AFR[1] = 0xCCCCCCCC;
875 GPIOD->MODER = 0xAAAA0A8A;
877 GPIOD->OSPEEDR = 0xFFFF0FCF;
879 GPIOD->OTYPER = 0x00000000;
881 GPIOD->PUPDR = 0x00000000;
884 GPIOE->AFR[0] = 0xC00CC0CC;
885 GPIOE->AFR[1] = 0xCCCCCCCC;
887 GPIOE->MODER = 0xAAAA828A;
889 GPIOE->OSPEEDR = 0xFFFFC3CF;
891 GPIOE->OTYPER = 0x00000000;
893 GPIOE->PUPDR = 0x00000000;
896 GPIOF->AFR[0] = 0x00CCCCCC;
897 GPIOF->AFR[1] = 0xCCCC0000;
899 GPIOF->MODER = 0xAA000AAA;
901 GPIOF->OSPEEDR = 0xFF000FFF;
903 GPIOF->OTYPER = 0x00000000;
905 GPIOF->PUPDR = 0x00000000;
908 GPIOG->AFR[0] = 0x00CCCCCC;
909 GPIOG->AFR[1] = 0x000000C0;
911 GPIOG->MODER = 0x00085AAA;
913 GPIOG->OSPEEDR = 0x000CAFFF;
915 GPIOG->OTYPER = 0x00000000;
917 GPIOG->PUPDR = 0x00000000;
921 RCC->AHB3ENR |= 0x00000001;
923#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
925 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
927 FMC_Bank1->BTCR[2] = 0x00001011;
928 FMC_Bank1->BTCR[3] = 0x00000201;
929 FMC_Bank1E->BWTR[2] = 0x0fffffff;
931#if defined(STM32F469xx) || defined(STM32F479xx)
933 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
935 FMC_Bank1->BTCR[2] = 0x00001091;
936 FMC_Bank1->BTCR[3] = 0x00110212;
937 FMC_Bank1E->BWTR[2] = 0x0fffffff;
939#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\
940 || defined(STM32F412Zx) || defined(STM32F412Vx)
942 tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);
944 FSMC_Bank1->BTCR[2] = 0x00001011;
945 FSMC_Bank1->BTCR[3] = 0x00000201;
946 FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF;
#define RCC_BDCR_LSERDY_Msk
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]
CMSIS STM32F4xx Device Peripheral Access Layer Header File.