《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > STM32中采用DMA實(shí)現(xiàn)方波的產(chǎn)生和捕獲
STM32中采用DMA實(shí)現(xiàn)方波的產(chǎn)生和捕獲
摘要: STM32系列微控制器是ST公司基于Cortex-M3內(nèi)核的高集成度的微控制器。它在性能、價格、功耗和實(shí)時性方面樹立了一個新的標(biāo)桿,集成了Cortex-M3內(nèi)核,以及雙ADC、多用途的通用時鐘TIMx、RTC、I2C、SPI、UART、CAN、DMA、USB等豐富的外設(shè)。其功耗在全速72MHz所有模塊都打開時也僅僅為36 mA,在低功耗模式下其功耗僅為2μA。
Abstract:
Key words :
  1 STM32微控制器介紹

  STM32系列微控制器是ST公司基于Cortex-M3內(nèi)核的高集成度的微控制器。它在性能、價格、功耗和實(shí)時性方面樹立了一個新的標(biāo)桿,集成了Cortex-M3內(nèi)核,以及雙ADC、多用途的通用時鐘TIMx、RTC、I2C、SPI、UART、CAN、DMA、USB等豐富的外設(shè)。其功耗在全速72MHz所有模塊都打開時也僅僅為36 mA,在低功耗模式下其功耗僅為2μA。

  2 DMA和TIMx簡介

  STM32系列微控制器均含有DMA和通用時鐘TIMx模塊。其低端型號中僅包含DMA1,支持7個通道;高端型號還包括DMA2,支持5個通道。它的每個通道可任意指定工作模式,如內(nèi)存到內(nèi)存、內(nèi)存到外設(shè)或外設(shè)到內(nèi)存等。當(dāng)涉及到外設(shè)時,一般是由外設(shè)來觸發(fā)DMA的一次傳輸,如串口收到數(shù)據(jù)的標(biāo)志位可觸發(fā)DMA。

  DMA的每次傳輸都分為4個階段:申請仲裁、地址計算、總線存取和應(yīng)答。除總線存取階段,其他3個階段都只需要一個系統(tǒng)周期,并且不占用總線,可在DMA控制器內(nèi)部并發(fā)地執(zhí)行。總線存取階段,每個字(4字節(jié))的傳輸需要3個系統(tǒng)周期。DMA和CPU工作在交替方式下,不會相互阻塞。DMA各個通道可獨(dú)立設(shè)置優(yōu)先級,當(dāng)訪問同一資源時高優(yōu)先級通道先獲得資源。

  DMA的使用比較簡單,每路DMA僅包括4個寄存器,用于指定DMA的工作模式、源地址、目標(biāo)地址和傳輸次數(shù)。ST公司提供了很好的驅(qū)動庫,簡化了外設(shè)的使用,方便閱讀和移植。本文采用庫函數(shù)來展示功能。

  其通用時鐘是很有特色的外圍模塊,可實(shí)現(xiàn)多種復(fù)雜的功能。時鐘模塊內(nèi)部主要包含一個計數(shù)器和4個通道的比較/捕獲寄存器。時鐘可工作在捕獲或比較模式。在捕獲模式下,若有對應(yīng)的觸發(fā)信號,計數(shù)器的值會保存到比較/捕獲寄存器,并觸發(fā)中斷或DMA;在比較模式下,若計數(shù)器的值與比較/捕獲寄存器的值相等,則對外輸出預(yù)選設(shè)定好的信號,如高電平、低電平或電平反轉(zhuǎn)等。

  3 采用DMA+TIMx實(shí)現(xiàn)多路方波的產(chǎn)生

  采用時鐘的4個比較/捕獲通道加DMA可以產(chǎn)生出4路不同頻率和占空比的方波。這里為簡化篇幅,只列出了產(chǎn)生一路方波的代碼。基本原理是:將時鐘的4個通道設(shè)置為反轉(zhuǎn)模式(即計數(shù)器與比較捕獲寄存器相等時,其對應(yīng)的CPU引腳電平發(fā)生反轉(zhuǎn)),設(shè)置計數(shù)器為向上計數(shù)到0xFFFF的模式;然后預(yù)先計算好需要引腳反轉(zhuǎn)的時刻,并使能對應(yīng)通道的DMA請求。這樣,當(dāng)計數(shù)器與比較/捕獲寄存器的值相等時,由DMA將下一個需要引腳電平反轉(zhuǎn)的時刻送入到比較/捕獲寄存器。

  這里將DMA設(shè)置為從內(nèi)存到外設(shè)的半字(2個字節(jié))環(huán)形傳輸。開啟DMA全滿和半滿中斷,在中斷處理函數(shù)中不斷填充新的時刻值,即可保證產(chǎn)生的波形不間斷。假設(shè)存放時刻值的緩沖長度為N,則每N/2個點(diǎn)才中斷一次,這樣CPU就不需要頻繁進(jìn)入中斷,執(zhí)行效率比較高。由此也可以看出,緩沖越大,對中斷響應(yīng)的實(shí)時性要求也越低,當(dāng)然這時中斷的處理時間也越長。以下為示例代碼:

  a.jpg

  b.jpg

  需要注意的是,比較/捕獲寄存器的預(yù)加載功能必須禁止掉。我們需要的是寫入比較/捕獲寄存器的值立即與計數(shù)器相比較輸出,而無需等待一個更新事件。

  4 采用DMA+TIMx實(shí)現(xiàn)多路方波的捕獲

  假設(shè)有一個方波需要記錄并分析。一種方案是設(shè)置CPU引腳在上升沿和下降沿中斷,然后在中斷中記錄該時刻。這種處理方式的實(shí)時性和效率會差一些,因?yàn)檫M(jìn)出中斷本身就需要一定的指令周期(Cortex-M3為12+12或6+12個系統(tǒng)周期),而且需要考慮多個中斷同時發(fā)生的最壞情況,對可檢測方波的最大頻率有一定的限制。另一種方案是采用輪詢的方式不斷查詢該引腳的狀態(tài)并記錄上升沿和下降沿的時刻,這種方式下系統(tǒng)幾乎不能處理其他的任務(wù)了。

  采用DMA+TIMx的方式來捕獲上升沿和下降沿時刻,有利于提高系統(tǒng)的實(shí)時性和執(zhí)行效率。通過TIMx的捕獲功能將方波的電平跳變時刻記錄在比較/捕獲寄存器中,然后DMA將該值自動傳輸?shù)絻?nèi)存,只有當(dāng)DMA觸發(fā)半滿或全滿事件時CPU才需要進(jìn)入中斷處理數(shù)據(jù)。通過記錄方波的上升沿和下降沿時刻,然后將兩個時刻相減,進(jìn)而就能得到所有低沿和高沿的寬度,最后進(jìn)行后續(xù)的分析處理。這種方式下中斷頻率僅為方波頻率的4/N(N為緩沖區(qū)大小)。

  圖1為TIMx工作在捕獲模式下一個通道的示意圖。

