Пример #1
0
void Timer2_Initialization(void)
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable the TIM5 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel =  TIM2_IRQn ;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

  /* -- Timer Configuration --------------------------------------------------- */
  TIM_DeInit(TIM2);
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
  TIM_TimeBaseStruct.TIM_Period = 2500;  //250ms  --> 4Hz
  TIM_TimeBaseStruct.TIM_Prescaler = 90 - 1; // Prescaled by 900 -> = 0.1M(10us)
  TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1; // Div by one -> 90 MHz (Now RCC_DCKCFGR_TIMPRE is configured to divide clock by two)
  TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStruct);
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);    // Set interrupt when timer reloads (overflow)
  TIM_ARRPreloadConfig(TIM2, DISABLE);       //Put ARR value into register
  TIM_Cmd(TIM2, ENABLE);
}
Пример #2
0
void Timer(uint32_t period){
	TIM_MATCHCFG_Type matchcfg;
	matchcfg.MatchChannel = 0;
	matchcfg.IntOnMatch = ENABLE;
	matchcfg.ResetOnMatch = DISABLE;
	matchcfg.StopOnMatch = DISABLE;
	matchcfg.MatchValue = period;
	matchcfg.ExtMatchOutputType = TIM_EXTMATCH_NOTHING;

	TIM_TIMERCFG_Type timercfg;
	timercfg.PrescaleOption = TIM_PRESCALE_USVAL;
	timercfg.PrescaleValue = 1;

	TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &timercfg);
	TIM_ConfigMatch(LPC_TIM0, &matchcfg);

	tim0_flag = 0;
	NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01));
	NVIC_EnableIRQ(TIMER0_IRQn);
	TIM_Cmd(LPC_TIM0, ENABLE);

	while(!tim0_flag);
	TIM_DeInit(LPC_TIM0);
	NVIC_DisableIRQ(TIMER0_IRQn);
}
Пример #3
0
/**
 * Initialize a timer, and reset its register map.
 * @param dev Timer to initialize
 */
void timer_reset(timer_dev *dev) {
	if (dev->regs == TIM1 || dev->regs == TIM8 || dev->regs == TIM9 || dev->regs == TIM10 || dev->regs == TIM11)
		RCC_APB2PeriphClockCmd(dev->clk, ENABLE);
	else
		RCC_APB1PeriphClockCmd(dev->clk, ENABLE);
	TIM_DeInit(dev->regs);		
}
Пример #4
0
	void F4Timer::set_period(uint32_t period)
	{
		if(TIM1==TIMx)
			RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
		if(TIM2==TIMx)
			RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
		if(TIM3==TIMx)
			RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
		if(TIM4==TIMx)
			RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
		if(TIM5==TIMx)
			RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);
		if(TIM6==TIMx)
			RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
		TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
		TIM_DeInit(TIMx);
		TIM_InternalClockConfig(TIMx);
		TIM_TimeBaseStructure.TIM_Prescaler=167;//1Mhz 1us 65536
		TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
		TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
		TIM_TimeBaseStructure.TIM_Period=period;
		TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
		TIM_TimeBaseInit(TIMx,&TIM_TimeBaseStructure);
		TIM_ClearFlag(TIMx,TIM_FLAG_Update);
		TIM_ARRPreloadConfig(TIMx,DISABLE);
		TIM_ITConfig(TIMx,TIM_IT_Update,ENABLE);
		TIM_Cmd(TIMx,ENABLE);
		TimerInit(this->TIMx);
	}
