打印

【连载】STM8L051F3_06_TIM2应用

[复制链接]
1403|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caijie001|  楼主 | 2018-5-15 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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的板块图如下所示:


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

转载请说明出处


评论
863081577 2019-9-20 17:07 回复TA
感谢分享 

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:21ic公开课专区:http://open.21ic.com/ 21ic资料下载中心:http://dl.21ic.com/ 21ic项目外包中心:http://project.21ic.com/ 杰杰欢迎大家有空常来赛事专区逛逛

131

主题

3790

帖子

63

粉丝