0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解CKS32F107xx系列的定时器同步功能

中科芯MCU 来源:中科芯MCU 2024-11-26 17:51 次阅读

MCU微课堂

CKS32F107xx TIM(四)

第四十八期 2024.11.22

定时器同步

CKS32F107xx系列部分定时器在内部是相连的,可用于定时器同步或链接,方便用户配置不同的同步模式,以便在电机控制、数据采集和PWM信号生成等应用中,实现复杂的时间序列和多通道的同步操作。本节课我们将围绕定时器同步功能概述展开,并以其中一种功能为例——将定时器2给定时器3当预分频器,最终级联同步PWM输出。

依据《CKS32F107xx参考手册》的从模式控制寄存器相关章节得知,并非任意两个定时器都能任意级联,硬件方面是固定的,若某个产品中没有相应的定时器,则对应的触发信号ITRx也不存在。如下表1所示。

表1 普通输入捕获概览图

bc64d562-a8a3-11ef-93f3-92fbcf53809c.png

如下图1所示,TIM2更新事件的输出信号TRGO1可以连接到TIM3的内部触发信号线ITR1(可由表1查阅得知),作为TIM3 的时钟输入。

bc780cc2-a8a3-11ef-93f3-92fbcf53809c.png

图1 主从定时器示例

要使TIM2和TIM3级联同步输出PWM波形,我们还会用到控制寄存器2(TIMx_CR2)和从模式控制寄存器(TIMx_SMCR)。接下来我们简单介绍下这两个寄存器。

首先是控制寄存器2(TIMx_CR2),该寄存器的各位描述如下图所示:

bc7c3f36-a8a3-11ef-93f3-92fbcf53809c.png

bc842688-a8a3-11ef-93f3-92fbcf53809c.png

图2 TIMx_CR2

关于该寄存器的详细说明,请参照《CKS32F107xx参考手册》。这里我们用到的是主模式选择位域MMS,此部分由3位组成。共有8种模式可供选择,因为我们使用的是更新模式,所以必须设置为010。

接下来我们介绍从模式控制寄存器(TIMx_SMCR),该寄存器的各位描述如下图所示:

bc88dac0-a8a3-11ef-93f3-92fbcf53809c.png

bc8ead74-a8a3-11ef-93f3-92fbcf53809c.png

图3 TIMx_SMCR

在该寄存器中,我们用到了SMS和TS位域,均由3位组成,各有8种不同模式组合。其中SMS控制从模式选择,这里我们配置成100,选择门控模式,确保从定时器的开始和结束都是由主定时器的输出信号控制。TS控制触发选择,根据表1描述得知,我们必须配置成001。

定时器级联同步输出PWM配置操作

通过上述对定时器功能的描述,下面我们要实现TIM2发生事件更新时发送触发信号驱动TIM3计数,并使能两个定时器在PWM1模式下由定时器通道1输出PWM波形。编程的要点如下所示。

1、配置PA0和PA6引脚为复用输出功能

我们调用如下函数实现:

void TIM_GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

2、TIM2配置为主定时器

TIM2配置为PWM1模式输出,使能主从模式,并选择更新事件作为触发输出,主要代码如下:

void TIM2_Master_Mode_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM2_TimeBaseStructure;

TIM_OCInitTypeDef TIM2_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

/* Time Base Configuration */

TIM2_TimeBaseStructure.TIM_Prescaler = 8;

TIM2_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM2_TimeBaseStructure.TIM_Period = 79;

TIM2_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseStructure);

/* TIM2 Channel 1 Configuration in PWM1 mode */

TIM2_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM2_OCInitStructure.TIM_Pulse = 40 ;

TIM2_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC1Init(TIM2, &TIM2_OCInitStructure);

TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);

/* Master Mode selection */

TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);

}

从上述代码可得知,TIM2CLK固定为72MHz,TIM2预分频为8,因此主定时器TIM2计数器时钟频率为8MHz频率,则TIM2频率=TIM2计数器时钟/(TIM2_Period + 1)=100KHz,占空比为TIM2_CCR1/(TIM2_ARR + 1) = 50%。

3、TIM3配置为从定时器

TIM3配置为门控模式,并选择ITR1作为输入,主要代码如下:

void TIM3_Slave_Mode_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM3_TimeBaseStructure;

TIM_OCInitTypeDef TIM3_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

/* Time Base Configuration */

TIM3_TimeBaseStructure.TIM_Prescaler = 0;

TIM3_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM3_TimeBaseStructure.TIM_Period = 4;

TIM3_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseInit(TIM3, &TIM3_TimeBaseStructure);

/* TIM3 Channel 1 Configuration in PWM1 mode */

TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM3_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM3_OCInitStructure.TIM_Pulse = 2;

TIM3_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC1Init(TIM3, &TIM3_OCInitStructure);

/* Slave Mode selection: TIM3 */

TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);

TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);

}

从上述代码可得知,从定时器TIM3频率为(TIM2 frequency)/ (TIM3 period + 1)=20kHz,占空比为TIM3_CCR1/(TIM3_ARR + 1) = 40%。

4、主函数

初始化主从定时器,最终实现级联同步PWM输出,主要代码如下:

int main(void)