Пример #5
0
/*******************************************************************************
* Function Name  : System_TimerConfiguration
* Description    :  
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
static void System_TimerConfiguration(void)
{
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure = {0};
	//---------------------------------------------------------------------------
	// 初始化定时器TIM
	//---------------------------------------------------------------------------
	TIM_DeInit( BSP_TIM );//复位TIM定时器
	/* ---------------------------------------------------------------
	TIM Configuration: Output Compare Timing Mode:
	TIMCLK = 84 MHz, Prescaler = 8400, TIM counter clock = 10 KHz
	--------------------------------------------------------------- */
	/* TIM configuration */
	TIM_TimeBaseStructure.TIM_Period        = 9;
	TIM_TimeBaseStructure.TIM_Prescaler     = 0;      
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    
	TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up;   
	TIM_TimeBaseInit(BSP_TIM, &TIM_TimeBaseStructure);

	/*--------------------------------------------------------------------- */
	/* Prescaler configuration TIM 的时钟设定为10KHz,计数器的计量单位:1ms */
	/*   注意:分频数不能超过65535 (0xFFFF)                               */
	/*--------------------------------------------------------------------- */
	TIM_PrescalerConfig(BSP_TIM, (8400 - 1), TIM_PSCReloadMode_Immediate);

	/*  */
	TIM_ARRPreloadConfig(BSP_TIM, ENABLE);
	/* Clear TIM update pending flag[清除TIM 溢出中断标志] */
	TIM_ClearFlag(BSP_TIM, TIM_FLAG_Update);

	/* Enable TIM Update interrupt [TIM 溢出中断允许]*/
	TIM_ITConfig(BSP_TIM, TIM_IT_Update, ENABLE);  

	/* TIM enable counter [允许tim计数]*/
	TIM_Cmd(BSP_TIM, ENABLE);
}
Пример #6
0
uint32_t attachTimerCallback(uint8_t timer, ISRType ISR, uint32_t usDelay) {
  // Get the correct PCLK
  RCC_ClocksTypeDef RCC_Clocks;
  RCC_GetClocksFreq(&RCC_Clocks);
  uint32_t PCLK = RCC_Clocks.PCLK1_Frequency;// Frequency in Hz
  TIM_TypeDef *TIMx = TIMER_MAP[timer].TIMx;
  // For timers on APB2 use PCLK2
#if defined(STM32F446xx)
  if (TIMx == TIM1 || TIMx == TIM8 || TIMx == TIM9 || TIMx == TIM10 || TIMx == TIM11)
    PCLK = RCC_Clocks.PCLK2_Frequency;
#elif defined(SERIES_STM32F30x)
  if (TIMx == TIM1 || TIMx == TIM8 || TIMx == TIM15 || TIMx == TIM16 || TIMx == TIM17)
    PCLK = RCC_Clocks.PCLK2_Frequency;
#endif

  // Set the update ISR
  TimerInfo *cfg = &TIMER_MAP[timer];
  cfg->isr = ISR;

  // Start interrupts with low priority
  uint8_t priority = 0xd;
  nvicEnable(TIMER_MAP[timer].IRQn, priority);

  // Start 1MHz timebase
  TIM_Cmd(TIMx, DISABLE);
  TIM_DeInit(TIMx);
  // FIXME always getting half of what expected...
  timerInitHelper(timer, PCLK/(1000000)-1, usDelay-1);
  TIMx->CNT = 0;
  TIM_ClearITPendingBit(TIMx, TIM_IT_Update);
  TIM_ITConfig(TIMx, TIM_IT_Update, ENABLE);
  TIM_Cmd(TIMx, ENABLE);

  return PCLK;
}
/*=====================================================================================================*/
void TIM_Config( void )
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
  NVIC_InitTypeDef NVIC_InitStruct;
	
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  TIM_DeInit(TIM3);

  /************************** PWM Output **************************************/
  /* 設定 TIM3 Time Base */
  TIM_TimeBaseStruct.TIM_Period = (u16)(1000-1);              // 週期 = 10ms, 100Hz
  TIM_TimeBaseStruct.TIM_Prescaler = (u16)(720-1);             // 除頻720 = 100kHz
  TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;    // 上數
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStruct);
	
  /* 啟動 */
  TIM_ARRPreloadConfig(TIM3, ENABLE);                         // 致能 TIM3 重載寄存器ARR
	TIM_ClearFlag(TIM3, TIM_FLAG_Update);
	TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  TIM_Cmd(TIM3, ENABLE);                                      // 致能 TIM3

}
Пример #8
0
//TIM_3 is for ModBus communication
void InitTIM3(void)
{
    TIM_TimeBaseInitTypeDef TIM_3_TimeBaseInitStruct;
    NVIC_InitTypeDef MYNVIC;
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    
    // Configure TIM3 IRQ
    MYNVIC.NVIC_IRQChannel = TIM3_IRQn;
    MYNVIC.NVIC_IRQChannelCmd = ENABLE;
    MYNVIC.NVIC_IRQChannelPreemptionPriority = 0;
    MYNVIC.NVIC_IRQChannelSubPriority = 2;
    NVIC_Init(&MYNVIC);	
    
    TIM_DeInit(TIM3);
    
    //TIM_3 clock = 50, MHz / prescaler = 50 000 000 / 50 000 = 1000, Hz
    //time = TIM_3 period * (1 / TIM_3 clock) = 1 * (1 / 1000) = 0.001, s
       
    TIM_3_TimeBaseInitStruct.TIM_Prescaler = 50000;
    TIM_3_TimeBaseInitStruct.TIM_Period = 1;
    TIM_3_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 0
    TIM_3_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_3_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
    
    TIM_TimeBaseInit(TIM3, &TIM_3_TimeBaseInitStruct);
    
    TIM_ClearFlag(TIM3, TIM_FLAG_Update);
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
    
    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
    
    //TIM3 is not enabled from init function
    //ENABLE command is set by ModBusTimerEnable()
}
Пример #9
0
static void PWM2_Mode_Config(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitSturcture;
    TIM_OCInitTypeDef TIM_OCInitSturcture;

    u16 CCR1_Val = 1250;

    TIM_DeInit(PWM2_TIM);
    TIM_TimeBaseInitSturcture.TIM_Prescaler = (36-1);
    TIM_TimeBaseInitSturcture.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitSturcture.TIM_Period = 2500;
    TIM_TimeBaseInitSturcture.TIM_ClockDivision = 0;

    TIM_TimeBaseInit(PWM2_TIM,&TIM_TimeBaseInitSturcture);

    TIM_ClearFlag(PWM2_TIM, TIM_FLAG_Update);							    		/* 清除溢出中断标志 */
    TIM_ITConfig(PWM2_TIM,TIM_IT_Update,ENABLE);

   TIM_OCInitSturcture.TIM_OCMode = TIM_OCMode_PWM1;	    //配置为PWM模式1
   TIM_OCInitSturcture.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitSturcture.TIM_Pulse = CCR1_Val;
//设置跳变值,当计数器计数到这个值时,电平发生跳变
  TIM_OCInitSturcture.TIM_OCPolarity = TIM_OCPolarity_High;
//当定时器计数值小于CCR1_Val时为高电平

  TIM_OC1Init(PWM2_TIM, &TIM_OCInitSturcture);	 //使能通道1

    TIM_OC1PreloadConfig(PWM2_TIM, TIM_OCPreload_Disable);
     TIM_ARRPreloadConfig(PWM2_TIM, ENABLE);			 // 使能TIM3重载寄存器ARR

  /* TIM3 enable counter */
  TIM_Cmd(PWM2_TIM, DISABLE);                   //使能定时器3

}
Пример #10
0
void TIM2_Init(void)
{
	TIM_TimeBaseInitTypeDef  T;	//创建定时器变量

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);	  	//TIM2使用APB1时钟总线
	TIM_DeInit(TIM2);											//复位TIM2定时器到默认值

	T.TIM_Period=500-1;								//计数器溢出值,最大65535,此值不能更改,与输出比较的设定值一致,输出比较计数器溢出也为65535

	if(get_APB1_prevdiv() > 0){
		tim2_clock = Get_SyS_CLK(3)<<1;
	}else{
		tim2_clock = Get_SyS_CLK(3);
	}

	T.TIM_Prescaler = tim2_clock/TIM2_PREV_DIV - 1; 	//预分频系数,系统每秒72,000,000次,72000000/50000=1440分频,对系统频率72000000进行1440分频后,每秒计数频率为50000次,即每次计数时间为20us,每计满TIM_Period多次时变0重计
	//T.TIM_Prescaler =7200 - 1; 	//预分频系数,系统每秒72,000,000次,72000000/50000=1440分频,对系统频率72000000进行1440分频后,每秒计数频率为50000次,即每次计数时间为20us,每计满TIM_Period多次时变0重计

	T.TIM_ClockDivision = 0;						//时钟分割 在定时器预分频之前作一段延时,很少用到,设为0即可
  	T.TIM_CounterMode = TIM_CounterMode_Up;			//向上计数		UP:0到10000的计数	DOWN:FFFF到10000 
  	TIM_TimeBaseInit(TIM2, &T);						//根据上面设置初始化定时器TIM2

  	TIM_ClearFlag(TIM2, TIM_FLAG_Update);			//清空溢出中断
   	TIM_SetCounter(TIM2,0);							//设置计数器初值为0	//目前尚未启用该定时器
}
Пример #11
0
/**
 * @brief  TIM2初始化
 * @param  None
 * @retval None
 */
