【连载】STM8L051F3_06_TIM2应用
本帖最后由 caijie001 于 2018-5-24 17:59 编辑本章介绍STM8L051F3的TIM2相关知识。内容分为以下几部分:
[*]TIM2简介
[*]TIM2的PWM输出
1、TIM2简介本文主要介绍STM8L051F3的TIM2,在STM8L051F3中拥有TIM2与TIM3两个通用定时器,这两个定时器的结构是相同的,所以只需学习TIM2或TIM3其中一个就可以(本章以TIM2为例)。通用定时器由一个向上/向下自动重装载计数器和一个可编程预分频器构成,可用于各种用途,如:
[*]基本计时
[*]测量输入信号的脉冲宽度(输入捕获)
[*]生成输出波形(输出比较、PWM、单脉冲模式)
[*]在各类事件中产生中断(捕获、比较、溢出)
[*]和其他定时器或外部信号进行同步(外部时钟、复位、触发和使能)
TIM2(定时器2)的时钟可以通过配置寄存器来选择内部时钟或者外部时钟,它的主要性能如下:
[*]16位向上/向下自动重装载计数器
[*]3位可编程预分频器
[*]2个独立的通道,可作为:
[*]输入捕获
[*]输出比较
[*]PWM输出(边沿对齐模式)
[*]单脉冲输出
[*]中断输入将定时器输出信号放在重设状态或在已知状态下
[*]输入捕获2可以从COMP2比较器中选择
[*]以下事件可以产生中断/DMA请求:
[*]更新事件:计数器溢出,计数器初始化(软件)
[*]输入捕获
[*]输出比较
[*]中断输入
[*]触发事件(计数器启动、停止、初始化或内部/外部触发)
TIM2/TIM3的板块图如下所示:
http://i1.fuimg.com/639304/cc07df0e9e0b1c79.png
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(); //初始化LEDCLK_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,使用示波器观察结果如下:
http://i1.fuimg.com/639304/14f0faeb3028c068.png
end
转载请说明出处
页:
[1]