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

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

3天内不再提示

灵动微MM32F5270定时器单脉冲输出

灵动MM32MCU 来源: 灵动MM32MCU 作者: 灵动MM32MCU 2022-12-01 18:51 次阅读

1

单脉冲输出

定时器单脉冲输出是比较输出应用中的一种模式,所谓的单脉冲就是通过配置定时器使其在一个可控延时后,产生一个脉宽可控的脉冲。

单脉冲模式(One Pulse Mode)下,计数器响应一个激励,产生一个脉宽可调的脉冲。配置 TIMx_CR1 寄存器的OPM=1,选择单脉冲模式,触发信号有效沿或配置 CEN=1 都可以启动计数器,直到下个更新事件发生或配置 CEN=0 时,计数器停止计数。

产生脉冲的必要条件是比较值与计数器的初始值不同,所以在计数器启动之前的必要配置如下:

递增计数方式:计数器 CNT < CCRx ≤ ARR。

递减计数方式:计数器 CNT > CCRx。

112b88d2-7162-11ed-8abf-dac502259ad0.png

图 1 单脉冲模式

例如,在 TI2 检测到上升沿,延迟 tDELAY 之后,在 OC2 上产生一个长度为 tPULSE 的正脉冲。配置 TI2FP2 作为触发源:

1

配置 TIMx_CCMR1 寄存器中的 CC2S = 01,将 TI2FP2 映射到 TI2。

1

配置 TIMx_CCER 寄存器中的 CC2P = 0,检测 TI2FP2 的上升沿。

3

配置 TIMx_SMCR 寄存器中的 TS = 110, TI2FP2 作为从模式控制器的触发(TRGI)。

4

配置 TIMx_SMCR 寄存器中的 SMS = 110,选择触发模式, TI2FP2 使能计数器工作。

OPM 的波形由 TIMx_ARR 和 TIMx_CCR1 决定(要考虑时钟频率和计数器预分频器):由 TIMx_CCR1寄存器的值和 CNT 初始值决定触发信号与单脉冲开始之间的延迟 tDELAY, TIMx_ARR - TIMx_CCR1 的值为脉冲的宽度 tPULSE。

下面是一个产生负脉冲的例子,即发生比较匹配时产生从 1 到 0 的波形,计数器达到预装载值时产生一个从 0 到 1 的波形:

1

配置 TIMx_CCMR1 寄存器 OC1M = 111,选择 PWM 模式 2。

2

配置 TIMx_CCER 寄存器 CC1P = 1,输出低电平有效。

1

配置 TIMx_CCMR1 中 OC1PE = 1 和 TIMx_CR1 寄存器中 ARPE=1,使能预装载寄存器。

4

配置 TIMx_CCR1 寄存器和 TIMx_ARR 寄存器。

1

配置 TIMx_EGR 寄存器 UG=1 产生一个更新事件。

6

等待在 TI2 上的一个外部触发事件。

此例中, TIMx_CR1 寄存器中的 DIR=0、 CMS=0、 OPM= 1,在下一个更新事件(当计数器从自动装载值返回到 0)时停止计数。

2

实验

2.1 实验说明

配置TIM1_CH1单脉冲输出,TIM1_CH2输入捕获,TIM1从模式选择触发模式,TIM3_CH1输出PWM,触发TIM1计数器开始计数。当TIM1_CH2捕捉到有效信号时,TIM1计数器开始计数,按照配置好的脉宽,TIM1_CH1输出一个脉冲信号。

2.2 程序编写

程序部分参考MM32提供的例程,相关代码在此基础上更改。

2.21 GPIO初始化

配置PA8作为TIM1_CH1、PA9作为TIM1_CH2

voidTIM1_GPIO_Init(void)
{
GPIO_InitTypeDefGPIO_InitStruct;
RCC_GPIO_ClockCmd(GPIOA,ENABLE);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
}

同样的,配置PB4作为TIM3_CH1,代码略。

2.22 TIM1初始化

程序中调用TIM1_Monopulse_Init()函数配置TIM1的自动预装载值为(10000-1),预分频器的值为(SystemCoreClock / 1000000 - 1),即TIM1定时器发生更新事件的周期为10ms。

TIM1_Monopulse_Init(10000-1,SystemCoreClock/1000000-1);

在该函数中配置了TIM1_CH1输出PWM,输出信号极性为高电平有效,脉冲宽度为50%,使能TIM1单脉冲输出模式。配置TIM1_CH2输入捕获,从模式触发源选择TI2FP2作为计数器的触发输入,在信号的上升沿启动。详见函数定义如下:

voidTIM1_Monopulse_Init(u16arr,u16psc)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStruct;
TIM_OCInitTypeDefTIM_OCInitStruct;
TIM_ICInitTypeDefTIM_ICInitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2ENR_TIM1,ENABLE);
TIM_DeInit(TIM1);
TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);
TIM_TimeBaseStruct.TIM_Period=arr;
TIM_TimeBaseStruct.TIM_Prescaler=psc;
TIM_TimeBaseStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStruct.TIM_RepetitionCounter=0;
TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStruct);

TIM_OCStructInit(&TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse=arr/2;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OCIdleState=TIM_OCIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStruct);
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_ICStructInit(&TIM_ICInitStruct);

TIM_ICInitStruct.TIM_Channel=TIM_Channel_2;
TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
TIM_ICInitStruct.TIM_ICFilter=0x0;
TIM_ICInit(TIM1,&TIM_ICInitStruct);
TIM_ARRPreloadConfig(TIM1,ENABLE);
TIM_SelectOnePulseMode(TIM1,TIM_OPMode_Single);
TIM_SelectInputTrigger(TIM1,TIM_TS_TI2FP2);
TIM_SelectSlaveMode(TIM1,TIM_SlaveMode_Trigger);
TIM_SetCounter(TIM1,0);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
TIM_Cmd(TIM1,ENABLE);
}

2.23 TIM3初始化

程序中调用TIM3_PWM_Init()函数配置TIM3的自动预装载值为(10000-1),预分频器的值为(SystemCoreClock / 1000000 - 1),即TIM3定时器发生更新事件的周期为20ms。

TIM3_PWM_Init(10000-1,SystemCoreClock/1000000-1);

在该函数中配置了TIM3_CH1输出PWM,输出信号极性为高电平有效,脉冲宽度为25%。详见函数定义如下:

voidTIM3_PWM_Init(u16arr,u16psc)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStruct;
TIM_OCInitTypeDefTIM_OCInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM3,ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);
TIM_TimeBaseStruct.TIM_Period=arr;
TIM_TimeBaseStruct.TIM_Prescaler=psc;
TIM_TimeBaseStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStruct.TIM_RepetitionCounter=0;
TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
TIM_OCStructInit(&TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse=(arr/4)*3;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OC1Init(TIM3,&TIM_OCInitStruct);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);
TIM_SetCounter(TIM3,0);
TIM_Cmd(TIM3,ENABLE);
}

按照上述配置,PB4(TIM3_CH1)作为PA9(TIM1_CH2)的输入端,当PA9捕捉到PB4输出的PWM的上升沿时,TIM1计数器启动计数,控制延时为5ms,PA8输出一个脉宽为5ms的脉冲。

2.3 下载验证

连接PA9(TIM1_CH2)和PB4(TIM3_CH1),使用逻辑分析仪连接PA8和PA9,运行程序观测波形如下:

144608da-7162-11ed-8abf-dac502259ad0.png

其中,通道8连接PA8,通道9连接PA9:

146688b2-7162-11ed-8abf-dac502259ad0.png

测量两段间距均为5ms,运行结果和上述配置一致。

1484b300-7162-11ed-8abf-dac502259ad0.png

关于灵动

上海灵动微电子股份有限公司成立于 2011 年,是中国本土领先的通用 32 位 MCU 产品及解决方案供应商。公司基于 Arm Cortex-M 系列内核开发的 MM32 MCU 产品拥有 F/L/A/SPIN/W 五大系列,目前已量产 200多款型号,累计交付超3亿颗,每年都有近亿台配备了灵动 MM32MCU 的优秀产品交付到客户手中,在本土通用 32 位 MCU 公司中位居前列。

灵动客户涵盖智能工业汽车电子通信基建、医疗健康、智慧家电、物联网、个人设备、手机电脑等应用领域。灵动是中国为数不多的同时获得了 Arm-KEIL、IAR、SEGGER 官方支持的本土 MCU 公司,并建立了独立、完整的通用 MCU 生态体系。灵动始终秉承着“诚信、承诺、创新、合作”的精神,为客户提供从硬件芯片到软件算法、从参考方案到系统设计的全方位支持。