void my_Timer2_Init()
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

	/* Enable TIM2 Clock */
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

	TIM_DeInit(TIM2 );
	TIM_TimeBaseStructure.TIM_Prescaler = 0xFff; //加上原周期的N份,即(1+N)*T为1个周期
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //不要动了
	TIM_TimeBaseStructure.TIM_Period = (SystemCoreClock / N_Hz) - 1;
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //不要动了
	TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //不要动了

	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
	//TIM_ClearFlag(TIM2, TIM_FLAG_Update );
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	TIM_Cmd(TIM2, ENABLE);

	NVIC_InitTypeDef NVIC_InitStructure;
	/* Enable the TIM2 Interrupt */
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
}
Пример #12
0
	static void prvSetupTimerInterrupt( void )
	{
		unsigned char a;
		unsigned short b;
		unsigned long n = configCPU_PERIPH_HZ / configTICK_RATE_HZ;
		
		TIM_InitTypeDef timer;
		
		SCU_APBPeriphClockConfig( __TIM23, ENABLE );
		TIM_DeInit(TIM2);
		TIM_StructInit(&timer);
		prvFindFactors( n, &a, &b );
		
		timer.TIM_Mode           = TIM_OCM_CHANNEL_1;
		timer.TIM_OC1_Modes      = TIM_TIMING;
		timer.TIM_Clock_Source   = TIM_CLK_APB;
		timer.TIM_Clock_Edge     = TIM_CLK_EDGE_RISING;
		timer.TIM_Prescaler      = a-1;
		timer.TIM_Pulse_Level_1  = TIM_HIGH;
		timer.TIM_Pulse_Length_1 = s_nPulseLength  = b-1;
		
		TIM_Init (TIM2, &timer);
		TIM_ITConfig(TIM2, TIM_IT_OC1, ENABLE);
		/* Configure the VIC for the WDG interrupt. */
		VIC_Config( TIM2_ITLine, VIC_IRQ, 10 );
		VIC_ITCmd( TIM2_ITLine, ENABLE );
		
		/* Install the default handlers for both VIC's. */
		VIC0->DVAR = ( unsigned long ) prvDefaultHandler;
		VIC1->DVAR = ( unsigned long ) prvDefaultHandler;
		
		TIM_CounterCmd(TIM2, TIM_CLEAR);
		TIM_CounterCmd(TIM2, TIM_START);
	}
