⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm32f10x_rcc.c

📁 中文固件库.rar
💻 C
📖 第 1 页 / 共 4 页
字号:
  tmpreg |= RCC_PLLSource | RCC_PLLMul;
  /* 存储新值 */
  RCC->CFGR = tmpreg;
}

/**
  * @简述  使能或失能 PLL.
  * @注解  如果 PLL 作为系统时钟,则它不能停止.
  * @参数  NewState: PLL 的新状态. 这个参数可以取: ENABLE 或 DISABLE.
  * @返回  没有
  */
void RCC_PLLCmd(FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  *(__IO uint32_t *) CR_PLLON_BB = (uint32_t)NewState;
}

#ifdef STM32F10X_CL
/**
  * @简述  配置 PREDIV1 分频参数.
  * @注解 
  *   - 这个函数仅仅应用在 PLL 被禁止的时候.
  *   - 这个函数仅仅应用在 STM32 互联系列微处理器.
  * @参数  RCC_PREDIV1_Source: 指定 PREDIV1 时钟源.
  *                            这个参数可以取下列值中的一个:
  *                            RCC_PREDIV1_Source_HSE: HSE 作为 PREDIV1 时钟
  *                            RCC_PREDIV1_Source_PLL2: PLL2 作为 PREDIV1 时钟
  * @参数  RCC_PREDIV1_Div: 选定 PREDIV1 分频系数.
  *                         这个参数 RCC_PREDIV1_Divx 中 x可以取:[1,16]
  * @返回  没有
  */
void RCC_PREDIV1Config(uint32_t RCC_PREDIV1_Source, uint32_t RCC_PREDIV1_Div)
{
  uint32_t tmpreg = 0;
  
  /* 检查参数 */
  assert_param(IS_RCC_PREDIV1_SOURCE(RCC_PREDIV1_Source));
  assert_param(IS_RCC_PREDIV1(RCC_PREDIV1_Div));

  tmpreg = RCC->CFGR2;
  /* 清 PREDIV1[3:0] 和 PREDIV1SRC 位 */
  tmpreg &= ~(CFGR2_PREDIV1 | CFGR2_PREDIV1SRC);
  /* Set the PREDIV1 clock source and division factor */
  tmpreg |= RCC_PREDIV1_Source | RCC_PREDIV1_Div ;
  /* 存储新值 */
  RCC->CFGR2 = tmpreg;
}


/**
  * @简述  配置 PREDIV2 分频参数.
  * @注解 
  *   - 这个函数仅仅应用在 PLL2,PLL3 被禁止的时候.
  *   - 这个函数仅仅应用在 STM32 互联系列微处理器.
  * @参数  RCC_PREDIV2_Div: 选定 PREDIV2 分频系数.
  *                         这个参数 RCC_PREDIV2_Divx 中 x可以取:[1,16]
  * @返回  没有
  */
void RCC_PREDIV2Config(uint32_t RCC_PREDIV2_Div)
{
  uint32_t tmpreg = 0;

  /* Check the parameters */
  assert_param(IS_RCC_PREDIV2(RCC_PREDIV2_Div));

  tmpreg = RCC->CFGR2;
  /* Clear PREDIV2[3:0] bits */
  tmpreg &= ~CFGR2_PREDIV2;
  /* Set the PREDIV2 division factor */
  tmpreg |= RCC_PREDIV2_Div;
  /* Store the new value */
  RCC->CFGR2 = tmpreg;
}

/**
  * @简述  配置 PLL2 倍频系数.
  * @注解
  *   - 这个函数仅仅应用在 PLL2 被禁止的时候.
  *   - 这个函数仅仅应用在 STM32 互联系列微处理器.
  * @参数  RCC_PLL2Mul: 指定 PLL2 倍频系数.
  *                     这个参数 RCC_PLL2Mul_x 中 x可以取:{[8,14], 16, 20}
  * @返回  没有
  */
