您的位置 首页 制造

STM32中DMA完成方法

STM32系列微控制器均含有DMA和通用时钟TIMx模块。其低端型号中仅包含DMA1,支持7个通道;高端型号还包括DMA2,支持5个通道。它的每个通

  STM32系列微控制器均含有DMA和通用时钟TIMx模块。其低端类型中仅包含DMA1,支撑7个通道;高端类型还包含DMA2,支撑5个通道。它的每个通道可任意指定作业形式,如内存到内存、内存到外设或外设到内存等。当涉及到外设时,一般是由外设来触发DMA的一次传输,如串口收到数据的标志位可触发DMA。
  DMA的每次传输都分为4个阶段:恳求裁定、地址核算、总线存取和应对。除总线存取阶段,其他3个阶段都只需求一个体系周期,而且不占用总线,可在DMA控制器内部并发地履行。总线存取阶段,每个字(4字节)的传输需求3个体系周期。DMA和CPU作业在替换方法下,不会彼此堵塞。DMA各个通道可独立设置优先级,当拜访同一资源时高优先级通道先取得资源。
  选用时钟的4个比较/捕获通道加DMA能够产生出4路不同频率和占空比的方波。这儿为简化篇幅,只列出了产生一路方波的代码。基本原理是:将时钟的4个通道设置为回转形式(即计数器与比较捕获寄存器持平时,其对应的CPU引脚电平产生回转),设置计数器为向上计数到0xFFFF的形式;然后预先核算好需求引脚回转的时刻,并使能对应通道的DMA恳求。这样,当计数器与比较/捕获寄存器的值持平时,由DMA将下一个需求引脚电平回转的时刻送入到比较/捕获寄存器。
  这儿将DMA设置为从内存到外设的半字(2个字节)环形传输。敞开DMA全满和半满中止,在中止处理函数中不断填充新的时刻值,即可确保产生的波形不间断。假定寄存时刻值的缓冲长度为N,则每N/2个点才中止一次,这样CPU就不需求频频进入中止,履行功率比较高。由此也能够看出,缓冲越大,对中止呼应的实时性要求也越低,当然这时中止的处理时刻也越长。以下为示例代码:
  需求留意的是,比较/捕获寄存器的预加载功用有必要制止掉。咱们需求的是写入比较/捕获寄存器的值当即与计数器相比较输出,而无需等候一个更新事情。
  选用DMA+TIMx的方法来捕获上升沿和下降沿时刻,有利于进步体系的实时性和履行功率。经过TIMx的捕获功用将方波的电平跳变时刻记载在比较/捕获寄存器中,然后DMA将该值主动传输到内存,只有当DMA触发半满或全满事情时CPU才需求进入中止处理数据。经过记载方波的上升沿和下降沿时刻,然后将两个时刻相减,从而就能得到一切低沿和高沿的宽度,最终进行后续的剖析处理。这种方法下中止频率仅为方波频率的4/N(N为缓冲区巨细)。
  测验中STM32系列微控制器作业在36 MHz,可产生出1路最高1.5 MHz的方波,可捕获1 MHz的方波,而此刻CPU的履行几乎不受影响。这儿选用DMA来完成方波的产生和捕获,极大地进步了体系的实时性和履行功率,减少了中止次数,节省了名贵的资源。这种计划也能够用来完成高效的模仿串口。别的,若有多个DMA一起作业,应考虑最坏情况下DMA的呼应时刻,以防止过错产生。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/258579.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部