Пример #13
0
void InitTIM2(void)
{
    TIM_TimeBaseInitTypeDef TIM_2_TimeBaseInitStruct;
    NVIC_InitTypeDef MYNVIC;
    
    //AHB clock = 50, MHz
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    
    // Configure TIM2 IRQ
    MYNVIC.NVIC_IRQChannel = TIM2_IRQn;
    MYNVIC.NVIC_IRQChannelCmd = ENABLE;
    MYNVIC.NVIC_IRQChannelPreemptionPriority = 0;
    MYNVIC.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&MYNVIC);
   
    TIM_DeInit(TIM2);
    
    //TIM_2 clock = 50, MHz / prescaler = 50 000 000 / 500 = 100 000, Hz
    //time = TIM_2 period * (1 / TIM_2 clock) = 100 * (1 / 100 000) = 0.001, s
       
    TIM_2_TimeBaseInitStruct.TIM_Prescaler = 500;
    TIM_2_TimeBaseInitStruct.TIM_Period = 100;
    TIM_2_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 0
    TIM_2_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_2_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
    
    TIM_TimeBaseInit(TIM2, &TIM_2_TimeBaseInitStruct);
    
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
}
Пример #14
0
void systim_init(void* tim_init)
{
    TIM_TimeBaseInitTypeDef tbase_in;

    TIM_DeInit(OT_GPTIM);

/*    tbase_in.TIM_Prescaler      = 0;
    tbase_in.TIM_Period         = *(ot_u32*)tim_init;*/
    tbase_in.TIM_Prescaler      = *(ot_u32*)tim_init;
    tbase_in.TIM_Period         = 1;
    tbase_in.TIM_CounterMode    = TIM_CounterMode_Up;
    tbase_in.TIM_ClockDivision  = TIM_CKD_DIV1;
    TIM_TimeBaseInit(OT_GPTIM, &tbase_in);

    TIM_SetCompare1(OT_GPTIM, *(ot_u32*)tim_init);

    // Timers 9/10/11 have external clock wired to RTC crystal.
    // (The fact that the clock mode is called "Mode2" is a coincidence)
    // mode1: external input pin (TIx)
    // mode2: external trigger input (ETR)
    TIM_ETRClockMode2Config(OT_GPTIM,
                            TIM_ExtTRGPSC_OFF,
                            TIM_ExtTRGPolarity_NonInverted,
                            0);

}
Пример #15
0
//===============================================================================
void xTim3Init(void)
{
    //TIM3はタイマ割り込み(10KHz)で制御ループを回す
    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;            /* Enable the TIM3 gloabal Interrupt */
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  /* value = 0 - 15*/
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;         /* value = 0 - 15*/
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);



    TIM_TimeBaseInitTypeDef  TIM3_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM3_OCInitStructure;
    TIM_DeInit (TIM3);
    RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3, ENABLE);	//tim2クロックは84MHz。
    TIM3_TimeBaseStructure.TIM_Period = (84000000 / 10000) - 1;	//=8400 これで10KHz
    TIM3_TimeBaseStructure.TIM_Prescaler = 0;	//プリスケーラ。0だと1分周。
    TIM3_TimeBaseStructure.TIM_ClockDivision = 0;	//外部クロックサンプルの間隔。使用しないので0。
    TIM3_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit (TIM3, &TIM3_TimeBaseStructure);

    TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
    TIM3_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM3_OCInitStructure.TIM_Pulse = 0;
    TIM3_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init (TIM3, &TIM3_OCInitStructure);
    TIM_OC1PreloadConfig (TIM3, TIM_OCPreload_Enable);
    TIM_ITConfig (TIM3, TIM_IT_CC1, ENABLE);
    TIM_Cmd (TIM3, ENABLE);
}
Пример #16
0
/*********************************************************************************
  *Function     : void set_intorobot_loop_period(unsigned short time_ms)
  *Description  : set  intorobot_loop time
  *Input        : 100ms--6500ms
  *Output       : none
  *Return       : none
  *author       : lbz
  *date         : 6-December-2015
  *Others       : none        
**********************************************************************************/ 
void set_intorobot_loop_period(unsigned short time_ms)
{
    if(time_ms<100)  time_ms=100;
    if(time_ms>6500)  time_ms=6500;

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; // 必须加

    TIM_DeInit(TIM1);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能
    TIM_InternalClockConfig(TIM1); // 配置时钟源

    TIM_TimeBaseStructure.TIM_Period = (unsigned short)(time_ms*10-1);
    //TIM_TimeBaseStructure.TIM_Period = 2500-1;//设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 计数到5000为500ms
    TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;//72-1; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    TIM_Cmd(TIM1, ENABLE); // 使能
    TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);


    NVIC_InitTypeDef NVIC_InitStructure;
    //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 中断优先级分组
    NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIM1_UP_IRQ_PRIORITY;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}