15025026-7162-11ed-8abf-dac502259ad0.jpg

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

    关注

    146

    文章

    16022

    浏览量

    343676
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112048
  • 单脉冲
    +关注

    关注

    0

    文章

    27

    浏览量

    12643
  • 灵动微电子
    +关注

    关注

    7

    文章

    108

    浏览量

    19555
  • 灵动微
    +关注

    关注

    3

    文章

    173

    浏览量

    22557
  • MM32
    +关注

    关注

    1

    文章

    105

    浏览量

    574

原文标题:灵动微课堂 (第238讲)|MM32F5270定时器单脉冲输出

文章出处:【微信号:MindMotion-MMCU,微信公众号:灵动MM32MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32定时器单脉冲模式的相关资料分享

    STM32的定时器可以配置为单脉冲模式,所谓的单脉冲就是通过配置定时器使其在一个可控延时后,产生一个脉宽可控的脉冲。使用STM32CubeM
    发表于 12-08 06:05

    基于MM32F5270开发板获取雨滴传感的数据相关资料介绍

    1、基于MindSDK对接雨滴传感我们还是来介绍一下开发板的相关参数。灵动MM32F5270开发板是搭载安谋科技“星辰”STAR-MC1处理的全新高性能
    发表于 08-24 15:20

    一文解析MM32F5270开发板+PWM测试与调制

    1、MM32F5270开发板+ PWM测试与调制  PWM接口引脚  MM32F5270开发板有引出PWM引脚给我们,我们可以直接使用就行。  主要代码部分如下  2.1 hal_tim.c
    发表于 09-06 11:24

    MM32F5270是如何通过MindSwitch和CLU实现可任意编程外设间互联系统的

    MindSwitch 和比较的窗口功能可实现全硬件过零检测。首先,MM32F5270 在模拟比较中新增了窗口使能控制,仅在窗口信号有效时,比较
    发表于 09-06 15:13

    一文简析MM32F5270定时器单脉冲输出模式

    1 单脉冲输出定时器单脉冲输出是比较输出应用中的一种模式,所谓的
    发表于 12-30 16:09

    介绍几种MM32F5270定时器常用的精准输出脉冲数量的方法

    (测量输入信号的脉冲宽度、频率,PWM 输入等),输出功能(PWM 输出、死区时间可编程的互补输出单脉冲模式
    发表于 12-30 16:28

    关于定时器单脉冲输出模式应用

    单脉冲输出模式是定时器比较输出应用中的一种特殊情况或者特殊应用,是一种特殊的PWM输出模式。既然这么说,要想了解
    的头像 发表于 02-14 15:54 1.5w次阅读
    关于<b class='flag-5'>定时器</b>的<b class='flag-5'>单脉冲</b><b class='flag-5'>输出</b>模式应用

    STM32定时器单脉冲输出模式

    STM32定时器单脉冲输出模式
    发表于 12-08 20:51 47次下载
    STM32<b class='flag-5'>定时器</b><b class='flag-5'>单脉冲</b><b class='flag-5'>输出</b>模式

    基于MM32F5270控制器的I2S音频播放

    MM32F5270 系列控制器支持 I2S 总线接口,本章节在接下来会对 MM32F5270 I2S进行介绍,并使用 MM32F5270 和 CS4344 芯片进行 I2S 通信来演示播放一段声音。
    的头像 发表于 09-16 10:39 1560次阅读

    MM32F5270 TIM精准脉冲数量输出

    (测量输入信号的脉冲宽度、频率,PWM 输入等),输出功能(PWM 输出、死区时间可编程的互补输出单脉冲模式
    的头像 发表于 12-09 10:09 843次阅读

    MM32F5270 产品手册(中文版)

    MM32F5270 产品手册(中文版)
    发表于 02-23 18:45 0次下载
    <b class='flag-5'>MM32F5270</b> 产品手册(中文版)

    MM32F5270 产品手册(英文版)

    MM32F5270 产品手册(英文版)
    发表于 02-23 18:45 0次下载
    <b class='flag-5'>MM32F5270</b> 产品手册(英文版)

    MM32F5270 勘误表(中文版)

    MM32F5270 勘误表(中文版)
    发表于 02-23 18:47 0次下载
    <b class='flag-5'>MM32F5270</b> 勘误表(中文版)

    MM32F5270 勘误表(英文版)

    MM32F5270 勘误表(英文版)
    发表于 02-23 18:48 0次下载
    <b class='flag-5'>MM32F5270</b> 勘误表(英文版)

    基于MM32F5270的I2S音频播放

    基于MM32F5270的I2S音频播放
    的头像 发表于 10-30 17:13 552次阅读
    基于<b class='flag-5'>MM32F5270</b>的I2S音频播放