娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月15日(星期日)

2020年09月15日 | STM32F4時鐘設置分析

發布者:科技奇思 來源: eefocus關鍵字:STM32F4  時鐘設置  MDK4 手機看文章 掃描二維碼
隨時隨地手機看文章

環境:


主機:WIN7


開發環境:MDK4.72


MCU:STM32F407VGT6



STM32F4啟動與STM32F10X不同,時鐘已經默認配置好.


1.啟動代碼:


文件:startup_stm32f4xx.s


[cpp] view plain copy

 在CODE上查看代碼片派生到我的代碼片

; Reset handler  

Reset_Handler    PROC  

                 EXPORT  Reset_Handler             [WEAK]  

        IMPORT  SystemInit  

        IMPORT  __main  

  

                 LDR     R0, =SystemInit  

                 BLX     R0  

                 LDR     R0, =__main  

                 BX      R0  

                 ENDP  


可以看出,在進入main函數之前,系統調用了SystemInit函數.


2.SystemInit函數分析


SystemInit函數位于system_stm32f4xx.c文件中.此文件提供幾個宏定義可以設置各個時鐘:


在CODE上查看代碼片派生到我的代碼片

/************************* PLL Parameters *************************************/  

/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */  

#define PLL_M      25  

#define PLL_N      336  

  

/* SYSCLK = PLL_VCO / PLL_P */  

#define PLL_P      2  

  

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */  

#define PLL_Q      7  

  

/******************************************************************************/  


晶振頻率則是在文件stm32f4xx.h中進行設置:

外部晶振:


在CODE上查看代碼片派生到我的代碼片

#if !defined  (HSE_VALUE)   

  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */  

#endif /* HSE_VALUE */  


內部晶振:


在CODE上查看代碼片派生到我的代碼片

#if !defined  (HSI_VALUE)     

  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/  

#endif /* HSI_VALUE */   


綜上,可以得出默認配置中:

鎖相環壓腔振蕩器時鐘PLL_VCO = 25 / 25 * 336 = 336MHz


系統時鐘SYSCLK = 336 / 2 = 168MHz


USB,SD卡時鐘 = 336 / 7 = 48MHz


時鐘圖:

SystemInit函數代碼:


 在CODE上查看代碼片派生到我的代碼片

/** 

  * @brief  Setup the microcontroller system 

  *         Initialize the Embedded Flash Interface, the PLL and update the  

  *         SystemFrequency variable. 

  * @param  None 

  * @retval None 

  */  

void SystemInit(void)  

{  

  /* FPU settings ------------------------------------------------------------*/  

  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)  

    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */  

  #endif  

  

  /* Reset the RCC clock configuration to the default reset state ------------*/  

  /* Set HSION bit */  

  RCC->CR |= (uint32_t)0x00000001;  

  

  /* Reset CFGR register */  

  RCC->CFGR = 0x00000000;  

  

  /* Reset HSEON, CSSON and PLLON bits */  

  RCC->CR &= (uint32_t)0xFEF6FFFF;  

  

  /* Reset PLLCFGR register */  

  RCC->PLLCFGR = 0x24003010;  

  

  /* Reset HSEBYP bit */  

  RCC->CR &= (uint32_t)0xFFFBFFFF;  

  

  /* Disable all interrupts */  

  RCC->CIR = 0x00000000;  

  

#ifdef DATA_IN_ExtSRAM  

  SystemInit_ExtMemCtl();   

#endif /* DATA_IN_ExtSRAM */  

           

  /* Configure the System clock source, PLL Multiplier and Divider factors,  

     AHB/APBx prescalers and Flash settings ----------------------------------*/  

  SetSysClock();  

  

  /* Configure the Vector Table location add offset address ------------------*/  

#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  

}  


3.SetSysClock函數分析

在SetSysClock函數中,配置了系統時鐘,PLL倍頻以及分頻系數:


 在CODE上查看代碼片派生到我的代碼片