Пример #17
0
/*
TIM2时钟初始化:0.5s溢出(定位周期)
*/
void TIM2_init(void) {
	NVIC_InitTypeDef NVIC_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);

	TIM_DeInit(TIM2);

	// 0.0005 * 100 = 0.05s
	TIM_TimeBaseStructure.TIM_Period = (int) ((float)LOCATION_PERIOD / (float)TICK_IN_PERIOD / 0.0005); // 0.05s
	DEBUG2(("%f %f %f\r\n", (float)LOCATION_PERIOD ,(float)TICK_IN_PERIOD, (float)LOCATION_PERIOD / (float)TICK_IN_PERIOD));
	DEBUG2(("定位TICK周期: %f\r\n", ((float)LOCATION_PERIOD / (float)TICK_IN_PERIOD / 0.0005)));
	TIM_TimeBaseStructure.TIM_Prescaler = 36000; // 1 / 72MHz * 36k = 0.0005/period
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

	TIM_ClearFlag(TIM2, TIM_FLAG_Update);
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	TIM_Cmd(TIM2, ENABLE);

	DEBUG2(("定位TICK周期: %d\r\n", TIM_TimeBaseStructure.TIM_Period));
}
Пример #18
0
/****************************************************************************************
** 函数名称: LEDInit
** 功能描述: LED 指示灯管脚初始化函数
** 参           数: none
** 返   回  值: none
** 作      者: Sevent
** 日      期: 2013年08月13日
**---------------------------------------------------------------------------------------
** 修 改 人: 
** 日   期: 
**--------------------------------------------------------------------------------------
****************************************************************************************/
void LEDInit(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	uint16_t PrescalerValue;

	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	
	PrescalerValue = (uint16_t) (SystemCoreClock /2/10000) - 1;

	/*	配置PB7 为指示的LED	*/
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	/*	配置PC7 为指示的LED, 由TIMER8驱动	*/
	
	GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3);
  /* Configure green led as output */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
		
	/* Enable the TIM8 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  PrescalerValue = (uint16_t) (SystemCoreClock /2/10000) - 1;

  /* Time base configuration */
	TIM_DeInit(TIM3);
  TIM_TimeBaseStructure.TIM_Period = 65535;
  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  /* Output Compare Toggle Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 100;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC2Init(TIM3, &TIM_OCInitStructure);

    /* TIM enable counter */
  //TIM_Cmd(TIM3, ENABLE);

  /* TIM IT enable */
  TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
}
Пример #19
0
/*******************************************************************************
* Function Name  : TIM2_Configuration
* Description    : 每1秒发生一次更新事件(进入中断服务程序).
* Input          : None
* Return         : None
*******************************************************************************/
void TIM2_Configuration(unsigned int MsTime)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

  //重新将Timer设置为缺省值
  TIM_DeInit(TIM2);
  
  //采用内部时钟给TIM2提供时钟源
  TIM_InternalClockConfig(TIM2);
  
  //预分频系数为36000-1,这样计数器时钟为64MHz/32000 = 2kHz
  TIM_TimeBaseStructure.TIM_Prescaler = 32000 - 1;
  
  //设置时钟分割
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  
  //设置计数器模式为向上计数模式
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  
  //设置计数溢出大小,每计2000个数就产生一个更新事件
  TIM_TimeBaseStructure.TIM_Period = (2*MsTime);
  
  //将配置应用到TIM2中
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  //清除溢出中断标志
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);
  
  //禁止ARR预装载缓冲器
  TIM_ARRPreloadConfig(TIM2, DISABLE);  //预装载寄存器的内容被立即传送到影子寄存器 
  
  //开启TIM2的中断
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
}
Пример #20
0
    TimedTasks_imp()
    {
        SysTick->VAL  = SysTick->LOAD = 168000-1;
        SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk
                      | SysTick_CTRL_CLKSOURCE_Msk;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
        NVIC_InitTypeDef nvic[1];
        nvic->NVIC_IRQChannel = SysTick_IRQn;
        nvic->NVIC_IRQChannelPreemptionPriority = 3;
        nvic->NVIC_IRQChannelSubPriority = 1;
        nvic->NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(nvic);

        // Enable timer 2 for the CPUclockdiff.
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

        TIM_DeInit(TIM2);
        TIM_TimeBaseInitTypeDef    tim[1];
        TIM_TimeBaseStructInit(tim);
        tim->TIM_Period = 0xFFFFFFFF; // Free running
        tim->TIM_Prescaler = 0;
        tim->TIM_ClockDivision = 0;
        tim->TIM_CounterMode = TIM_CounterMode_Down;
        TIM_TimeBaseInit(TIM2, tim);

        TIM_Cmd(TIM2, ENABLE);
    }
