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

    文章

    3146

    浏览量

    112032
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    99012
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66736
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50561

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    STM32定时器同步启动示例及应用提醒

    我们有时会利用STM32片内的多个TIMER进行级联,实现同步启动。不过有人会遇到没法同步启动的情况;或者说基于相同的配置,某次可以成功,下次再来又不行了;或者说同样的芯片、同样的代码,别人的可以
    的头像 发表于 11-09 10:49 1861次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>同步启动<b class='flag-5'>示例</b>及应用提醒

    STM32如何使用定时器实现微秒(us)级延时?

    STM32如何使用定时器实现微秒(us)级延时? 在STM32微控制器中,可以使用定时器实现微秒级延时。具体来说,可以使用定时器的计数器和自
    的头像 发表于 11-06 11:05 2970次阅读

    AT32F4xx定时器同步之级联模式

    AT32F4xx定时器同步之级联模式展示3个TMR之间的级联同步模式。
    发表于 10-27 06:17

    STM32速成笔记(6)—定时器

    关于什么是定时器,简单来讲,就是是用来定时的。STM32F103ZET6有两个基本定时器TIM6和TIM7,四个通用定时器TIM2~TIM5
    的头像 发表于 10-24 09:41 1668次阅读
    <b class='flag-5'>STM32</b>速成笔记(6)—<b class='flag-5'>定时器</b>

    Linux驱动定时器使用示例

    定时器使用示例 使用步骤: 1、调用 init_timer 初始化一个定时器,给 struct timer_list 各成员赋值。 2、调用 add_timer 将定时器添加到内核
    的头像 发表于 10-04 15:47 326次阅读

    STM32各类系列定时器概览

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

    STM32 TIM—基本定时器

    STM32F4xx系列控制器有共有14个TIM定时器。其中2个高级控制定时器TIM1和TIM8、10 个通用定时器TIM2TIM5和TIM9TIM14、 2个基本
    的头像 发表于 07-22 17:05 3321次阅读
    <b class='flag-5'>STM32</b> TIM—基本<b class='flag-5'>定时器</b>

    STM32定时器(一)PWM输出

    STM32定时器分类众多,按照内核、外核标准分为两部分:核内定时器+核外定时器
    的头像 发表于 07-21 14:51 2672次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>(一)PWM输出

    STM32CubeMx入门教程(3):定时器的使用

    导语“ 使用STM32CubeMx 生成初始化定时器代码,实现定时器特定定时
    发表于 07-11 15:22 2310次阅读
    <b class='flag-5'>STM32</b>CubeMx入门教程(3):<b class='flag-5'>定时器</b>的使用

    一个定时器输出4路不同频率波形的应用示例

    一般来讲,一个STM32定时器输出基于同一频率的各路信号比较方便。但经常也会有人问使用STM32一个定时器是否可以实现多路不同频率的输出。
    的头像 发表于 07-06 15:57 1207次阅读
    一个<b class='flag-5'>定时器</b>输出4路不同频率波形的应用<b class='flag-5'>示例</b>

    STM32F407 基本定时器使用

    介绍STM32F407基本定时器的配置方法,分别介绍轮询方式、中断方式使用定时器完成定时
    的头像 发表于 07-06 14:32 2113次阅读
    <b class='flag-5'>STM32</b>F407 基本<b class='flag-5'>定时器</b>使用

    Proteus教程:STM32仿真串口+定时器

    Proteus教程:STM32仿真串口+定时器
    的头像 发表于 06-14 11:40 2955次阅读
    Proteus教程:<b class='flag-5'>STM32</b>仿真串口+<b class='flag-5'>定时器</b>