/** 

  * @brief  Configures the System clock source, PLL Multiplier and Divider factors,  

  *         AHB/APBx prescalers and Flash settings 

  * @Note   This function should be called only once the RCC clock configuration   

  *         is reset to the default reset state (done in SystemInit() function).    

  * @param  None 

  * @retval None 

  */  

static void SetSysClock(void)  

{  

/******************************************************************************/  

/*            PLL (clocked by HSE) used as System clock source                */  

/******************************************************************************/  

  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;  

    

  /* 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)  

  {  

    /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */  

    RCC->APB1ENR |= RCC_APB1ENR_PWREN;  

    PWR->CR |= PWR_CR_VOS;  

  

    /* HCLK = SYSCLK / 1*/  

    RCC->CFGR |= RCC_CFGR_HPRE_DIV1;  

        

    /* PCLK2 = HCLK / 2*/  

    RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;  

      

    /* PCLK1 = HCLK / 4*/  

    RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;  

  

    /* Configure the main PLL */  

    RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |  

                   (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);  

  

    /* Enable the main PLL */  

    RCC->CR |= RCC_CR_PLLON;  

  

    /* Wait till the main PLL is ready */  

    while((RCC->CR & RCC_CR_PLLRDY) == 0)  

    {  

    }  

     

    /* Configure Flash prefetch, Instruction cache, Data cache and wait state */  

    FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;  

  

    /* Select the main PLL as system clock source */  

    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));  

    RCC->CFGR |= RCC_CFGR_SW_PLL;  

  

    /* Wait till the main PLL is used as system clock source */  

    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);  

    {  

    }  

  }  

  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 */  

  }  

  

}  


如果外部時鐘啟動失敗,系統會使用內部時鐘

默認配置:


HCLK = SYSCLK / 1 = 168MHz


PCLK2 = HCLK / 2 = 84MHz


PCLK1 = HCLK / 4 = 42MHz


關鍵字:STM32F4  時鐘設置  MDK4 引用地址:STM32F4時鐘設置分析

上一篇:NRF24L01使用外部中斷讀取數據的問題
下一篇:stm32 外擴SRAM使用問題

推薦閱讀

  在工業制造方面,四維時代通過在機械手臂上安裝雙目攝像頭,利用攝像頭采集并實時計算識別物體,計算物體位姿,引導機械手臂進行操作,使機械手臂處理更復雜的物體,即使在初始位置不確定的情況下也能精準操作,為人工智能生產線奠定基礎。目前四維時代正在與機器人廠商合作利用機器人視覺來引導機械手臂,通過在機械手臂上放置攝像頭對拍攝到的地方...
探頭是我們觀測波形的第一步,它是連接被測設備與示波器輸入端的電子部件,工程師每天都會使用它捕獲波形,進行測試分析。但是你了解探頭的那些重要參數嗎?一、帶寬在我們選擇探頭時,首先要看的參數就是帶寬,探頭和示波器的帶寬定義是一樣的。如圖 1 所示,帶寬所指的頻率是正弦波信號衰減到 -3dB(即高頻處增益下降到 0.707)時的頻率。 圖 1 -...
“無人化”、“無接觸”、“遠距離”成為過去一年眾多行業保持運營的剛需條件與發展趨勢。疫情推動了工業制造業數字化轉型的同時,也見證了協作移動機器人在醫療和公共服務領域發揮的巨大作用。從凈化消毒、運送食品藥品、協助醫護人員監測生命體征,到管控出入境等,協作移動機器人的運用范疇不斷拓寬,可以完成多元的輔助與服務工作。 以公共衛生領域為...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 青阳县| 天津市| 游戏| 招远市| 鄂伦春自治旗| 德安县| 长岛县| 房产| 加查县| 张家港市| 咸阳市| 龙南县| 杭州市| 聂荣县| 韩城市| 阳城县| 德钦县| 疏附县| 新宾| 墨玉县| 昂仁县| 五原县| 抚远县| 富锦市| 特克斯县| 东宁县| 尖扎县| 元谋县| 万宁市| 东明县| 闽侯县| 拜城县| 延津县| 马鞍山市| 岳阳县| 塔城市| 祁门县| 普兰县| 会泽县| 沅陵县| 绥芬河市|