void RCC_PLL2Config(uint32_t RCC_PLL2Mul)
{
  uint32_t tmpreg = 0;

  /* 检查参数 */
  assert_param(IS_RCC_PLL2_MUL(RCC_PLL2Mul));

  tmpreg = RCC->CFGR2;
  /* 清 PLL2Mul[3:0] 位 */
  tmpreg &= ~CFGR2_PLL2MUL;
  /* 设置 PLL2 配置位 */
  tmpreg |= RCC_PLL2Mul;
  /* 存储参数 */
  RCC->CFGR2 = tmpreg;
}


/**
  * @简述  使能或失能 PLL2.
  * @注解 
  *   - 如果 PLL2 被用做系统时钟,它就不能被禁止
  *     (i.e.它被用作 PLL 时钟输入源,就是说被用作系统时钟).
  *   - 这个函数仅仅应用在 STM32 互联系列微处理器.
  * @参数  NewState: PLL2 新的状态. 这个参数可以取: ENABLE 或 DISABLE.
  * @返回  没有
  */
void RCC_PLL2Cmd(FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  *(__IO uint32_t *) CR_PLL2ON_BB = (uint32_t)NewState;
}


/**
  * @简述  配置 PLL3 倍频系数.
  * @注解
  *   - 这个函数仅仅应用在 PLL3 被禁止的时候.
  *   - 这个函数仅仅应用在 STM32 互联系列微处理器.
  * @参数  RCC_PLL3Mul: 指定 PLL3 倍频系数.
  *                     这个参数 RCC_PLL3Mul_x 中 x可以取:{[8,14], 16, 20}
  * @返回  没有
  */
void RCC_PLL3Config(uint32_t RCC_PLL3Mul)
{
  uint32_t tmpreg = 0;

  /* 检查参数 */
  assert_param(IS_RCC_PLL3_MUL(RCC_PLL3Mul));

  tmpreg = RCC->CFGR2;
  /* 清 PLL3Mul[3:0] 位 */
  tmpreg &= ~CFGR2_PLL3MUL;
  /* 设置 PLL3 配置位 */
  tmpreg |= RCC_PLL3Mul;
  /* 存储新值 */
  RCC->CFGR2 = tmpreg;
}


/**
  * @简述  使能或失能 PLL3.
  * @注解  这个函数仅仅应用在 STM32 互联系列微处理器.
  * @参数  NewState: PLL3 新的状态. 这个参数可以取: ENABLE 或 DISABLE.
  * @返回  没有
  */
void RCC_PLL3Cmd(FunctionalState NewState)
{
  /* Check the parameters */

  assert_param(IS_FUNCTIONAL_STATE(NewState));
  *(__IO uint32_t *) CR_PLL3ON_BB = (uint32_t)NewState;
}
#endif /* STM32F10X_CL */

/**
  * @简述  配置系统时钟 (SYSCLK).
  * @参数  RCC_SYSCLKSource: 指定作为系统时钟的时钟源.
  *                          这个参数可以选择下列中的一个:
  *                          RCC_SYSCLKSource_HSI:   选定 HSI 作为系统时钟
  *                          RCC_SYSCLKSource_HSE:   选定 HSE 作为系统时钟
  *                          RCC_SYSCLKSource_PLLCLK:选定 PLL 作为系统时钟
  * @返回  没有
  */
void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)
{
  uint32_t tmpreg = 0;
  /* 检查参数 */
  assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
  tmpreg = RCC->CFGR;
  /* 清 SW[1:0] 位  */
  tmpreg &= CFGR_SW_Mask;
  /* 设置 SW[1:0] 位为 RCC_SYSCLKSource 的值 */
  tmpreg |= RCC_SYSCLKSource;
  /* 存储新值 */
  RCC->CFGR = tmpreg;
}