Пример #21
0
void ENC_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_ICInitTypeDef TIM_ICInitStructure;
	
	//Encoder uint connected to TIM2
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	RCC_APB1PeriphClockCmd(ENC_TIMER_CLK,ENABLE);
	RCC_APB2PeriphClockCmd(ENC_GPIO_CLK ,ENABLE);

	GPIO_StructInit(&GPIO_InitStructure);
	//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Pin = ENC_GPIO_PIN_A  | ENC_GPIO_PIN_B ;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(ENC_GPIO_PORT ,&GPIO_InitStructure);

	NVIC_InitStructure.NVIC_IRQChannel = ENC_TIMER_IRQn ;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIMx_PRE_EMPTION_PRIORITY;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIMx_SUB_PRIORITY;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	TIM_DeInit(ENC_TIMER);
	//TIM_TimeBaseInit(&TIM_TimeBaseStructure);

	TIM_TimeBaseStructure.TIM_Prescaler = 0x0;
	TIM_TimeBaseStructure.TIM_Period = (4*ENCODER_PPR)-1;
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(ENC_TIMER,&TIM_TimeBaseStructure);

	TIM_EncoderInterfaceConfig(ENC_TIMER,TIM_EncoderMode_TI12,
	TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
	TIM_ICStructInit(&TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_ICFilter = ICx_FILTER;
	TIM_ICInit(ENC_TIMER,&TIM_ICInitStructure);
 
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//注意通道
	TIM_ICInit(ENC_TIMER, &TIM_ICInitStructure);

	TIM_ClearFlag(ENC_TIMER,TIM_FLAG_Update);
	TIM_ITConfig(ENC_TIMER,TIM_IT_Update,ENABLE);

	TIM2->CNT = COUNTER_RESET;//!!此处注意修改

	//局部初始化
	ENC_Clear_Speed_Buffer();
	hPrevious_angle=0;
  hRot_Speed=0;;
  bSpeed_Buffer_Index = 0;
  hEncoder_Timer_Overflow=0;
  bIs_First_Measurement = true;
  hEncoder_Revolutions_Num=0; 
   
  TIM_Cmd(ENC_TIMER,ENABLE);
}
Пример #22
0
/*
 *berif: Initialize the counter of the encoding module(Right)
 *param: None
 *reval: None
*/
void TIM3_Init()
{
    TIM_ICInitTypeDef  			 TIM3_ICInitStructure;
    GPIO_InitTypeDef 				 GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef 				 NVIC_InitStructure;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  	//TIM4时钟使能
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); 	//使能PORTA时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //GPIOB6 | 7
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
    //以下两个不用设置
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; //推挽复用
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //下拉
    GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化PB

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //GPIOB6 | 7
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
    //以下两个不用设置
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; //推挽复用
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //下拉
    GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PB

    GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_TIM3); //PB6复用位定时器4
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_TIM3); //PB7复用位定时器4

    TIM_DeInit(TIM3);
    TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
    TIM_TimeBaseStructure.TIM_Prescaler=0;  //定时器分频
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
    TIM_TimeBaseStructure.TIM_Period=60000;   //自动重装载值
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);


    //初始化TIM5输入捕获参数
    TIM3_ICInitStructure.TIM_Channel = TIM_Channel_1 | TIM_Channel_2; //CC1S=01 	选择输入端 IC1映射到TI1上
    TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;	//上升沿捕获
    TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
    TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;	 //配置输入分频,不分频
    TIM3_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
    TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
    TIM_ICInit(TIM3, &TIM3_ICInitStructure);

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//允许更新中断 ,允许CC1IE捕获中断
    TIM_SetCounter(TIM3, 30000);
    TIM_Cmd(TIM3,ENABLE ); 	//使能定时器5

    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;		//子优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器、
}
Пример #23
0
static void serialTimerTxConfig(const timerHardware_t *timerHardwarePtr, uint8_t reference)
{
    uint32_t timerPeriod=34;
    TIM_DeInit(timerHardwarePtr->tim);
    timerConfigure(timerHardwarePtr, timerPeriod, 1);
    timerChCCHandlerInit(&escSerialPorts[reference].timerCb, onSerialTimer);
    timerChConfigCallbacks(timerHardwarePtr, &escSerialPorts[reference].timerCb, NULL);
}
/*====================================================================================================*/
static void ILI9341_LigConfig( void )
{
  GPIO_InitTypeDef GPIO_InitStruct;

#ifdef BLIGHT_PWM
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
  TIM_OCInitTypeDef TIM_OCInitStruct;

  /* PWM Clk Init *************************************************************/
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  RCC_APB2PeriphClockCmd(LCD_LIG_GPIO_CLK, ENABLE);

  /* LIG PA1  */
  GPIO_InitStruct.GPIO_Pin = LCD_LIG_PIN;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(LCD_LIG_GPIO_PORT, &GPIO_InitStruct);

  TIM_DeInit(TIM2);

  /************************** PWM Output **************************************/
  /* 設定 TIM2 Time Base */
  TIM_TimeBaseStruct.TIM_Period = (uint16_t)(256-1);          // Set Period
  TIM_TimeBaseStruct.TIM_Prescaler = (uint16_t)(0);           // Set Freq
  TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;    // Count Up
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStruct);

  /* 設定 TIM2 OC2 */
  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;              // PWM1 Mode
  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;  // Enable OC
  TIM_OCInitStruct.TIM_Pulse = 0;                             // Period Pulse
  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;      // 當計數值小於 PWM_MOTOR_MIN 時為高電平
  TIM_OC2Init(TIM2, &TIM_OCInitStruct);                       // 初始化 TIM2 OC2
  TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);           // Enable TIM2 OC2 Preload

  /* 啟動 */
  TIM_ARRPreloadConfig(TIM2, ENABLE);                         // Enable TIM2 ARR Preload
  TIM_Cmd(TIM2, ENABLE);                                      // Enable TIM2

  LCD_LIG = BLIGHT_MIN;

#else
  /* GPIO Clk ******************************************************************/
  LCD_LIG_GPIO_CLK_ENABLE();

  /* SPI Pin ******************************************************************/
  GPIO_InitStruct.Mode      = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull      = GPIO_PULLUP;
  GPIO_InitStruct.Speed     = GPIO_SPEED_HIGH;

  GPIO_InitStruct.Pin       = LCD_LIG_PIN;
  HAL_GPIO_Init(LCD_LIG_GPIO_PORT, &GPIO_InitStruct);

  LCD_LIG_L;

#endif
}
Пример #25
0
/**
 * @brief  Configures the SR-04 sonar sensor Peripheral.
 */
void sonar_config_hc_sr04(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	EXTI_InitTypeDef   EXTI_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	
	// TIM6 as timer, 10us resolution, 60000 overflow ~= 600ms
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
	TIM_DeInit(TIM6);
	TIM_InternalClockConfig(TIM6);
	TIM_TimeBaseStructure.TIM_Prescaler=839;
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseStructure.TIM_Period=60000-1;
	TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);
	TIM_ClearFlag(TIM6,TIM_FLAG_Update);
	TIM_ARRPreloadConfig(TIM6,DISABLE);
	TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
	TIM_Cmd(TIM6,ENABLE);
	
	// A8 as echo
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	// D14 as trigger
	GPIO_ResetBits(GPIOD, GPIO_Pin_14);
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOD, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOD, GPIO_Pin_14);

	// EXTI
	EXTI_ClearITPendingBit(EXTI_Line8);
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource8);

	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_InitStructure.EXTI_Line = EXTI_Line8;
	EXTI_Init(&EXTI_InitStructure);

	// priority : lowest
	NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
		
	sr04_initialized = 1;
}
Пример #26
0
/**
 * @brief De-initializes the Timers for all the Timer interfaces.
 * @retval None
 */
