通用定时器①-定时中断和内外时钟选择功能

①定时器定时中断和内外时钟选择功能 (基本功能)   

计数器计时频率:CK_CNT=CK_PSC/(PSC+1)

计数器溢出频率:CK_CNT_OV=CK_CNT/(ARR+1)=CK_PSC/(PSC+1)/(ARR+1)

计数器溢出时间:=1/计数器溢出频率

1、 定时器定时中断

        定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断;

        16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时;

        第一步、RCC开启时钟;

         第二步、选择时基单元的时钟源 (这里选择内部中断时钟源)

//选择内部时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
//选择ITRx其他定时器的时钟
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
//选择TIx捕获通道的时钟
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);
//ETR通过外部时钟模式1输入时钟
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter);
//ETR通过外部时钟模式2输入时钟
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
//用来单独配置ETR引脚的预分频器、极性、滤波器这些参数
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                   uint16_t ExtTRGFilter);

        第三步、配置时基单元

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

        第四步、配置输出中断控制,运行更新中断输出到NVIC

//手动将数字标志位清除一下
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

        第五步、配置NVIC ,在NVIC中打开定时器中断的通道并分配一个优先级

NVIC_InitTypeDef NVIC_InitInstructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitInstructure.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitInstructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitInstructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitInstructure.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitInstructure);
		

        第六步、运行控制

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

        最后一步使能计数器,并写一个定时器的中断函数

其他函数:

//用来单独写预分频值
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
//改变计数器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
//自动重装器预装功能配置
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
//给计数器写入一个值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
//给自动重装器写入一个值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
//获取当前计数器的值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
//获取当前预分频器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
2、定时器外部时钟
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值