/**
  * @简述  获得用作系统时钟的时钟源.
  * @参数  没有
  * @返回  作为系统时钟的时钟源. 
  *        这个返回值可以是下列之中的一个:
  *        0x00: HSI 被用作系统时钟
  *        0x04: HSE 被用作系统时钟
  *        0x08: PLL 被用作系统时钟
  */
uint8_t RCC_GetSYSCLKSource(void)
{
  return ((uint8_t)(RCC->CFGR & CFGR_SWS_Mask));
}

/**
  * @简述  配置 AHB 时钟 (HCLK).
  * @参数  RCC_SYSCLK: 定义 AHB 时钟分频. 这个时钟来源于系统时钟
  *                    这个参数可以取下列值中的一个:
  *                    RCC_SYSCLK_Div1: AHB clock = SYSCLK
  *                    RCC_SYSCLK_Div2: AHB clock = SYSCLK/2
  *                    RCC_SYSCLK_Div4: AHB clock = SYSCLK/4
  *                    RCC_SYSCLK_Div8: AHB clock = SYSCLK/8
  *                    RCC_SYSCLK_Div16: AHB clock = SYSCLK/16
  *                    RCC_SYSCLK_Div64: AHB clock = SYSCLK/64
  *                    RCC_SYSCLK_Div128: AHB clock = SYSCLK/128
  *                    RCC_SYSCLK_Div256: AHB clock = SYSCLK/256
  *                    RCC_SYSCLK_Div512: AHB clock = SYSCLK/512
  * @返回  没有
  */
void RCC_HCLKConfig(uint32_t RCC_SYSCLK)
{
  uint32_t tmpreg = 0;
  /* 检查参数 */
  assert_param(IS_RCC_HCLK(RCC_SYSCLK));
  tmpreg = RCC->CFGR;
  /* 清 HPRE[3:0] 位 */
  tmpreg &= CFGR_HPRE_Reset_Mask;
  /* 设置 HPRE[3:0] 位为 RCC_SYSCLK 的值 */
  tmpreg |= RCC_SYSCLK;
  /* 存储新值 */
  RCC->CFGR = tmpreg;
}

/**
  * @简述  配置低速 APB 时钟 (PCLK1).
  * @参数  RCC_HCLK: 配置 APB1 时钟分频. 这个时钟来源于 AHB 时钟 (HCLK).
  *                  这个参数可以取下列值中的一个:
  *                  RCC_HCLK_Div1: APB1 clock = HCLK
  *                  RCC_HCLK_Div2: APB1 clock = HCLK/2
  *                  RCC_HCLK_Div4: APB1 clock = HCLK/4
  *                  RCC_HCLK_Div8: APB1 clock = HCLK/8
  *                  RCC_HCLK_Div16: APB1 clock = HCLK/16
  * @返回  没有
  */
void RCC_PCLK1Config(uint32_t RCC_HCLK)
{
  uint32_t tmpreg = 0;
  /* 检查参数 */
  assert_param(IS_RCC_PCLK(RCC_HCLK));
  tmpreg = RCC->CFGR;
  /* 清 PPRE1[2:0] 位 */
  tmpreg &= CFGR_PPRE1_Reset_Mask;
  /* 设置 PPRE1[2:0] 位为 RCC_HCLK 的值 */
  tmpreg |= RCC_HCLK;
  /* 存储新值 */
  RCC->CFGR = tmpreg;
}

/**
  * @简述  配置高速 APB 时钟 (PCLK2).
  * @参数  RCC_HCLK: 配置 APB2 时钟分频. 这个时钟来源于 AHB 时钟 (HCLK).
  *                  这个参数可以取下列值中的一个:
  *                  RCC_HCLK_Div1: APB1 clock = HCLK
  *                  RCC_HCLK_Div2: APB1 clock = HCLK/2
  *                  RCC_HCLK_Div4: APB1 clock = HCLK/4
  *                  RCC_HCLK_Div8: APB1 clock = HCLK/8
  *                  RCC_HCLK_Div16: APB1 clock = HCLK/16
  * @返回  没有
  */
