首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
STM32中采用DMA实现方波的产生和捕获
来源:本站整理  作者:佚名  2011-11-06 20:34:28




4 采用DMA+TIMx实现多路方波的捕获
    假设有一个方波需要记录并分析。一种方案是设置CPU引脚在上升沿和下降沿中断,然后在中断中记录该时刻。这种处理方式的实时性和效率会差一些,因为进出中断本身就需要一定的指令周期(Cortex-M3为12+12或6+12个系统周期),而且需要考虑多个中断同时发生的最坏情况,对可检测方波的最大频率有一定的限制。另一种方案是采用轮询的方式不断查询该引脚的状态并记录上升沿和下降沿的时刻,这种方式下系统几乎不能处理其他的任务了。
    采用DMA+TIMx的方式来捕获上升沿和下降沿时刻,有利于提高系统的实时性和执行效率。通过TIMx的捕获功能将方波的电平跳变时刻记录在比较/捕获寄存器中,然后DMA将该值自动传输到内存,只有当DMA触发半满或全满事件时CPU才需要进入中断处理数据。通过记录方波的上升沿和下降沿时刻,然后将两个时刻相减,进而就能得到所有低沿和高沿的宽度,最后进行后续的分析处理。这种方式下中断频率仅为方波频率的4/N(N为缓冲区大小)。
    图1为TIMx工作在捕获模式下一个通道的示意图。

d.jpg


    其中TI1为CPU引脚的输入,经过滤波(新的电平必须保持一定时间才认为有效,以防止高频噪声的干扰)后进入后继的边沿极性选择,最后经过分频作为捕获信号的输入。这里TI2F为相邻通道经过滤波后的信号,也就是说一个引脚的信号可作为TIMx两个通道的输入捕获信号,这样信号只需要接一个CPU引脚就可以触发两个时钟通道了。
    将输入方波接到CPU一个引脚上,假设该引脚对应于图上的TI1,设定其在下降沿触发通道1的捕获事件,而其在上升沿触发通道2的捕获事件,事件发生后申请DMA将捕获的比较/捕获寄存器的值保存起来。示例代码如下:
    c.jpg
    其他部分与第3节中比较输出的代码基本一致。

5 总结
    测试中STM32系列微控制器工作在36 MHz,可产生出1路最高1.5 MHz的方波,可捕获1 MHz的方波,而此时CPU的执行几乎不受影响。这里采用DMA来实现方波的产生和捕获,极大地提高了系统的实时性和执行效率,减少了中断次数,节省了宝贵的资源。这种方案也可以用来实现高效的模拟串口。
    DMA的传输需要多个系统周期的,例如采用DMA实现内存到内存的搬移,每次传输需要5个系统周期,而内存到外围的一次传输需要2个APB周期+5个AHB周期。这样用上述方法产生的方波最小沿(低沿或高沿)为14个周期(包括比较/捕获寄存器到内部影子寄存器的传输等)。若有更高的需求,应考虑其他的实现方案。另外,若有多个DMA同时工作,应考虑最坏情况下DMA的响应时间,以避免错误发生。

上一页  [1] [2] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:127,304.70000 毫秒