d.jpg

  其中TI1為CPU引腳的輸入,經(jīng)過濾波(新的電平必須保持一定時間才認(rèn)為有效,以防止高頻噪聲的干擾)后進(jìn)入后繼的邊沿極性選擇,最后經(jīng)過分頻作為捕獲信號的輸入。這里TI2F為相鄰?fù)ǖ澜?jīng)過濾波后的信號,也就是說一個引腳的信號可作為TIMx兩個通道的輸入捕獲信號,這樣信號只需要接一個CPU引腳就可以觸發(fā)兩個時鐘通道了。

  將輸入方波接到CPU一個引腳上,假設(shè)該引腳對應(yīng)于圖上的TI1,設(shè)定其在下降沿觸發(fā)通道1的捕獲事件,而其在上升沿觸發(fā)通道2的捕獲事件,事件發(fā)生后申請DMA將捕獲的比較/捕獲寄存器的值保存起來。示例代碼如下:

  c.jpg

  其他部分與第3節(jié)中比較輸出的代碼基本一致。

  5 總結(jié)

  測試中STM32系列微控制器工作在36 MHz,可產(chǎn)生出1路最高1.5 MHz的方波,可捕獲1 MHz的方波,而此時CPU的執(zhí)行幾乎不受影響。這里采用DMA來實(shí)現(xiàn)方波的產(chǎn)生和捕獲,極大地提高了系統(tǒng)的實(shí)時性和執(zhí)行效率,減少了中斷次數(shù),節(jié)省了寶貴的資源。這種方案也可以用來實(shí)現(xiàn)高效的模擬串口。

  DMA的傳輸需要多個系統(tǒng)周期的,例如采用DMA實(shí)現(xiàn)內(nèi)存到內(nèi)存的搬移,每次傳輸需要5個系統(tǒng)周期,而內(nèi)存到外圍的一次傳輸需要2個APB周期+5個AHB周期。這樣用上述方法產(chǎn)生的方波最小沿(低沿或高沿)為14個周期(包括比較/捕獲寄存器到內(nèi)部影子寄存器的傳輸?shù)?。若有更高的需求,應(yīng)考慮其他的實(shí)現(xiàn)方案。另外,若有多個DMA同時工作,應(yīng)考慮最壞情況下DMA的響應(yīng)時間,以避免錯誤發(fā)生。



 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美成人一区在线| 国产麻豆综合| 欧美在线播放高清精品| 亚洲视频观看| 夜夜嗨av一区二区三区免费区| 久久精品国产成人| 欧美一区二区三区视频在线观看| 亚洲午夜一区| 亚洲一区国产一区| 亚洲无线视频| 在线视频你懂得一区二区三区| 亚洲美女免费视频| 99国产精品久久久| 99国产精品私拍| 99视频在线精品国自产拍免费观看| 亚洲激情偷拍| 亚洲国产视频a| 亚洲区欧美区| 日韩亚洲精品电影| 在线中文字幕日韩| 亚洲欧美bt| 小黄鸭视频精品导航| 欧美一级在线播放| 久久精品国产精品亚洲精品| 亚洲福利在线视频| 亚洲国内高清视频| 亚洲美女在线观看| 在线视频免费在线观看一区二区| 亚洲小视频在线| 西西裸体人体做爰大胆久久久 | 久久国产成人| 久久精品一区二区三区四区| 亚洲欧洲日产国产网站| 一本一本久久a久久精品综合妖精| 在线性视频日韩欧美| 亚洲尤物视频在线| 欧美在线播放一区二区| 久久一区亚洲| 欧美巨乳在线| 国产精品每日更新| 国精品一区二区| 亚洲激情自拍| 亚洲午夜精品福利| 久久精品女人的天堂av| 夜夜夜精品看看| 欧美一区二区三区久久精品茉莉花| 久久精品一区二区三区不卡牛牛| 欧美成年人在线观看| 欧美网站在线观看| 国产亚洲在线观看| 亚洲精品一区二区网址| 亚洲女同精品视频| 亚洲国产小视频在线观看| 一区二区高清视频| 欧美在线黄色| 免费观看在线综合| 欧美午夜宅男影院| 韩国成人精品a∨在线观看| 亚洲精品网站在线播放gif| 亚洲欧美www| 亚洲精选中文字幕| 欧美一级片在线播放| 欧美阿v一级看视频| 国产精品久久久久影院色老大| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲伦理网站| 欧美一区二视频在线免费观看| 999在线观看精品免费不卡网站| 亚洲黄页一区| 亚洲一区二区欧美日韩| 欧美日韩一区二区三区在线观看免| 国产精品成人在线观看| 国产亚洲欧洲一区高清在线观看 | 亚洲精品国产视频| 欧美一级大片在线免费观看| 一区二区三区久久| 久久免费视频这里只有精品| 欧美日韩18| 韩国一区电影| 亚洲综合另类| 一区二区三区日韩欧美| 久久综合亚洲社区| 国产精品久久中文| 欧美伦理在线观看| 伊人久久大香线蕉综合热线| 亚洲女性裸体视频| 亚洲香蕉网站| 欧美精品一区二区在线播放| 韩国一区二区三区在线观看| 亚洲小视频在线| 一本色道久久综合亚洲91| 久久一二三区| 国产亚洲欧美一级| 亚洲在线第一页| 亚洲一级片在线观看| 欧美另类专区| 亚洲国产天堂久久综合| 久久激情婷婷| 久久高清福利视频| 国产精品久久久久久久久久免费看| 亚洲国产高潮在线观看| 亚洲高清视频一区| 久久九九久久九九| 国产伦精品一区二区三区高清版| 一区二区三区高清在线观看| 亚洲卡通欧美制服中文| 欧美成人69| 亚洲第一区中文99精品| 久久精品国产精品| 久久久国产视频91| 国产日韩欧美视频在线| 亚洲综合视频网| 午夜精品一区二区三区四区| 国产精品久久久久久户外露出 | 亚洲精品婷婷| 99亚洲视频| 欧美日本亚洲韩国国产| 91久久久久久久久| 99精品欧美一区| 欧美日本不卡高清| 日韩视频三区| 亚洲亚洲精品在线观看 | 亚洲午夜国产成人av电影男同| 中国亚洲黄色| 欧美视频一区二区在线观看| 一区二区欧美在线| 亚洲一区二区日本| 欧美香蕉大胸在线视频观看| 一本一本大道香蕉久在线精品| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 99re热精品| 亚洲欧美日韩精品久久奇米色影视| 国产精品久久久久久久一区探花| 亚洲视频一区二区在线观看| 午夜视频在线观看一区二区三区 | 9久草视频在线视频精品| 欧美精品一区在线| 99视频一区| 性做久久久久久免费观看欧美| 国产日韩欧美麻豆| 亚洲国产欧美日韩另类综合| 欧美黄色大片网站| 日韩午夜一区| 性高湖久久久久久久久| 国产偷国产偷精品高清尤物| 久久精品日韩欧美| 欧美成人免费小视频| 亚洲久久在线| 亚洲欧美福利一区二区| 国产一区二区av| 91久久精品日日躁夜夜躁欧美| 欧美精品在线观看播放| 亚洲天堂成人| 久久久久91| 亚洲激情视频网站| 久久精品国产亚洲aⅴ| 欧美激情精品久久久六区热门| 99re6热在线精品视频播放速度| 香蕉成人啪国产精品视频综合网| 国产日韩视频一区二区三区| 亚洲激情校园春色| 欧美午夜精品久久久久免费视| 午夜精品美女自拍福到在线| 蜜臀av一级做a爰片久久| 99热在线精品观看| 久久精品国产综合| 亚洲国产一区在线观看| 亚洲综合日韩在线| 韩日精品视频| 亚洲视频在线观看网站| 国产亚洲精品久久久久婷婷瑜伽| 欧美午夜免费影院| 亚洲一区二区三区四区五区黄 | 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲欧美日韩国产一区二区| 韩国久久久久| 亚洲视频免费看| 国产一区二区三区久久悠悠色av| 99成人在线| 欧美三区美女| 亚洲国产裸拍裸体视频在线观看乱了| 欧美视频福利| 久久激情五月丁香伊人| 欧美午夜精品久久久久久浪潮| 久久国产精品久久久| 亚洲欧洲在线视频| 国产日韩欧美一区二区三区在线观看 | 夜夜嗨一区二区三区| 久久精品国产成人| 99re这里只有精品6| 另类天堂视频在线观看| 亚洲一区日韩| 欧美日本国产一区| 久久国产欧美精品| 国产精品裸体一区二区三区| 亚洲毛片在线观看.| 国产综合色产| 欧美一区高清| 一本色道久久综合亚洲精品不| 欧美1区视频|