void RCC_PCLK2Config(uint32_t RCC_HCLK)
{
  uint32_t tmpreg = 0;
  /* 检查参数 */
  assert_param(IS_RCC_PCLK(RCC_HCLK));
  tmpreg = RCC->CFGR;
  /* 清 PPRE2[2:0] 位 */
  tmpreg &= CFGR_PPRE2_Reset_Mask;
  /* 设置 PPRE2[2:0] 位为 RCC_HCLK 的值 */
  tmpreg |= RCC_HCLK << 3;
  /* 存储新值 */
  RCC->CFGR = tmpreg;
}

/**
  * @简述  使能或失能指定的 RCC 中断.
  * @参数  RCC_IT: 待使能或者失能的RCC中断源.
  * 
  *                 STM32_互联系列微处理器, 这个参数可以取下列值中的一个:      
  *                                         RCC_IT_LSIRDY: LSI 准备中断
  *                                         RCC_IT_LSERDY: LSE 准备中断
  *                                         RCC_IT_HSIRDY: HSI 准备中断
  *                                         RCC_IT_HSERDY: HSE 准备中断
  *                                         RCC_IT_PLLRDY: PLL 准备中断
  *                                         RCC_IT_PLL2RDY: PLL2 准备中断
  *                                         RCC_IT_PLL3RDY: PLL3 准备中断
  * 
  *                    其它_STM32_微处理器, 这个参数可以取下列值中的一个:      
  *                                         RCC_IT_LSIRDY: LSI 准备中断
  *                                         RCC_IT_LSERDY: LSE 准备中断
  *                                         RCC_IT_HSIRDY: HSI 准备中断
  *                                         RCC_IT_HSERDY: HSE 准备中断
  *                                         RCC_IT_PLLRDY: PLL 准备中断
  *       
  * @参数  NewState: RCC 中断新的状态.
  *                   这个参数可以取: ENABLE 或 DISABLE.
  * @返回  没有
  */
void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_RCC_IT(RCC_IT));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* 执行RCC_CIR[12:8]位的字节存取来使能选择的中断s */
    *(__IO uint8_t *) CIR_BYTE2_ADDRESS |= RCC_IT;
  }
  else
  {
    /* 执行RCC_CIR[12:8]位的字节存取来禁止选择的中断 */
    *(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT;
  }
}

#ifndef STM32F10X_CL
/**
  * @简述  配置 USB 时钟 (USBCLK).
  * @参数  RCC_USBCLKSource: 指定 USB 的时钟源. 这个时钟来源于 PLL 输出.
  *                          这个参数可以取下列值中的一个:
  *                          RCC_USBCLKSource_PLLCLK_1Div5: PLL 时钟的1.5分频用作 USB 时钟源
  *                          RCC_USBCLKSource_PLLCLK_Div1:  PLL 时钟用作 USB 时钟源
  * @返回  没有
  */
void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource)
{
  /* 检查参数 */
  assert_param(IS_RCC_USBCLK_SOURCE(RCC_USBCLKSource));

  *(__IO uint32_t *) CFGR_USBPRE_BB = RCC_USBCLKSource;
}
#else
/**
  * @简述  配置 USB OTG FS 时钟 (OTGFSCLK).
  *        这个函数仅仅应用在 STM32 互联系列微处理器.
  * @参数  RCC_OTGFSCLKSource: 指定 USB OTG FS 时钟源.
  *                            这个时钟来源于 PLL 的输出.
  *                            这个参数可以取下列值中的一个:
  *                            RCC_OTGFSCLKSource_PLLVCO_Div3: PLL VCO clock divided by 2 selected as USB OTG FS clock source
  *                            RCC_OTGFSCLKSource_PLLVCO_Div2: PLL VCO clock divided by 2 selected as USB OTG FS clock source
  * @返回  没有
  */
void RCC_OTGFSCLKConfig(uint32_t RCC_OTGFSCLKSource)
{
  /* 检查参数 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -