📄 stm32f10x_rcc.c
字号:
tmp = tmp >> 14;
presc = ADCPrescTable[tmp];
/* ADCCLK clock frequency [ADCCLK的时钟频率]*/
RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc;
}
/*******************************************************************************
* 函数名称: RCC_AHBPeriphClockCmd
* 功能描述: 使能或关闭AHB外围设备时钟.
* 输入参数: (1)RCC_AHBPeriph:用于门控时钟的AHB外围设备。
* 这个参数可以是下面任意值的组合:
* - RCC_AHBPeriph_DMA1
* - RCC_AHBPeriph_DMA2
* - RCC_AHBPeriph_SRAM
* - RCC_AHBPeriph_FLITF
* - RCC_AHBPeriph_CRC
* - RCC_AHBPeriph_FSMC
* - RCC_AHBPeriph_SDIO
* SRAM 和FLITF 时钟只有在睡眠的模式下可以无效.
* (2)NewState:指定的外围设备时钟的新状态.这个参数可以是:ENALBLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_AHBPeriphClockCmd(u32 RCC_AHBPeriph, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->AHBENR |= RCC_AHBPeriph;
}
else
{
RCC->AHBENR &= ~RCC_AHBPeriph;
}
}
/*******************************************************************************
* 函数名称: RCC_APB2PeriphClockCmd
* 功能描述: 使能或关闭高速APB(APB2)外围设备时钟.
* 输入参数: (1)RCC_AHB2Periph:用于门控时钟的AHB2外围设备。
* 这个参数可以是下面任意值的组合:
* - RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
* RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
* RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
* RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
* RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
* RCC_APB2Periph_ALL
* (2)NewState:专用外围设备时钟的新状态.这个参数可以是:ENALBLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->APB2ENR |= RCC_APB2Periph;
}
else
{
RCC->APB2ENR &= ~RCC_APB2Periph;
}
}
/*******************************************************************************
* 函数名称: RCC_APB1PeriphClockCmd
* 功能描述: 使能或关闭低速APB(APB1)外围设备时钟
* 输入参数: (1)RCC_APB1Periph: 用于门控时钟的APB1外围设备。
* 这个参数可以是下面任意值的组合:
* - RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,
* RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,
* RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,
* RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4,
* RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,
* RCC_APB1Periph_USB, RCC_APB1Periph_CAN, RCC_APB1Periph_BKP,
* RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_ALL
* (2)NewState:专用外围设备时钟的新状态.这个参数可以是:ENALBLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_APB1PeriphClockCmd(u32 RCC_APB1Periph, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->APB1ENR |= RCC_APB1Periph;
}
else
{
RCC->APB1ENR &= ~RCC_APB1Periph;
}
}
/*******************************************************************************
* 函数名称: RCC_APB2PeriphResetCmd
* 功能描述: 强迫或释放高速APB(APB2)外围设备复位.
* 输入参数: (1)RCC_APB2Periph:复位的APB2外围设备.
* 这个参数可以是下面任意值的组合:
* - RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
* RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
* RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
* RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
* RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
* RCC_APB2Periph_ALL
* (2)NewState:指定外围设备复位的新状态.这个参数可以是:ENALBLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_APB2PeriphResetCmd(u32 RCC_APB2Periph, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->APB2RSTR |= RCC_APB2Periph;
}
else
{
RCC->APB2RSTR &= ~RCC_APB2Periph;
}
}
/*******************************************************************************
* 函数名称: RCC_APB1PeriphResetCmd
* 功能描述: 强制或释放低速APB(APB1)外围设备复位.
* 输入参数: (1)RCC_APB1Periph:指定要复位的APB1外围设备.
* 这个参数可以是下面任意值的组合:
* - RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,
* RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,
* RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,
* RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4,
* RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,
* RCC_APB1Periph_USB, RCC_APB1Periph_CAN, RCC_APB1Periph_BKP,
* RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_ALL
* (2)NewState:指定外围设备复位的新状态.这个参数可以是:ENALBLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_APB1PeriphResetCmd(u32 RCC_APB1Periph, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->APB1RSTR |= RCC_APB1Periph;
}
else
{
RCC->APB1RSTR &= ~RCC_APB1Periph;
}
}
/*******************************************************************************
* 函数名称: RCC_BackupResetCmd
* 功能描述: 强制或释放备份域复位.
* 输入参数: NewState:备份域复位的新状态.这个参数可以是:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_BackupResetCmd(FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(vu32 *) BDCR_BDRST_BB = (u32)NewState;
}
/*******************************************************************************
* 函数名称: RCC_ClockSecuritySystemCmd
* 功能描述: 使能或关闭时钟安全系统
* 输入参数: NewState:时钟安全系统的新状态.这个参数可以是:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_ClockSecuritySystemCmd(FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(vu32 *) CR_CSSON_BB = (u32)NewState;
}
/*******************************************************************************
* 函数名称: RCC_MCOConfig
* 功能描述: 选择MCO引脚上的输出时钟源
* 输入参数: RCC_MCO:详细说明要输出的时钟源.
* 这个参数可以是下面的值之一:
* - RCC_MCO_NoClock: 没有选择时钟
* - RCC_MCO_SYSCLK: 选择系统时钟
* - RCC_MCO_HSI: 选择HIS振荡时钟
* - RCC_MCO_HSE: 选择HSE振荡时钟
* - RCC_MCO_PLLCLK_Div2:选择PLL时钟两分频
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_MCOConfig(u8 RCC_MCO)
{
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_MCO(RCC_MCO));
/* Perform Byte access to MCO[2:0] bits to select the MCO source [执行MCO[2:0]位的字节存取来选择MCO源]*/
*(vu8 *) CFGR_BYTE4_ADDRESS = RCC_MCO;
}
/*******************************************************************************
* 函数名称: RCC_GetFlagStatus
* 功能描述: 检查指定的RCC标志设置与否.
* 输入参数: RCC_FLAG:要检查的标志.
* 这个参数可以是下面的值之一:
* - RCC_FLAG_HSIRDY: HIS振荡时钟就绪
* - RCC_FLAG_HSERDY: HSE振荡时钟就绪
* - RCC_FLAG_PLLRDY: PLL时钟就绪
* - RCC_FLAG_LSERDY: LSE振荡时钟就绪
* - RCC_FLAG_LSIRDY: LSI振荡时钟就绪
* - RCC_FLAG_PINRST: 引脚复位
* - RCC_FLAG_PORRST: POR/PDR复位
* - RCC_FLAG_SFTRST: 软件复位
* - RCC_FLAG_IWDGRST: 独立看门狗复位
* - RCC_FLAG_WWDGRST: 窗口看门狗复位
* - RCC_FLAG_LPWRRST: 低电量复位
* 输出参数: 无
* 返回参数: RCC_FLAG的新状态(SET或RESET).
*******************************************************************************/
FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG)
{
u32 tmp = 0;
u32 statusreg = 0;
FlagStatus bitstatus = RESET;
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_FLAG(RCC_FLAG));
/* Get the RCC register index [取得RCC寄存器引索]*/
tmp = RCC_FLAG >> 5;
if (tmp == 1) /* The flag to check is in CR register [CR寄存器中的检查标志]*/
{
statusreg = RCC->CR;
}
else if (tmp == 2) /* The flag to check is in BDCR register [BDCR寄存器中的检查标志]*/
{
statusreg = RCC->BDCR;
}
else /* The flag to check is in CSR register [CSR寄存器中的检查标志]*/
{
statusreg = RCC->CSR;
}
/* Get the flag position [取得标志的位置]*/
tmp = RCC_FLAG & FLAG_Mask;
if ((statusreg & ((u32)1 << tmp)) != (u32)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
/* Return the flag status [返回标志的状态]*/
return bitstatus;
}
/*******************************************************************************
* 函数名称: RCC_ClearFlag
* 功能描述: 清除RCC复位标志.
* 复位标志为: RCC_FLAG_PINRST, RCC_FLAG_PORRST,
* RCC_FLAG_SFTRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST,
* RCC_FLAG_LPWRRST
* 输入参数: 无
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_ClearFlag(void)
{
/* Set RMVF bit to clear the reset flags [通过置位RMVF位来清除复位标志]*/
RCC->CSR |= CSR_RMVF_Set;
}
/*******************************************************************************
* 函数名称: RCC_GetITStatus
* 功能描述: 检查指定的RCC中断是否发生.
* 输入参数: RCC_IT:检查RCC中断源.
* 这个参数可以是下面的值之一:
* - RCC_IT_LSIRDY: LSI就绪中断
* - RCC_IT_LSERDY: LSE就绪中断
* - RCC_IT_HSIRDY: HIS就绪中断
* - RCC_IT_HSERDY: HSE就绪中断
* - RCC_IT_PLLRDY: PLL就绪中断
* - RCC_IT_CSS: 时钟安全系统中断
* 输出参数: 无
* 返回参数: RCC_IT的新状态(SETorRESET).
*******************************************************************************/
ITStatus RCC_GetITStatus(u8 RCC_IT)
{
ITStatus bitstatus = RESET;
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_GET_IT(RCC_IT));
/* Check the status of the specified RCC interrupt [检查指定的RCC中断状态]*/
if ((RCC->CIR & RCC_IT) != (u32)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
/* Return the RCC_IT status [返回RCC_IT状态]*/
return bitstatus;
}
/*******************************************************************************
* 函数名称: RCC_ClearITPendingBit
* 功能描述: 清除RCC中断挂起位
* 输入参数: RCC_IT:指定要清除的中断挂起位..
* 这个参数可以是下面任意值的组合:
* - RCC_IT_LSIRDY: LSI就绪中断
* - RCC_IT_LSERDY: LSE就绪中断
* - RCC_IT_HSIRDY: HIS就绪中断
* - RCC_IT_HSERDY: HSE就绪中断
* - RCC_IT_PLLRDY: PLL就绪中断
* - RCC_IT_CSS: 时钟安全系统中断
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void RCC_ClearITPendingBit(u8 RCC_IT)
{
/* Check the parameters [检查参数]*/
assert_param(IS_RCC_CLEAR_IT(RCC_IT));
/* Perform Byte access to RCC_CIR[23:16] bits to clear the selected interrupt
pending bits [执行RCC_CIR[23:16]位的字节存取来清除选择的中断挂起位]*/
*(vu8 *) CIR_BYTE3_ADDRESS = RCC_IT;
}
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -