關於 STM32 RCC 的函數庫

在ST 的資料手冊中,關於 STM32 RCC 的函數庫的文件是UM0427 .
based 32-bit MCU STM32F101xx and STM32F103xx firmware library
(網路上的文件為 stm32f_firmw.pdf)

在這份文件中Page 261 頁Firmware library functions 表339 中有所說明,



函數名
描述
RCC_DeInit
將外設 RCC暫存器重設為內定值
RCC_HSEConfig
設置外部高速晶振(HSE)
RCC_WaitForHSEStartUp
等待 HSE起振
RCC_AdjustHSICalibrationValue
調整內部高速晶振(HSI)校準值
RCC_HSICmd
使能或者失能內部高速晶振(HSI)
RCC_PLLConfig
設置 PLL時鐘源及倍頻係數
RCC_PLLCmd
使能或者失能 PLL
RCC_SYSCLKConfig
設置系統時鐘(SYSCLK)
RCC_GetSYSCLKSource
返回用作系統時鐘的時鐘源
RCC_HCLKConfig
設置 AHB時鐘(HCLK)
RCC_PCLK1Config
設置低速 AHB時鐘(PCLK1)
RCC_PCLK2Config
設置高速 AHB時鐘(PCLK2)
RCC_ITConfig
使能或者失能指定的 RCC中斷
RCC_USBCLKConfig
設置 USB時鐘(USBCLK)
RCC_ADCCLKConfig
設置 ADC時鐘(ADCCLK)
RCC_LSEConfig
設置外部低速晶振(LSE)
RCC_LSICmd
使能或者失能內部低速晶振(LSI)
RCC_RTCCLKConfig
設置 RTC時鐘(RTCCLK)
RCC_RTCCLKCmd
使能或者失能 RTC時鐘
RCC_GetClocksFreq
返回不同片上時鐘的頻率
RCC_AHBPeriphClockCmd
使能或者失能 AHB外設時鐘
RCC_APB2PeriphClockCmd
使能或者失能 APB2外設時鐘
RCC_APB1PeriphClockCmd
使能或者失能 APB1外設時鐘
RCC_APB2PeriphResetCmd
強制或者釋放高速 APB(APB2)外設復位
RCC_APB1PeriphResetCmd
強制或者釋放低速 APB(APB1)外設復位
RCC_BackupResetCmd
強制或者釋放後備域復位
RCC_ClockSecuritySystemCmd
使能或者失能時鐘安全系統
RCC_MCOConfig
選擇在 MCO管腳上輸出的時鐘源
RCC_GetFlagStatus
檢查指定的 RCC標誌位元設置與否
RCC_ClearFlag
清除 RCC的重定標誌位元
RCC_GetITStatus
檢查指定的 RCC中斷發生與否
RCC_ClearITPendingBit
清除 RCC的中斷待處理位


這個表格大致可說明下面RCC_Configuration程式碼的內容。

void RCC_Configuration(void)
{
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);   /使用HSE要確認有外部石英振盪器,否則要改用HSI

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);

  /*Flash處於等候狀態,2是針對高頻時鐘的,這兩句跟RCC沒直接關係,可以暫且略過 */

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
 
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
 /*上面藍色的部份要參考STM32 的時脈圖比較容理解 */

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
 

 /*下面的部份是要啟動 通訊腳位或者GPIO腳位 的時脈 */

  /* Enable USART1, GPIOA, GPIOx and AFIO clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOx
                         | RCC_APB2Periph_AFIO, ENABLE);
  /* Enable USART2 clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
}

/*至於 APB21 還是 APB2要參考技術手冊上的說明,也可參考下圖 */










留言

這個網誌中的熱門文章

STM32 I2C-EEPROM 的讀寫

如何提高STM32 ADC的精度

ENC28J60+Uip TCP Server/Client