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

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

3天内不再提示

STM32定时器单脉冲模式的一个应用示例

茶话MCU 来源:ST MCU 信息交流 2020-05-14 09:29 次阅读

有人选用STM32系列的一款低功耗芯片STM32L431进行产品开发,在其应用中需要通过STM32芯片驱动一个小尺寸显示屏,由于所选芯片不带FSMC外设,所以就想使用GPIO来进行图片数据的更新。显示屏控制器数据宽度选用16位,通过GPIOA与之连接,另外,同时还用到一根口线模拟下面的读写控制线,该控制线平常为高电平。

在读写控制线的下降沿进行数据的准备,即MCU将图形数据送到数据总线上,在读写控制线的上升沿显示屏的控制器将数据取走。

这里我们想到了借助定时器输出一路PWM信号模拟那根读写时序控制线,利用定时器的输出比较事件触发DMA,将数据送到GPIOA端口,然后在上升沿由屏控制器读走数据。在DMA的传输完成中断里关闭定时器的PWM输出从而停止数据传输。

按照上面的思路来编程进行调试后发现个问题,那就是在DMA传输完成中断里去关闭定时器的PWM输出时,这个停止动作不能做到很及时,尤其在数据传输速率较高时,即这个PWM输出停止操作有个延时,往往会导致多输出几个不必要的PWM脉冲。

比方本来计划发送500个数据,读写控制线相应地也应该只输出500个PWM脉冲信号,然后维持在高电平,但程序代码是在完成了500个DMA数据传输后才去关闭定时器的PWM输出,由于中断响应的时间加上关闭定时器输出的代码执行时间可能会导致多输出1个或2个不等的PWM脉冲后才停下来【说“可能”是因为它跟传输速率和处理代码有关】,这些多输出的脉冲虽不会触发DMA传输了,但其上升沿还是会触发显示控制器的数据读取操作,而这多读取的数据并非正常操作,进而会影响产品功能。【下图所示红色脉冲即多出的PWM信号】

那有没有办法让定时器的PWM输出个数跟DMA传输的数据个数刚好一致呢?即若要传输500个数据也就刚好输出500个PWM脉冲。这里有个比较简单的办法,就是使用STM32高级定时器的重复计数器和定时器输的单脉冲输出模式来实现上述要求。

所谓单脉冲输出模式,其基本原理就是定时器的计数器开始工作后,当碰到定时器更新事件时则停止计数工作,从而实现有限个数脉冲的输出。对于不带重复计数器寄存器的通用定时器,若工作在PWM输出模式,计数器启动后输出一个PWM脉冲则停止;若是带重复计数器寄存器的高级定时器,工作在pwm输出模式时,计数器启动后则输出指定个数的PWM脉冲后停止计数,具体的PWM脉冲输出个数由RCR寄存器的值与所选择的计数模式【向上计数模式、向下计数模式、双向计数模式】决定。关于定时器单脉冲模式细节请查看STM32各个系列的参考手册,下面阅读推荐的《STM32定时器单脉冲输出模式话题》也可以参考。

结合到这里的应用,我们可以将方案稍做调整。使用高级定时器【这里使用TIM1】的一个输出通道来实现读写控制时序脉冲,计数器采用向上计数模式,定时器采用PWM1单脉冲输出模式,输出的脉冲个数跟DMA待传输的数据个数保持一致,仍然通过定时器比较事件触发数据的DMA传输。这样的话,定时器输出指定个数的PWM后即自行停止输出,不再需要软件代码的干预,而且最后将输出锁定在高电平,刚好满足设计要求。【注:使用定时器单脉冲输出模式,当定时器停止计数后,输出端最后锁定的电平跟所选用的PWM模式和RCR寄存器的值以及计数方式三者有关。】

比方要写入10个【数据弄小点便于示波器观察】图形数据到显示控制器。则配置RCR=10-1;采用PWM1单脉冲输出模式,向上计数方式。通过示波器我们可以看到如下输出:

这里比较巧妙地使用了高级定时器地单脉冲输出模式,做到了MCU写多少数据,屏控制器就读取多少个数据,不多不少。

顺便提醒一下,当完成定时器的初始化后,在使能定时器更新中断或基于更新事件的DMA之前,记得对更新中断事件标志位先做个清零操作,否则有时可能会给我们带来些困扰,比方一使能定时器中断就跳入中断服务程序或者刚使能基于更新事件的DMA传输就发生DMA传输。ST固件库中的参考代码如下:

