Esempio n. 1
0
/**
  * @brief  Delay x sec
  * @param  Seconds : number of seconds to delay
  * @retval None.
  * Note : TIM4 is configured for a system clock = 2MHz
  */
void Delay_Seconds(uint8_t Seconds)
{
  uint8_t i = 0;

  /* Enable TIM4 Clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);

  /* Configure TIM4 to generate an update event each 1 s */
  TIM4_TimeBaseInit(TIM4_Prescaler_16384, 123);

  /* Enable TIM4 */
  TIM4_Cmd(ENABLE);

  /* Clear the Flag */
  TIM4_ClearFlag(TIM4_FLAG_Update);

  for (i = 0; i < Seconds; i++)
  {
    /* Wait 1 sec */
    while ( TIM4_GetFlagStatus(TIM4_FLAG_Update) == RESET )
    {}

    /* Clear the Flag */
    TIM4_ClearFlag(TIM4_FLAG_Update);
  }

  /* Disable TIM4 */
  TIM4_Cmd(DISABLE);

  /* Disable TIM4 Clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, DISABLE);
}
Esempio n. 2
0
/*******************************************************************************
 * 名    称: TIM4_Config
 * 功    能: 配置TIM4,为定时中断10ms, 频率100Hz
 * 入口参数: 无
 * 出口参数: 无
 * 作  者: Roger-WY
 * 创建日期: 2014-08-20
 * 修    改:
 * 修改日期:
 * 备    注:
 *******************************************************************************/
static void TIM4_Config(void)
{
#if 1	/* 空间不足,优化代码 */
	/* TIM4是自动重载的8位定时器,计数方向为递增,当递增到0时可以产生定时器中断,并自动重装定时器初值 */
  	/* 计算期望的计数时钟个数, 由于TIM4是8位的定时器,因此如果该值大于255,则需要进行分频 */
	TIM4_DeInit();                  		/* 复位TIM4所有寄存器 */
	TIM4_ARRPreloadConfig(ENABLE);  		/* 预先装载使能 */

	TIM4_TimeBaseInit(TIM4_PRESCALER_128, (16000000u / (1000 / SYSTICK_PERIOD)) / 128);	/* 设置预分频和定时器重载 */

	/* Clear TIM4 update flag */
	TIM4_ClearFlag(TIM4_FLAG_UPDATE);

	TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);  /* 使能TIM4中断 */
	//TIM4_UpdateDisableConfig(ENABLE);		/* 使能TIM4自动溢出事件 */

	TIM4_Cmd(ENABLE);						/* 使能TIM4 */

#else	/* 下面这个分支,可以根据时钟自动计算TIM4定时器初值 */

	uint32_t uiSysClkFreq;
	uint32_t uiCount;

	uiSysClkFreq = CLK_GetClockFreq();		/* 获得当前的系统时钟频率 */

	TIM4_DeInit();                  		/* 复位TIM4所有寄存器 */
	TIM4_ARRPreloadConfig(ENABLE);  		/* 预先装载使能 */

	/* TIM4是自动重载的8位定时器,计数方向为递增,当递增到0时可以产生定时器中断,并自动重装定时器初值 */
  	/* 计算期望的计数时钟个数, 由于TIM4是8位的定时器,因此如果该值大于255,则需要进行分频 */
  	uiCount = uiSysClkFreq / (1000 / SYSTICK_PERIOD);
  	if (uiCount <= (1u << 8))
  	{
		TIM4_TimeBaseInit(TIM4_PRESCALER_1, uiCount);	/* 设置预分频和定时器重载 */
  	} else if (uiCount <= (1u << 9)) {
  		TIM4_TimeBaseInit(TIM4_PRESCALER_2, uiCount / 2);	/* 设置预分频和定时器重载 */
  	} else if (uiCount <= (1u << 10)) {
  		TIM4_TimeBaseInit(TIM4_PRESCALER_4, uiCount / 4);	/* 设置预分频和定时器重载 */
  	} else if (uiCount <= (1u << 11)) {
  		TIM4_TimeBaseInit(TIM4_PRESCALER_8, uiCount / 8);	/* 设置预分频和定时器重载 */
  	} else if (uiCount <= (1u << 12)) {
  		TIM4_TimeBaseInit(TIM4_PRESCALER_16, uiCount / 16);	/* 设置预分频和定时器重载 */
  	} else if (uiCount <= (1u << 13)) {
  		TIM4_TimeBaseInit(TIM4_PRESCALER_32, uiCount / 32);	/* 设置预分频和定时器重载 */
  	} else if (uiCount <  (1u << 14)) {
  		TIM4_TimeBaseInit(TIM4_PRESCALER_64, uiCount / 64);	/* 设置预分频和定时器重载 */
  	} else if (uiCount <  (1u << 15)) {
  		TIM4_TimeBaseInit(TIM4_PRESCALER_128, uiCount / 128);	/* 设置预分频和定时器重载 */
  	} else {
  		while (1);	/* 异常,死机等待排错 */
  	}

	/* Clear TIM4 update flag */
	TIM4_ClearFlag(TIM4_FLAG_UPDATE);
	TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);  /* 使能TIM4中断 */
	//TIM4_UpdateDisableConfig(ENABLE);		/* 使能TIM4自动溢出事件 */

	TIM4_Cmd(ENABLE);						/* 使能TIM4 */
#endif
}
Esempio n. 3
0
void MOD_TIM_Config(Mod_Master_Frame_TypeDef* aFrame)
{


	TIM2_DeInit();
	
	TIM2_TimeBaseInit(0x0F, 1500); //2ms comm response time
	TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR);
	TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE);
	TIM2_Cmd(DISABLE);
	TIM2_ClearITPendingBit(TIM2_IT_UPDATE);
	TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
	TIM2_ClearFlag(TIM2_FLAG_UPDATE);
	
	TIM4_DeInit();
	
	TIM4_TimeBaseInit(0x07, 126);	//128 * 126 = 16128 = 2ms (8MHz), frame check
	TIM4_UpdateRequestConfig(TIM4_UPDATESOURCE_REGULAR);
	TIM4_GenerateEvent(TIM4_EVENTSOURCE_UPDATE);
	TIM4_Cmd(DISABLE);
	TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
	TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
	TIM4_ClearFlag(TIM4_FLAG_UPDATE);
	
}
Esempio n. 4
0
void CAN_Node_Clock_init(void)
{
	/* Configure TIM4 to run every 2 ms at 8 MHz clock. */
	TIM4_TimeBaseInit(TIM4_PRESCALER_128, Tim4Period);
	TIM4_ClearFlag(TIM4_FLAG_UPDATE);
	//TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
	TIM4_Cmd(ENABLE);
}
Esempio n. 5
0
void Init_Timer4(void)
{
  //1ms中断一次
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124);
  /* Clear TIM4 update flag */
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  /* Enable update interrupt */
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  TIM4_Cmd(ENABLE);
}
Esempio n. 6
0
bool CAN_Node_Clock_check_pending(void)
{
	if (TIM4_GetFlagStatus(TIM4_FLAG_UPDATE) == RESET)
		return FALSE;
	TIM4_ClearFlag(TIM4_FLAG_UPDATE);

	if (--clock_counter == 0)
	{
		clock_counter = ClockPostscaler;
		return TRUE;
	}

	//bool result = clock_pending;
	//clock_pending = FALSE;
	//return result;
	return FALSE;
}
Esempio n. 7
0
/**
  * @brief  Wait 1 sec for LSE stabilisation .
  * @param  None.
  * @retval None.
  * Note : TIM4 is configured for a system clock = 2MHz
  */
void LSE_StabTime(void)
{
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);

  /* Configure TIM4 to generate an update event each 1 s */
  TIM4_TimeBaseInit(TIM4_Prescaler_16384, 123);

  /* Enable TIM4 */
  TIM4_Cmd(ENABLE);

  /* Wait 1 sec */
  while ( TIM4_GetFlagStatus(TIM4_FLAG_Update) == RESET );

  TIM4_ClearFlag(TIM4_FLAG_Update);

  /* Disable TIM4 */
  TIM4_Cmd(DISABLE);

  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, DISABLE);
}
Esempio n. 8
0
/**
  * @brief  Configure TIM4 to generate an update interrupt each 1ms 
  * @param  None
  * @retval None
  */
void TIM4_Config(void)
{
  /* TIM4 configuration:
   - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
   clock used is 16 MHz / 128 = 125 000 Hz
  - With 125 000 Hz we can generate time base:
      max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms
      min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 = 0.016 ms
  - In this example we need to generate a time base equal to 1 ms
   so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */

  /* Time base configuration */
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);
  /* Clear TIM4 update flag */
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  /* Enable update interrupt */
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  

  /* Enable TIM4 */
  TIM4_Cmd(ENABLE);
}