void Blox_Timer_DeInit_Timer(void) {
    TIM_DeInit(TIM1);
    TIM_DeInit(TIM2);
    TIM_DeInit(TIM3);
    TIM_DeInit(TIM4);
    TIM_DeInit(TIM5);
    TIM_DeInit(TIM6);
    TIM_DeInit(TIM7);
    TIM_DeInit(TIM8);
}
Пример #27
0
/***********************************************
函数名:MotorInit(void)
功能:输出PWM的定时器2初始化
输入参数:无
输出:无
描述:调用该函数,即初始化定时器2为PWM输出模式
备注:
***********************************************/
void MotorInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
    uint16_t PrescalerValue = 0;    //控制电机PWM频率
    
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打开外设A的时钟和复用时钟
		RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1 ,ENABLE);   //打开定时器1时钟
	  //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //打开外设A的时钟和复用时钟
		//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4 ,ENABLE);   //打开定时器4时钟  
    
    
    // 设置GPIO功能。
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    
    // 复位定时器。
    TIM_DeInit(TIM1);
    
    // 配置计时器。
    PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
    
    TIM_TimeBaseStructure.TIM_Period = 999;		            //计数上线	
    TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;	//pwm时钟分频
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;	
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
    
    TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
    
    
    // 配置TIM1为PWM输出模式
    TIM_OCStructInit(&TIM_OCInitStructure);
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 0;    //0
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    
    TIM_OC1Init(TIM1,&TIM_OCInitStructure);
    //TIM_OC2Init(TIM2,&TIM_OCInitStructure);
    //TIM_OC3Init(TIM2,&TIM_OCInitStructure);
    //TIM_OC4Init(TIM2,&TIM_OCInitStructure);
    
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
    //TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
    //TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
    //TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
    
    // 启动计时器。
    TIM_Cmd(TIM1,ENABLE);
    printf("TIM1 enable done...\r\n");
		MotorInit_1();
}
// ------------------------------------------------------------
// stops an active SIT by disabling its interrupt and TIMER
// and freeing up its state for future use.
// ------------------------------------------------------------
void IntervalTimer::stop_SIT() {

    NVIC_InitTypeDef nvicStructure;
	TIM_TypeDef* TIMx;


	//use SIT_id to identify TIM#
	switch (SIT_id) {
#if defined(STM32F10X_MD) || !defined(PLATFORM_ID)		//Core
	case 0:		// TIM2
		nvicStructure.NVIC_IRQChannel = TIM2_IRQn;
		TIMx = TIM2;
		break;
	case 1:		// TIM3
		nvicStructure.NVIC_IRQChannel = TIM3_IRQn;
		TIMx = TIM3;
		break;
	case 2:		// TIM4
		nvicStructure.NVIC_IRQChannel = TIM4_IRQn;
		TIMx = TIM4;
		break;
#elif defined(STM32F2XX) && defined(PLATFORM_ID)	//Photon
	case 0:		// TIM3
		nvicStructure.NVIC_IRQChannel = TIM3_IRQn;
		TIMx = TIM3;
		break;
	case 1:		// TIM4
		nvicStructure.NVIC_IRQChannel = TIM4_IRQn;
		TIMx = TIM4;
		break;
	case 2:		// TIM5
		nvicStructure.NVIC_IRQChannel = TIM5_IRQn;
		TIMx = TIM5;
		break;
	case 3:		// TIM6
		nvicStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;
		TIMx = TIM6;
		break;
	case 4:		// TIM7
		nvicStructure.NVIC_IRQChannel = TIM7_IRQn;
		TIMx = TIM7;
		break;
#endif
		}
	// disable counter
	TIM_Cmd(TIMx, DISABLE);
	
	// disable interrupt
    nvicStructure.NVIC_IRQChannelCmd = DISABLE;
    NVIC_Init(&nvicStructure);
	
	// disable timer peripheral
	TIM_DeInit(TIMx);
	
	// free SIT for future use
	SIT_used[SIT_id] = false;
}
Пример #29
0
static void serialTimerRxConfig(const timerHardware_t *timerHardwarePtr, uint8_t reference)
{
    // start bit is usually a FALLING signal
    TIM_DeInit(timerHardwarePtr->tim);
    timerConfigure(timerHardwarePtr, 0xFFFF, 1);
	serialICConfig(timerHardwarePtr->tim, timerHardwarePtr->channel, TIM_ICPolarity_Falling);
    timerChCCHandlerInit(&escSerialPorts[reference].edgeCb, onSerialRxPinChange);
    timerChConfigCallbacks(timerHardwarePtr, &escSerialPorts[reference].edgeCb, NULL);
}
// --------------------------------------------------
// Initialize external SDRAM memory Micron K4S561632J, 256Mbit(8M x 32)
 void Init_SDRAM( void )
{
    volatile uint32_t i;
    volatile unsigned long Dummy;
    EMC_DYN_MEM_Config_Type config;
    TIM_TIMERCFG_Type TIM_ConfigStruct;
      
    TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL;
    TIM_ConfigStruct.PrescaleValue  = 1;
      
    // Set configuration for Tim_config and Tim_MatchConfig
    TIM_Init(LPC_TIM0, TIM_TIMER_MODE,&TIM_ConfigStruct);
      
    config.ChipSize = 256;
    config.AddrBusWidth = 32;
    config.AddrMap = EMC_ADD_MAP_ROW_BANK_COL;
    config.CSn = 0;
    config.DataWidth = 16;
    config.TotalSize = SDRAM_SIZE;

    config.CASLatency= 3;
    config.RASLatency= 3;
    config.Active2ActivePeriod =EMC_NS2CLK( SDRAM_TRC);
    config.ActiveBankLatency =EMC_NS2CLK( SDRAM_TRRD);
    config.AutoRefrehPeriod = EMC_NS2CLK( SDRAM_TRFC);
    config.DataIn2ActiveTime = SDRAM_TDAL + EMC_NS2CLK( SDRAM_TRP);
    config.DataOut2ActiveTime = SDRAM_TAPR;
    config.WriteRecoveryTime = SDRAM_TWR;
    config.ExitSelfRefreshTime = EMC_NS2CLK( SDRAM_TXSR);
    config.LoadModeReg2Active = SDRAM_TMRD;
    config.PrechargeCmdPeriod = EMC_NS2CLK( SDRAM_TRP);
    config.ReadConfig = 1;  								// Command delayed strategy, using EMCCLKDELAY
    config.RefreshTime = EMC_NS2CLK( SDRAM_REFRESH) >> 4;
    config.Active2PreChargeTime = EMC_NS2CLK( SDRAM_TRAS);
    config.SeftRefreshExitTime = EMC_NS2CLK( SDRAM_TXSR);
    DynMem_Init(&config);
   
    EMC_DynCtrlSDRAMInit(EMC_DYNAMIC_CTRL_SDRAM_NOP); 		// Issue NOP command

    TIM_Waitms(100);                  						// wait 200ms
    EMC_DynCtrlSDRAMInit(EMC_DYNAMIC_CTRL_SDRAM_PALL); 		// Issue Pre-charge command

    for(i = 0; i < 0x80; i++);         						// wait 128 AHB clock cycles
    
    TIM_Waitms(100);    
    EMC_DynCtrlSDRAMInit(EMC_DYNAMIC_CTRL_SDRAM_MODE); 		// Issue MODE command
    Dummy = *((volatile uint32_t *)(SDRAM_BASE_ADDR | (0x32<<13)));  // Mode Register Setting

    //Timing for 48/60/72MHZ Bus
    EMC_DynCtrlSDRAMInit(EMC_DYNAMIC_CTRL_SDRAM_NORMAL); 	// Issue NORMAL command

    //enable buffers
    EMC_DynMemConfigB(0, EMC_DYNAMIC_CFG_BUFF_ENABLED);
    for(i = 100000; i;i--);
    
    TIM_DeInit(LPC_TIM0);
}