__HAL_TIM_CLEAR_IT(&htimx,TIM_IT_UPDATE);

该话题之前也多次提醒过,这里再提醒下。还是经常有人在应用中卡到这个地方。其原因是定时器初始化过程中使用了软件更新操作触发更新事件让用户配置的数据即时生效,同时它也使得定时器更新事件标志被置位了。

OK,上面主要是分享了一个基于高级定时器单脉冲输出模式的一个应用示例及思路。如果是通用定时器,它没有RCR寄存器,是否还可以实现上述功能呢?应该也是可以的,有兴趣可以自行思考下。祝愿大家在STM32的产品开发过程中能对各个外设的功能及特性灵活运用,不断开发出自己满意的产品。

最后,让我们祈祷眼前的新型肺炎疫情早点过去!愿一切尽早回归正常!

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

    关注

    114

    文章

    4897

    浏览量

    209899
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348725
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112034

原文标题:STM32定时器单脉冲模式的一个应用示例

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

收藏 人收藏

    评论

    相关推荐

    TIM_PWM+DMA输出三不同占空比的单脉冲,为什么第三数据总是第一个输出?

    使用TIM_PWM + DMA,DMA传输长度为3,即顺序输出3不同占空比的单脉冲(10%,20%,50%),三脉冲输出完成后进入DMA传输完成中断,关闭
    发表于 04-03 07:23

    关于RM0016单脉冲模式设置的问题求解

    在RM0016文档177页,以下是不是多余: Map IC2 on TI2 by writing CC2S = 01 in the TIM1_CCMR2 register。这是输入捕获功能(对于单脉冲模式不需要捕获输入信号TI2),如果不是多余这个设置有什么用?
    发表于 03-14 07:59

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

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

    什么是单脉冲点焊和双脉冲点焊?

    什么是单脉冲点焊和双脉冲点焊? 单脉冲点焊和双脉冲点焊是常用于金属焊接的两种焊接方法。单脉冲点焊和双脉冲
    的头像 发表于 02-18 09:29 648次阅读

    简述STM32定时器的计数器模式

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

    STM32L0无高级定时器输出固定脉冲方式之一

    电子发烧友网站提供《STM32L0无高级定时器输出固定脉冲方式之一.pdf》资料免费下载
    发表于 09-19 16:57 0次下载
    <b class='flag-5'>STM32</b>L0无高级<b class='flag-5'>定时器</b>输出固定<b class='flag-5'>脉冲</b>方式之一

    STM32各类系列定时器概览

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

    555定时器构成1秒脉冲

    555定时器构成1秒脉冲 555定时器是一种常用的计时元件,它可以被用于构成各种不同的电子电路中。本文将介绍如何用555定时器构成1秒脉冲
    的头像 发表于 08-24 15:49 6058次阅读

    关于RM0016单脉冲模式设置问题

    在RM0016文档177页,以下是不是多余: Map IC2 on TI2 by writing CC2S = 01 in the TIM1_CCMR2 register。这是输入捕获功能(对于单脉冲模式不需要捕获输入信号TI2),如果不是多余这个设置有什么用?
    发表于 08-08 08:11

    STM32 TIM—基本定时器

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

    STM32定时器(一)PWM输出

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

    关于单脉冲模式作移相输出

    STM32TIMER实现2号输出波形呢? 我们这里可以考虑使用TIMER的单脉冲模式来实现【当然完全可能有其它方式,此处不表】。下面我使用STM32L476Nucleo板【用哪个系列STM32
    的头像 发表于 07-17 10:21 588次阅读
    关于<b class='flag-5'>单脉冲模式</b>作移相输出

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

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

    MSPM0L1306开发板教程之通用定时器

    MSPM0L系列的通用定时器(TIMG)是一个16位的自动重装定时器,支持向下和上下计数两种模式,同时带有两个比较捕获单元,可以做到输出比较,输入捕获,PWM输出,单脉冲输出等功能。
    的头像 发表于 06-30 15:50 1667次阅读
    MSPM0L1306开发板教程之通用<b class='flag-5'>定时器</b>

    CH32V103基础教程56-TIM-单脉冲模式

    本章教程主要进行单脉冲输出演示:在单脉冲模式下,TIM2_CH2(PA1)引脚检测到上升沿,则在TIM2_CH1(PA0) 输出正脉冲
    发表于 04-27 16:53