【目的】配置定时器6,做为系统的tick。本理想用系统的systick来做,但是我需要1ms的计时单位,systick在以后的工程需要用到us延时,所以初始化一下tim6来做系统运行总计时。
1、time6初始化:
void time6_init(void)
{
/* System Clocks Configuration */
BSTIMClockFrequency = Common_BSTIM_RCC_Initialize(TIM6, RCC_HCLK_DIV4);
/* NVIC Configuration */
Common_TIM_NVIC_Initialize(TIM6_IRQn, ENABLE);
/* Time base configuration, period = 65535, prescaler = prescaler */
Common_TIM_Base_Initialize(TIM6, 65535, 0);
TIM_Base_Reload_Mode_Set(TIM6, TIM_PSC_RELOAD_MODE_IMMEDIATE);
TIM_Interrupt_Enable(TIM6, TIM_INT_UPDATE);
TIM_On(TIM6);
}
2、time6中断函数:
void TIM6_IRQHandler(void)
{
if (TIM_Interrupt_Status_Get(TIM6, TIM_INT_UPDATE) != RESET)
{
TIM_Interrupt_Status_Clear(TIM6, TIM_INT_UPDATE);
/* Pin PC.06 toggling */
delay_tick +=1;
GPIO_Pin_Toggle(GPIOB,GPIO_PIN_6);
}
}
3、为了方便用示波器观察定时初始化了PB6用来测量超时时间:
void GPIO_Config(void)
{
GPIO_InitType GPIO_InitStructure;
GPIO_Structure_Initialize(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_6;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;
GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);
}
4、main函数:
int main(void)
{
/* Configure the GPIO ports */
GPIO_Config();
time6_init();
while(1);
}
5、实验现象:
用示波器测得一个周期为2.ms,说明每进入一次中断是1ms。这样就得到了一个1ms的计时器。后期用这个计时器产生任务系统的节拍器来使用。
|