当前位置:首页 > 单片机 > 单片机
[导读]通用定时器的功能非常强大,能够测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM),也能够用于定时中断任务。其实系统滴答和实时时钟功能类似于定时器。51单片机也有定时器,可以使用软件的方式

通用定时器的功能非常强大,能够测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM),也能够用于定时中断任务。其实系统滴答和实时时钟功能类似于定时器。51单片机也有定时器,可以使用软件的方式实现实时时钟的功能,就是断电后会到初始状态了。

神舟IV开发板采用的是STM32F107VCT,内部含有多达10个定时器,其中TIM1和TIM8是高级控制定时器在APB2总线上,TIM2—TIM7是挂在APB1上的,所以使用起来要注意的是,开启不同的时钟。

我们就用通用定时器TIM2实现LED以1s速度流水灯的功能。首先我们看看时钟,TIM2挂在APB1总线上,而APB1的最大时钟速度为36MHZ。由于系统初始化将APB1的分频比设置为2,所以TIM2的时钟就是APB1时钟的2倍,等于系统时钟。TIM2具有16位可编程预分频器,范围可以从1到65536之间。这里我们设置分频比为7200,得到10KHZ的计数时钟。再设置自动装载的计数值为10000,这样就得到1s的定时器间隔,最后使能中断,配置中断函数。


主要代码为:

static void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

/* Set the Vector Table base address at 0x08000000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

/* Enable the TIM5 gloabal Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

int main(void)

{

/* Setup STM32 system (clock, PLL and Flash configuration) */

SystemInit();

/* Add your application code here

*/

LED_Configuration();//LED时钟和端口配置

TIM2_Configuration();//TIM2时钟和端口配置

NVIC_Configuration();//中断配置

/* Infinite loop */

while (1)

{

}

}

void TIM2_IRQHandler(void)//定时器中断函数

{

if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)

{

TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

LED_Spark();//led流水灯

}

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