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

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

3天内不再提示

STM32定时器主从级联的应用示例分享

茶话MCU 来源:茶话MCU 作者:Miler 2021-11-26 11:45 次阅读

在STMCU中文社区有人咨询了类似下面的应用问题,有部分需求如下:

1.发送12个周期为500ns的脉冲(高电平200ns,低电平300ns),每隔4us发送一次,共计三次(36个脉冲,每12个脉冲之间间隔4us)。

2.在第一步中的每段12个脉冲的上升沿时,访问GPIO口,共计12个,三次共计36个。相关时序图如下:

384a2dec-4ddc-11ec-9eda-dac502259ad0.png

这里,我们就该问题的部分需求聊聊它的大致实现。先整理下需求:

连续三组12个周期为500ns的指定个数的小脉冲;

一个固定时间间隔10us(含12个脉冲本身的时间);

每个小脉冲对应1次GPIO的访问;

显然,我们一般会很自然地想到通过TIMER来完成,可以使用1个TIMER,也可以通过2个TIMER来完成。

如果使用1个TIMER,我们可以考虑使用更新事件对脉冲个数的统计及时间间隔的控制,同时基于比较事件或更新事件来触发DMA来实行对GPIO的访问。不过,这里每个脉冲周期为500ns,势必会发生频繁进入更新中断。

如果使用2个TIMER来实现起来就更为方便点。2个TIMER实现主从级联,各自任务如下安排:

主TIMER做时间间隔的控制,每10us产生一次触发事件,并开启更新事件中断,每发生3次更新事件即为一个大周期,后续启动根据其它条件定,此处不表。

从ITMER工作在触发从模式,同时选择它的某一通道做PWM输出,并工作在单脉冲模式,同时每个脉冲的比较事件触发一次DMA实现GPIO与内存间的传输。

基于上面的需求及规划,下面简单介绍下实现过程。我们选用STM32G4系列的Nucleo板【Nucleo-G431RB】来进行验证测试。

选择TIM1工作在从模式,输出脉冲的比较事件触发DMA完成对GPIO的访问。DMA每传输12个数据后进入DMA传输完成中断,并进行相关数据处理。令TIM3工作在主模式,它的计时周期为10us,每个周期产生一次更新事件作为触发输出并与TIM1的触发输入相连,作为TIM1的启动触发信号

通过查看STM32G4系列参考手册,我们可以得到如下片内定时器互联信号表。TIM3的TRGO信号可以作为TIM1的触发输入通道2的输入信号。

389a4174-4ddc-11ec-9eda-dac502259ad0.png

下面我们使用CubeMx进行配置。先看TIM1的相关配置【定时器计数时钟为10MHz】:

3903d45e-4ddc-11ec-9eda-dac502259ad0.png

39914e4c-4ddc-11ec-9eda-dac502259ad0.png

39f5c20a-4ddc-11ec-9eda-dac502259ad0.png

再看看看TIM3的基本配置:

3a5e6396-4ddc-11ec-9eda-dac502259ad0.png

完成相关初始化配置后创建工程,然后添加必要的用户代码。代码很简单,开启TIM1通道的pwm输出,使能TIM1-ch1比较事件的DMA触发功能,调用相关DMA功能函数,启动TIM3的计数器。

3ace4bd4-4ddc-11ec-9eda-dac502259ad0.png

其中,TIM_DMAcptPro()为DMA传输完成中断的回调函数,负责做相关数据的处理。TIM1的启动靠TIM3的更新事件来触发实现。

稍作编译调试即可看到如下结果:

黄色的信号为TIM1周期的脉冲输出,小脉冲间的间隔为4us.

蓝色信号为通过DMA写到GPIO的数据,高、低电平均代表一个数据。这些只是模拟下操作过程。

显然,当弄清实现原理后,基于CubeMx进行配置,整个过程实现起来还是比较简单的。这里需要我们对定时器的主从级联、定时器各类事件、比较输出的单脉冲模式的特性及对DMA运用有些了解。上面主要演示基于定时器主从模式的实现过程,更多细节还得阅读相关技术手册。

最后提醒个地方,现在是TIM3的更新事件去触发启动TIM1,显然第一次启动TIM1时需等待TIM3一个计数周期,如果不希望这样的话,我们也可以在TIM3启动的同时启动TIM1计数,只需在启动TIM3的同时手动产生个更新事件来实现。

编辑:jq

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

    关注

    23

    文章

    3236

    浏览量

    114396
  • dma
    dma
    +关注

    关注

    3

    文章

    558

    浏览量

    100384
  • 代码
    +关注

    关注

    30

    文章

    4733

    浏览量

    68291
  • GPIO
    +关注

    关注

    16

    文章

    1191

    浏览量

    51869

原文标题:STM32定时器主从级联的又一应用示例

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

收藏 人收藏

    评论

    相关推荐

    stm32f103vct6的高级定时器按通用定时器设置的,为什么没有输出?

    用的是Tim8,本来想用tim2作为主定时器控制tim8输出的,结果就算我把主从去掉了也输出不了,只看到高电平 用的是老代码,标准库,不知道之前也不习惯用高级定时器,不知道是不是有什么东西没配置 代码如下 还请各位大佬指点迷津
    发表于 07-23 07:58

    定时器的工作方式介绍

    定时器是计算机和嵌入式系统中常见的一种硬件模块,用于实现定时和计数功能。定时器的工作方式通常由一组寄存来控制,这些寄存定义了
    的头像 发表于 07-12 10:29 682次阅读

    STM32G4系列芯片定时器的延时输出问题

    有人使用STM32G4系列芯片内部的多个定时器做PWM输出,输出频率一样,占空比也一样,均为50%。可是,当他中途调整各个定时器以相同的工作参数,即改变ARR的值和CCR值后,会发现TIM2和TIM5两个
    的头像 发表于 07-01 09:45 1373次阅读
    <b class='flag-5'>STM32</b>G4系列芯片<b class='flag-5'>定时器</b>的延时输出问题

    求助,关于STM32定时器级联做计数的问题求解

    最近在做一个设计,使用STM32L1的定时器做一个大的计数,每当外部PPS信号进来后,利用捕获功能来计算捕获值。这个计数是采用定时器
    发表于 05-10 06:15

    如何实现一个软件定时器

    在Linux,uC/OS,FreeRTOS等操作系统中,都带有软件定时器,原理大同小异。典型的实现方法是:通过一个硬件定时器产生固定的时钟节拍,每次硬件定时器中断到,就对一个全局的时间标记加一,每个软件
    的头像 发表于 04-29 11:00 575次阅读

    STM32F407的定时器9和10怎么设置为主从关系?

    我准备用主从定时器来实现PWM脉冲个数的控制, 将主定时器的PWM输出脉冲作为从定时器的时钟,同时将从定时器的period设置为所需脉冲数,
    发表于 03-28 06:02

    ​PLC定时器介绍

    定时器是PLC中重要的编程元件,是累计时间增量的内部器件。大部分自动控制领域都需要定时器进行延时控制,灵活地使用定时器可以编制出复杂的控制程序。
    发表于 03-22 12:36 2144次阅读
    ​PLC<b class='flag-5'>定时器</b>介绍

    如果STM32定时器外接了正交编码,该剩余通道是否能做PWM输出呢?

    其实,对于STM32芯片,编码输入信号就是定时器的计数时钟源之一。定时器外接了编码输入,若还有剩余通道的话,剩余通道依然可以实现输入捕获或输出比较功能。
    的头像 发表于 03-21 09:06 1377次阅读
    如果<b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>外接了正交编码<b class='flag-5'>器</b>,该剩余通道是否能做PWM输出呢?

    stm32主从定时器门控模式,怎么控制在不产生PWM时从定时器cnt不要计数?

    stm32主从定时器,采用门控模式,主定时器用单脉冲模式控制输出。但是我在实验的时候发现其从定时器cnt在主
    发表于 03-12 07:08

    使用555定时器的可调双定时器电路

    定时器 IC 555 是最通用和最常用的 IC 之一,因为它的应用范围更广,如 PWM放大器、延迟定时器、开关电路、占空比选择、时钟脉冲发生等。这也可用于各种应用,如精确
    的头像 发表于 02-25 15:16 1974次阅读
    使用555<b class='flag-5'>定时器</b>的可调双<b class='flag-5'>定时器</b>电路

    单片机定时器的用法

    本章以CW32通用定时器为例介绍单片机定时器的用法。
    的头像 发表于 01-04 10:37 1335次阅读
    单片机<b class='flag-5'>定时器</b>的用法

    定时器会阻塞线程吗 定时器指令有哪几种

    定时器会阻塞线程吗 定时器指令有哪几种  定时器一般不会阻塞线程,但具体是否会阻塞取决于所使用的定时器实现方式和使用方式。 定时器指令可以分
    的头像 发表于 12-19 14:03 876次阅读

    STM32定时器时间计算方法

    STM32微控制定时器模块在嵌入式系统中非常常见,它被用于产生精确的时间延迟,或者用于实时时钟(RTC)等功能。为了充分利用STM32定时器
    的头像 发表于 12-19 11:31 1.1w次阅读

    stm32一个定时器能同时控制两个灯以不同频率闪烁吗?

    STM32定时器功能强大,**STM32定时器可以同时控制两个灯以不同频率闪烁** 。
    的头像 发表于 12-13 10:43 1932次阅读

    简述STM32定时器的计数模式

    STM32的向上计数模式是指定时器的计数从0开始计数,直到达到自动加载值(TIMx_ARR),然后重新从0开始计数,并产生一个计数溢出事件。
    的头像 发表于 12-13 10:09 4709次阅读