示例#1
0
文件: bsp_timer.c 项目: Roger-WY/tq
/*******************************************************************************
 * 名    称: Bsp_ConfgiSysClk
 * 功    能: 配置CPU系统时钟
 * 入口参数: 枚举SYS_CLK_E ; 可选参数为:
 *				HSI_2M = 0		内部高速RC振荡源16M, 分频倍率设置为 1/8 可得到2M
 *				HSI_4M,			内部高速RC振荡源16M, 分频倍率设置为 1/4 可得到4M
 *				HSI_8M,			内部高速RC振荡源16M, 分频倍率设置为 1/2 可得到8M
 *				HSI_16M,		内部高速RC振荡源16M, 分频倍率设置为 1/1 可得到16M
 *			  	LSI_128K,		内部低速RC时钟源,频率固定为128KHz
 *				HSE_XTAL,		外部高速时钟 (频率由用于外接晶振决定,无分频选项)
 * 出口参数: 无
 * 作  者: Roger-WY
 * 创建日期: 2014-08-20
 * 修    改:
 * 修改日期:
 * 备    注: 建议使用优化代码模式
 *******************************************************************************/
void Bsp_ConfgiSysClk(SYS_CLK_E _iSysClk)
{
#if 1	/* 空间不足,优化代码, 只保留需要的时钟设置 */
	if (_iSysClk == HSI_16M) {
		/* 自动切换, 切换到内部高速时钟HSI, 禁止系统时钟中断, 关闭当前的时钟源  */
		CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
		CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  /* 设置内部高速RC时钟HSI为时钟源,分频系数为1 */
		while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);	/* 等待HSI时钟稳定 */
	}
#else
	switch (_iSysClk) {
		case HSE_XTAL:
			/* 自动切换, 切换到外部高速时钟HSE, 禁止系统时钟中断, 关闭当前的时钟源  */
			CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
			break;

		case LSI_128K:
			/* 自动切换, 切换到内部低速时钟LSI, 禁止系统时钟中断, 关闭当前的时钟源  */
			CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_LSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
			break;

		case HSI_16M:
			/* 自动切换, 切换到内部高速时钟HSI, 禁止系统时钟中断, 关闭当前的时钟源  */
			CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
			CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  /* 设置内部高速RC时钟HSI为时钟源,分频系数为1 */
			while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);	/* 等待HSI时钟稳定 */
			break;

		case HSI_8M:
			/* 自动切换, 切换到内部高速时钟HSI, 禁止系统时钟中断, 关闭当前的时钟源  */
			CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
			CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);  /* 设置内部高速RC时钟HSI为时钟源,分频系数为2 */
			while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);	/* 等待HSI时钟稳定 */
			break;

		case HSI_4M:
			/* 自动切换, 切换到内部高速时钟HSI, 禁止系统时钟中断, 关闭当前的时钟源  */
			CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
			CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4);  /* 设置内部高速RC时钟HSI为时钟源,分频系数为4 */
			while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);	/* 等待HSI时钟稳定 */
			break;

		case HSI_2M:
			/* 自动切换, 切换到内部高速时钟HSI, 禁止系统时钟中断, 关闭当前的时钟源  */
			CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
			CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);  /* 设置内部高速RC时钟HSI为时钟源,分频系数为8 */
			while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);	/* 等待HSI时钟稳定 */
			break;

		default:
			break;
	}
#endif
}
示例#2
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
void main(void)
{
  /* Enable LSE */
  CLK_LSEConfig(CLK_LSE_ON);
  /* Wait for LSE clock to be ready */
  while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);

  /* wait for 1 second for the LSE Stabilisation */
  LSE_StabTime();

  /* Select LSE (32.768 KHz) as RTC clock source */
  CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);

  CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);

  /* Calendar Configuration */
  Calendar_Init();

  /*RTC Tamper Configuration*/
  Tamper_Init();

  /* EvalBoard Configuration */
  EvalBoard_Init();

  Tamper_DelayShow(TampFilterIndex);

  while (1)
  {
    EnterSafeCode();
    Time_Show(LCD_LINE2, SHOW_POINT2);
    ExitSafeCode();
  }
}
示例#3
0
文件: clk.c 项目: JDsolution/ST-Node
//设置内部时钟16M为主时钟 
//输入参数:无
//输出参数:无
void Set_HSI(void)  
{
  //CLK_DeInit();     //恢复默认设置 
  CLK_HSICmd(ENABLE);   //内部时钟开
  while(SET != CLK_GetFlagStatus(CLK_FLAG_HSIRDY)); //等待内部时钟稳定
  CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);  //不分频,16M
  CLK_ClockSwitchCmd(ENABLE);   //时钟切换使能
  //切换配置
  CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSI,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
}
示例#4
0
void clock_config(void)
{
 CLK_HSICmd(ENABLE);
 CLK_RTCClockConfig(CLK_RTCCLKSource_HSI,CLK_RTCCLKDiv_64);
 CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
 CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
 while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY)==RESET); 
 CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);
 CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); 
 CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);
 CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
 CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, ENABLE);
 CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
};
示例#5
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
void main(void)
{
  /* Enable LSE */
  CLK_LSEConfig(CLK_LSE_ON);
  /* Wait for LSE clock to be ready */
  while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
  
  /* wait for 1 second for the LSE Stabilisation */
  Delay_Seconds(1);

  /* Select LSE (32.768 KHz) as RTC clock source */
  CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
  CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);

  /*RTC Tamper Configuration*/
  Tamper_Init();

  /* Calendar Configuration */
  Calendar_Init();

  /* EvalBoard Configuration */
  EvalBoard_Init();

  /* RTC Time fields reset*/
  Time_Reset();

  /* RTC Time pause waiting for a press on SEL Key */
  Time_Pause();

  while (1)
  {
    EnterSafeCode();
    Time_Show(LCD_LINE2);
    ExitSafeCode();
  }
}