lantian583的个人空间 https://bbs.21ic.com/?1288376 [收藏] [复制] [RSS]

日志

2017-12-20

已有 275 次阅读2017-12-20 20:27 |系统分类:兴趣爱好

1 #include "timer.h"
2 #include "led.h"
3 //通用定时器中断初始化
4 //这里时钟选择为APB1的2倍,而APB1为36M
5 //arr:自动重装值。
6 //psc:时钟预分频数
7 //这里使用的是定时器3!
8 void Timerx_Init(u16 arr,u16 psc)
9 {
10     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
11     NVIC_InitTypeDef NVIC_InitStructure;
12
13     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
14
15     TIM_TimeBaseStructure.TIM_Period = 5000; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值,计数到5000为500ms
16     TIM_TimeBaseStructure.TIM_Prescaler =(7200-1); //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
17     TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
18     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
19     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
20  
21      
22     TIM_ITConfig(  //使能或者失能指定的TIM中断
23         TIM3, //TIM2
24         TIM_IT_Update  |  //TIM 中断源
25         TIM_IT_Trigger,   //TIM 触发中断源
26         ENABLE  //使能
27         );
28      
29     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
30     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
31     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
32     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
33     NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
34
35     TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设
36                              
37 }
38
39 void TIM3_IRQHandler(void)   //TIM3中断
40 {
41     if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
42         {
43         TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
44      
45         //GPIO_WriteBit(GPIOD, GPIO_Pin_2, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_2)));
46         LED1=!LED1;
47         }
48 }

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)