{

TIM_GPIO_Configuration();

TIM3_Slave_Mode_Configuration();

TIM2_Master_Mode_Configuration();

TIM_Cmd(TIM2, ENABLE); /* Enable TIM2 Counter */

TIM_Cmd(TIM3, ENABLE); /* Enable TIM3 Counter */

while(1)

{

}

}

至此,用示波器测量PA0和PA6引脚的波形(注意共地);下载程序,调节示波器,可在示波器看到有PWM波形输出,如下图4所示:

bca40002-a8a3-11ef-93f3-92fbcf53809c.png

图4PWM波形输出

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电机控制
    +关注

    关注

    3534

    文章

    1876

    浏览量

    268750
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120232
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5181

    浏览量

    213809
  • 定时器
    +关注

    关注

    23

    文章

    3246

    浏览量

    114721

原文标题:MCU微课堂|CKS32F107xx TIM(四)

文章出处:【微信号:中科芯MCU,微信公众号:中科芯MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CKS32F4xx系列ETH通信详解

    CKS32F4xx系列芯片自带以太网模块,该模块包括带专用DMA控制的MAC 802.3(介质访问控制)控制
    的头像 发表于 11-10 11:13 992次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>ETH通信<b class='flag-5'>详解</b>

    基于CKS32F4xx系列的MCU互补PWM方案

    互补输出实际跟比较输出章节一样使用的是定时器功能,所以相关的函数设置同样在库函数文件CKS32f4xx_tim.h和CKS32f4xx_tim.c文件中。 1)开启TIM1和GPIO
    发表于 12-02 10:13 635次阅读
    基于<b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>的MCU互补PWM方案

    CKS32F4xx系列MCU SysTick定时器的原理及使用方法

    本课将为大家讲解CKS32F4xx系列产品的SysTick定时器原理及使用方法。SysTick定时器也叫SysTick滴答定时器,属于Cor
    的头像 发表于 12-18 09:21 1334次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>MCU SysTick<b class='flag-5'>定时器</b>的原理及使用方法

    STM32定时器详解

    结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产 PWM 控制电机状态是工业控制普遍方法,这方面知识非常有必要深入了解。STM32F4xx系列
    发表于 08-18 06:17

    stm32f103zet6定时器详解及应用

    大容量的STM32F103XX增强型系列产品包含最多2个高级控制定时器、4个普通定时器和2个基本定时器,以及2个看门狗
    发表于 11-10 13:26 2.4w次阅读

    CKS32F4xx系列产品的定时器使用-基本特征和定时操作

    这一课我们将介绍CKS32F4XX系列产品的定时器使用,CKS32F4XX定时器功能十分强大,
    的头像 发表于 05-19 09:18 893次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>产品的<b class='flag-5'>定时器</b>使用-基本特征和<b class='flag-5'>定时</b>操作

    CKS32F4xx系列产品Timer的基本使用方法-定时器脉冲计数

    上一章我们介绍了CKS32F4的通用定时器定时操作的使用方法,这一章我们将向大家介绍通用定时器作为定时器脉冲计数的使用。在本章中,我们将用T
    的头像 发表于 06-05 09:39 1022次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>产品Timer的基本使用方法-<b class='flag-5'>定时器</b>脉冲计数

    STM32各类系列定时器概览

    本文档:概述了 STM32F1xx、STM32F2xx、STM32F4xx、STM32L1xx 和 STM32F30/31/37/38x微控
    发表于 08-31 10:49 0次下载

    CKS32F4xx系列RNG功能设置

      MCU 微课堂 CKS32F4xx 系 列RNG功能 随机数发生简介     CKS32F4xx系列自带了硬件随机数发生
    的头像 发表于 09-08 10:01 603次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>RNG<b class='flag-5'>功能</b>设置

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的头像 发表于 11-06 16:56 847次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC<b class='flag-5'>功能</b>

    CKS32F4xx系列产品Timer的基本使用方法-定时器脉冲计数

    CKS32F4xx系列产品Timer的基本使用方法-定时器脉冲计数
    的头像 发表于 11-09 17:38 1067次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>产品Timer的基本使用方法-<b class='flag-5'>定时器</b>脉冲计数

    CKS32F4xx系列产品Timer的基本使用方法-定时操作

    CKS32F4xx系列产品Timer的基本使用方法-定时操作
    的头像 发表于 11-09 17:41 616次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>产品Timer的基本使用方法-<b class='flag-5'>定时</b>操作

    CKS32F107xx系列时钟系统具体配置方法讲解

    上一章节对CKS32F107xx系列时钟做了整体介绍,本章节以使用HSI内部高速时钟为例对时钟具体配置方法进行讲解。
    的头像 发表于 05-28 10:05 587次阅读
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>时钟系统具体配置方法讲解

    CKS32F107xx系列MCU中ADC介绍

    CKS32F107xx系列产品提供2个12位的模拟/数字转换(ADC),每个ADC共用多达16个外部通道,各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存
    的头像 发表于 06-22 11:04 687次阅读

    CKS32F107xx系列MCU的GPIO内部硬件结构和工作模式

    16个引脚,如型号为CKS2F107VET6型号的芯片有GPIOA、GPIOB、GPIOC至GPIOE共5组GPIO,芯片一共100个引脚,其中GPIO就占了一大部分,所有的GPIO引脚都有基本的输入输出功能
    的头像 发表于 07-22 09:23 687次阅读
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>MCU的GPIO内部硬件结构和工作模式