15-HAL库之定时器学习

1.基本定时器(TIM6/TIM7)

15-HAL库之定时器学习_第1张图片

包含时钟源(CK_INT),1个16位自动重载递增计数器(CK_ARR),1个16位可编程预分频器(CK_PSC),计数器寄存器(CK_CNT),触发DAC的控制器组成。时钟源为APB外设时钟,定时事件生成事件主要由CK_PSC和CK_ARR两个寄存器值觉得。例如需要1s延时,时钟源周期为100us,设置CK_ARR为9999,CK_CNT从0开始到9999,总共技术10000次,即1s后更新事件和中断标志。

 

typedef struct
{
   uint32_t Prescaler;           //预分频系数,0~65535,时钟源经过该系数才是定时器时钟
   uint32_t CounterMode;         //计数模式,向上或向下,基本定时器只有向上
   uint32_t Period;              //时钟周期
   uint32_t ClockDivision;       //时钟分频,基本定时器无此功能
   uint32_t RepetitionCounter;   //重复计数,高级控制定时器所用
   uint32_t AutoReloadPreload;   //自动预装载值
}TIM_Base_InitTypeDef;

应用例子如下:

#include "basic_tim.h"
TIM_HandleTypeDef Basic_Tim6;
void Basic_Tim_Config(void){
	
	 HAL_TIM_Base_MspInit(&Basic_Tim6);
	__HAL_RCC_TIM6_CLK_ENABLE();
	
	Basic_Tim6.Instance=TIM6;
	Basic_Tim6.Init.Prescaler=10799;  //TIM6频率=APB2/(Prescaler+1)=10000Hz
	Basic_Tim6.Init.Period=9999; //累计10000个周期后产生中断(1s)
	Basic_Tim6.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE;
	HAL_TIM_Base_Init(&Basic_Tim6);

	HAL_NVIC_SetPriority(TIM6_DAC_IRQn,1,1);
	HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);  //优先级配置
}

2.高级定时器(TIM1/TIM8)

包含1个16位自动重载计数器,由可编程预分频器驱动,多达6个独立通道(6路输出控制,4路输入捕获),在基础定时器的基础上引入了外部引脚,可用于多种用途,例如测量输入信号的脉冲宽度(输入捕获),生成输出波形(输出比较,PWM等)。发生更新(计数器上溢/下溢、计数器初始化),突发事件,输入捕获,输出比较时会生成中断/DMA请求。

3.通用定时器

TIM2和TIM5是32位递增/递减/递增递减自动重载计数器,TIM3和TIM4是16位,4个独立通道。

TIM9~TIM15是16位自动重载递增计数器,2个独立通道。

 

 

 

你可能感兴趣的:(STM32F7之HAL库学习)