当我穿过荆棘时,就看到了光芒~
1、任务计划
(1)总结昨天学到的知识以及感悟
(2)看完定时器中断实验的视频
(3)编写定时器中断的程序
2、计划完成度
(1)学习完了之后,总结一下思路和要点还是很有必要的。加油哦~
(2)定时器中断的教学视频分为三部分讲的。1、通用定时器知识回顾(主要讲时钟源、时计电路部分),2、常用寄存器和库函数配置,3、写定时器中断实验
第一部分是通用定时器的概述,但是这边主要讲时钟源、时计电路部分,比较细致也比较深入。
[1]时钟选择。就像昨天总结的,一共四大类;
1)内部时钟(CK_INT)
2)外部时钟模式1:外部输入脚(TIx)
3)外部时钟模式2:外部触发输入(ETR),仅适用于TIM2、TIM3、TIM4
4)内部触发输入(ITRx):使用A定时器作为B定时器的预分频器(A为B提供时钟)。
2)外部时钟模式1:外部输入脚(TIx)
3)外部时钟模式2:外部触发输入(ETR),仅适用于TIM2、TIM3、TIM4
4)内部触发输入(ITRx):使用A定时器作为B定时器的预分频器(A为B提供时钟)。
[2]内部时钟选择。这里就可以根据定时器的内部结构图来分析了。
除非APB1的分频系数是1,否则通用定时器的时钟等于APB1时钟的2倍。
默认调用SystemInit的函数情况下:SYSCLK=168M,
AHB时钟=168M;
APB1时钟=42M;
APB1的分频系数=AHB/n=4,!=1,所以CK_INT=2X42M=84M;
CK_CNT=84/N;
[3]向上计数模式。这里比昨天讲的更细致一些。是假定时钟分频因子=1的情况下的。然后向下计数、中央对齐模式原理相似。
第二部分是通用定时器的常用寄存器和库函数。
[1]先是寄存器的部分:
*计数器当前值寄存器CNT(TIMx_CNT)
*DMA/中断使能寄存器(TIMx_DIER)
*预分频寄存器(TIMx_PSC)
*自动重装载寄存器(TIMx_ARR)
*控制寄存器1(TIMx_CR1)
[2]常用的库函数:
*定时器参数初始化voidTlM_TimeBaseInit(TIM_TypeDefTIMx,
TIM_TimeBaseInitTypeDef*TlM_TimeBaseInitStruct) ;
*定时器使能函数
void TlM_Cmd (TIM_TypeDef*TIMx,FunctionaIState NewState)
*定时器中断使能
TIM_ITConfig (TIM3,TIM_IT_Update,ENABLE);
*状态位的获取和清除
除此之外,还学习了定时器中断的实现步骤:
[1]使能定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TlMx,ENABLE) ;
[2]初始化定时器,配置ARR,PSC。 voidTIM _TimeBaselnit ( ) ;
[3]开启定时器中断,配置NVIC。 NVIC_Init ( );
[4]使能定时器TIM_Cmd ( ) ;
[5]编写中断服务函数 void TIM3_IRQHandler(void)。
(3) 因为之前已经学习过跑马灯的实验了,我们可以在原来的跑马灯的基础上进
行编写。今天晚上只写了一部分,明天都写完了,我一起把程序进行总结吧~
TIM_TimeBaseInitTypeDef*TlM_TimeBaseInitStruct) ;
*定时器使能函数
void TlM_Cmd (TIM_TypeDef*TIMx,FunctionaIState NewState)
*定时器中断使能
TIM_ITConfig (TIM3,TIM_IT_Update,ENABLE);
*状态位的获取和清除
除此之外,还学习了定时器中断的实现步骤:
[1]使能定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TlMx,ENABLE) ;
[2]初始化定时器,配置ARR,PSC。 voidTIM _TimeBaselnit ( ) ;
[3]开启定时器中断,配置NVIC。 NVIC_Init ( );
[4]使能定时器TIM_Cmd ( ) ;
[5]编写中断服务函数 void TIM3_IRQHandler(void)。
(3) 因为之前已经学习过跑马灯的实验了,我们可以在原来的跑马灯的基础上进
行编写。今天晚上只写了一部分,明天都写完了,我一起把程序进行总结吧~