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
    +关注

    关注

    116

    文章

    5847

    浏览量

    223799
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371138
  • 定时器
    +关注

    关注

    23

    文章

    3360

    浏览量

    121740

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32A030微控制定时器

    脉冲宽度和周期、产生输出波形(PWM、单脉冲、插入死区时间 的互补PWM 等)。 2 通用定时器(GTIM1..4) 内部集成4 通用定时器
    发表于 12-04 06:47

    CW32L0开发板学习记录四,高级定时器ATIM学习

    (ATIM): 高级定时器 (ATIM) 包含 16bit 自动重载计数,并由可编程的
    发表于 12-01 07:35

    CW32定时器及中断介绍

    装载计数并由可编程预分频驱动。GTIM 支持定时器模式、计数
    发表于 12-01 07:08

    单片机定时器中断

    分频后送来;另一个是T0或T1引脚输入的外部脉冲源。如果定时器/计数工作在定时模式,则表示时间
    发表于 11-24 06:22

    SysTick系统滴答定时器简介

    SysTick—系统定时器是属于CM33内核中的外设,内嵌在NVIC中。系统定时器24
    的头像 发表于 09-23 09:50 1328次阅读
    SysTick系统滴答<b class='flag-5'>定时器</b>简介

    定时器输入捕获模式

    AT32F4xx定时器输入捕获模式 支持型号: AT32F 系列 主要使用外设: TIMER、 USART 获取示例 1 快速使用方法 1.1 硬件资源 AT-START-F403A V1.0
    发表于 09-22 09:58

    定时器同步之并行模式

    AT32F4xx定时器同步之并行模式 支持型号: AT32F 系列 主要使用外设: TIMER 获取示例 1 快速使用方法 1.1 硬件资源 AT-START-F403A V1.0 实验
    发表于 09-22 09:56

    ‌TPL5010-Q1 纳米功耗系统定时器(带看门狗功能)技术文档摘要

    TPL5010-Q1 Nano 定时器款低功耗、符合 AEC-Q100 标准的定时器,带有看门狗 该功能非常适合占空比或电池供电应用中的系统唤醒。在这样的系统中 微控制
    的头像 发表于 09-13 10:01 1256次阅读
    ‌TPL5010-Q1 纳米功耗系统<b class='flag-5'>定时器</b>(带看门狗功能)技术文档摘要

    STM32H7开启单脉冲模式 PWM波脉冲宽度不受CCR控制怎么解决?

    我将定时器1作为从定时器定时器arr是49 也就是50us记完圈 CCR是25并且把定时器配置成了OPM
    发表于 06-18 07:14

    MOSFET单脉冲雪崩击穿能量的失效模式

    单脉冲雪崩击穿能量(Energy during avalanche for single pulse),即 EAS。指的是MOSFET器件串联感性负载时,在单次脉冲(工作到关断)状态下,所能承受的最大能量消耗,单位是焦耳(J),其值越大,器件在电路中遭遇瞬间过电压或过电流
    的头像 发表于 05-15 15:32 3416次阅读
    MOSFET<b class='flag-5'>单脉冲</b>雪崩击穿能量的失效<b class='flag-5'>模式</b>

    MCU定时器/计数

    架构与功能特性‌ 定时器类型与配置‌ 高级控制定时器‌:支持互补PWM输出与刹车功能,适用于电机驱动等高精度控制场景。通用定时器‌:集成输入捕获、输出比较、单脉冲模式等基础功能‌。 系
    的头像 发表于 04-27 13:54 592次阅读

    STM32H750使用定时器比较通道触发DMA操作GPIO,偶尔会发生第一个脉冲宽度过短怎么解决?

    RCC配置: DMA设置: 定时器设置: 生成的协议是dshot600 期望产生的效果是电平至少为560ns的高低电平 但是在实际测试的过程发现周期性的出现第一个
    发表于 03-11 06:11

    STM32F103高级定时器中,开启单脉冲模式是不是会立刻清除计数器使能位?

    因为STM32F103的高级定时器重复计数寄存(RCR)的有效位只有8位,而我需要输出超过256PWM脉冲,且保证每个
    发表于 03-10 07:34

    stm32一个定时器不同的通道,可以不同时的输出pwm波形吗?

    请问,stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗?比如tim1的ch1输出,延时几毫秒后tim1的ch2输出。 现在是要输出两相位不同的pwm波形,延时时间、
    发表于 03-07 08:20

    示波器和定时器的周期和频率对不上

    我用了STM32F103C8T6开启定时器输出脉冲,不知道为什么我设置的周期应该是1ms,我也打印出系统时钟也没什么问题,但是示波器测出来显示2ms,有大佬遇到过相关问题能解答下吗
    发表于 01-02 14:07