本帖最后由 caijie001 于 2018-5-24 17:59 编辑
本章介绍STM8L051F3的TIM2相关知识。内容分为以下几部分:
1、TIM2简介本文主要介绍STM8L051F3的TIM2,在STM8L051F3中拥有TIM2与TIM3两个通用定时器,这两个定时器的结构是相同的,所以只需学习TIM2或TIM3其中一个就可以(本章以TIM2为例)。通用定时器由一个向上/向下自动重装载计数器和一个可编程预分频器构成,可用于各种用途,如:
- 基本计时
- 测量输入信号的脉冲宽度(输入捕获)
- 生成输出波形(输出比较、PWM、单脉冲模式)
- 在各类事件中产生中断(捕获、比较、溢出)
- 和其他定时器或外部信号进行同步(外部时钟、复位、触发和使能)
TIM2(定时器2)的时钟可以通过配置寄存器来选择内部时钟或者外部时钟,它的主要性能如下:
- 16位向上/向下自动重装载计数器
- 3位可编程预分频器
- 2个独立的通道,可作为:
- 输入捕获
- 输出比较
- PWM输出(边沿对齐模式)
- 单脉冲输出
- 中断输入将定时器输出信号放在重设状态或在已知状态下
- 输入捕获2可以从COMP2比较器中选择
- 以下事件可以产生中断/DMA请求:
- 更新事件:计数器溢出,计数器初始化(软件)
- 输入捕获
- 输出比较
- 中断输入
- 触发事件(计数器启动、停止、初始化或内部/外部触发)
TIM2/TIM3的板块图如下所示:
2、TIM2的PWM输出2.1 TIM2的PWM配置本小节介绍:配置LSE为TIM2的输入时钟,LSE/4为TIM2的时钟频率,让TIM2_CH1输出频率为1024Hz,占空比50%的PWM。使用的例程:STM8L051F3_06_TIM2。实现步骤如下:
- 配置时钟
- 使能TIM2外设时钟
- 配置TIM2_CH1(PB0)的GPIO模式
- 将TIM2的ETR映射到LSE(TIM2的外部触发器变为LSE控制)
- 打开LSE时钟,等待LSE时钟稳定
- 配置TIM2
- TIM2的基本配置:分频1、向上计数、周期8
- TIM2时钟由LSE/4输入,极性不翻转
- TIM2_CH1配置为PWM1模式,占空比50%
- TIM2的PWM输出使能
- TIM2使能
2.2 例程介绍所有的代码主要在main.c文件下,主函数如下:
void main(void)
{
LED_Init(); //初始化LED CLK_Config(); //时钟配置 TIM2_Config();//TIM2配置 while(1) { delay_ms(300); GPIO_ToggleBits(LED1_GPIO_PORT, LED1_GPIO_PINS); //切换LED1状态 } }
周期与脉宽值定义如下:
#define TIM2_PERIOD 7 //定义TIM2的周期值
#define TIM2_PULSE 4 //定义TIM2的脉冲宽度值
CLK_Config()函数如下:
static void CLK_Config(void)
{
/* 使能TIM2时钟 */ CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE); /* TIM2通道1(PB0)配置 */ GPIO_Init(GPIOB, GPIO_Pin_0, GPIO_Mode_Out_PP_Low_Fast); /* 将TIM2的ETR映射到LSE: TIM2的外部触发器变为有LSE控制 */ SYSCFG_REMAPPinConfig(REMAP_Pin_TIM2TRIGLSE, ENABLE); /* 打开LSE时钟 */ CLK_LSEConfig(CLK_LSE_ON); /* 等待LSE时钟稳定 */ while(CLK_GetFlagStatus(CLK_FLAG_LSERDY)== RESET); }
TIM2_Config()函数如下:
static void TIM2_Config(void)
{
/* TIM2 配置: - TIM2的ETR 映射到LSE - TIM2的计数器时钟由LSE/4得到;TIM2CLK = LSE/4 = 32768/4 = 8192Hz - TIM2通道1输出频率 = TIM2CLK/(TIM2的预分频值 * (TIM2的周期 + 1))= 8192/(1*8)=1024Hz */ /* TIM2的基本配置 */ TIM2_TimeBaseInit(TIM2_Prescaler_1, TIM2_CounterMode_Up, TIM2_PERIOD); TIM2_ETRClockMode2Config(TIM2_ExtTRGPSC_DIV4, TIM2_ExtTRGPolarity_NonInverted, 0); /* 配置TIM2的通道1为PWM1模式 */ /* TIM2通道1的PWM输出占空比 = 脉冲宽度/(周期 + 1) = TIM2_PULSE /(TIM2_PERIOD + 1) = 4/8 = 50% */ TIM2_OC1Init(TIM2_OCMode_PWM1, TIM2_OutputState_Enable, TIM2_PULSE, TIM2_OCPolarity_Low, TIM2_OCIdleState_Set); /* TIM2的PWM输出使能 */ TIM2_CtrlPWMOutputs(ENABLE); /* TIM2计数器使能 */ TIM2_Cmd(ENABLE); }
使用ST-LINK把程序下载到开发板中,LED1闪烁,PB0口会输出频率为1024Hz,占空比为50%的PWM,使用示波器观察结果如下:
end
转载请说明出处
|
感谢分享