本文作者:Miler Shao 最近有人在STMCU社區(qū)網(wǎng)站咨詢(xún)?nèi)缦聠?wèn)題: 由于實(shí)驗(yàn)需要,,要用到STM32F407的兩個(gè)DMA并用定時(shí)器觸發(fā),,在使用過(guò)程中發(fā)現(xiàn)DMA1無(wú)法把GPIO的IDR上的數(shù)據(jù)傳輸?shù)絻?nèi)存,調(diào)試過(guò)程中出現(xiàn)DMA1的數(shù)據(jù)流傳輸錯(cuò)誤標(biāo)志,,但是使用DMA2沒(méi)有問(wèn)題,。然后我看了下參考手冊(cè)上兩個(gè)DMA的控制系統(tǒng)實(shí)現(xiàn)圖,DMA1的外設(shè)端口有一個(gè)橋接器把APB1和AHB1連起來(lái),,不知道這個(gè)橋連器作用是什么,?是把APB1和AHB1連起來(lái)互相訪問(wèn)嗎? 另外測(cè)試把GPIO的IDR改成APB1下的tim5的ARR,,DMA1正常工作,。請(qǐng)問(wèn)這是怎么回事?
咨詢(xún)者提到STM32F4系列中的兩個(gè)DMA,即DMA1與DMA2,AHB到APB橋接器;再就是兩個(gè)外設(shè),,GPIO和TIM5 ,。為了弄清這個(gè)問(wèn)題,,我們有必要先看看STM32F407的總線(xiàn)與存儲(chǔ)框架圖。 如下圖所示:
整個(gè)系統(tǒng)架構(gòu)由多層32位AHB總線(xiàn)矩陣及主從總線(xiàn)構(gòu)成,,并建立起各個(gè)主從模塊間的互聯(lián)訪問(wèn),。 圖中方框內(nèi)縱橫交錯(cuò)的矩陣線(xiàn)就是總線(xiàn)矩陣,猶如縱橫交錯(cuò)的公路,,讓各類(lèi)交通工具在里面同時(shí)運(yùn)行而互不干擾,。只有在圖中紅色箭頭所指的地方,可能出現(xiàn)主控總線(xiàn)訪問(wèn)撞車(chē)的時(shí)刻,,此時(shí)總線(xiàn)矩陣會(huì)按照一定規(guī)矩進(jìn)行仲裁,,即誰(shuí)先誰(shuí)后而不會(huì)發(fā)生交通事故。 總線(xiàn)矩陣跟圖中上方的8條主控總線(xiàn)和右方的7條從控總線(xiàn)保持互聯(lián),。 八條主控總線(xiàn): [主控總線(xiàn)簡(jiǎn)單點(diǎn)說(shuō)就是可以用來(lái)主動(dòng)訪問(wèn)別的外設(shè)的通路] —Cortex?-M4F 內(nèi)核 I 總線(xiàn),、D 總線(xiàn)和 S 總線(xiàn) —DMA1 存儲(chǔ)器總線(xiàn) —DMA2 存儲(chǔ)器總線(xiàn) —DMA2 外設(shè)總線(xiàn) — 以太網(wǎng) DMA 總線(xiàn) —USB OTG HS DMA 總線(xiàn) ● 七條被控總線(xiàn): — 內(nèi)部 Flash ICode 總線(xiàn) — 內(nèi)部 Flash DCode 總線(xiàn) — 主要內(nèi)部 SRAM1 (112 KB) — 輔助內(nèi)部 SRAM2 (16 KB) — 輔助內(nèi)部 SRAM3 (64 KB)(僅適用于STM32F42xxx 和 STM32F43xxx 器件) —AHB1 外設(shè)(包括 AHB-APB 總線(xiàn)橋和 APB 外設(shè)) —AHB2 外設(shè) —FSMC 借助于總線(xiàn)矩陣,可以實(shí)現(xiàn)主控總線(xiàn)到被控總線(xiàn)的訪問(wèn),,可以實(shí)現(xiàn)多個(gè)高速外設(shè)并發(fā)訪問(wèn)和高效運(yùn)行,。[需要注意的是,對(duì)于STM32F4系列,,圖中64K CCM并不經(jīng)過(guò)總線(xiàn)矩陣,,只能被CPU訪問(wèn)。自然DMA是不能訪問(wèn)它的,。] 好,,我們接著看看STM32F407 的兩個(gè)通用DMA,即DMA1和DMA2,。 這兩個(gè)DMA都具有雙AHB總線(xiàn)訪問(wèn)端口,,一端用于存儲(chǔ)器訪問(wèn),另一端用于外設(shè)訪問(wèn),。同時(shí)它們各自都有一個(gè)AHB從編程接口,,這個(gè)不難理解,對(duì)它配置編程控制總得有個(gè)接口,。 DMA總線(xiàn)訪問(wèn)框圖
我們結(jié)合這幅DMA總線(xiàn)訪問(wèn)框圖和上面的系統(tǒng)存儲(chǔ)總線(xiàn)框架圖可以明顯看出,,2個(gè)DMA的外設(shè)訪問(wèn)端口的總線(xiàn)連接有點(diǎn)不一樣。 DMA2的外設(shè)訪問(wèn)端口既與總線(xiàn)矩陣相連,,又與AHB-APB橋2相連,,可以進(jìn)一步訪問(wèn)APB2外設(shè)。而DMA1卻沒(méi)有與總線(xiàn)矩陣相連,,只是跟AHB-APB橋1相連,,可以進(jìn)一步訪問(wèn)APB1外設(shè)。[紅色方框代表總線(xiàn)矩陣] 現(xiàn)在的問(wèn)題說(shuō)DMA1訪問(wèn)不了GPIO,,但如果換成TIM5就可以,。我們可以去芯片數(shù)據(jù)手冊(cè)的Device overview部分查看相關(guān)總線(xiàn)和外設(shè)分布圖,。我截取STM32F40xblock diagram的部分如下: 我們可以看出GPIO外設(shè)跟AHB1相連;TIM5跟APB1相連,。而我們從DMA訪問(wèn)框圖看得清楚,,DMA1的外設(shè)端口根本沒(méi)連接AHB1,自然沒(méi)法訪問(wèn)相應(yīng)外設(shè),,比如GPIO,,而DMA2 可以,因?yàn)樗梢越?jīng)過(guò)總線(xiàn)矩陣后去訪問(wèn)AHB1的外設(shè),。 那DMA1為什么能訪問(wèn)TIM5呢,,因DMA1的AHB外設(shè)端口總線(xiàn)經(jīng)過(guò)AHB/APB1橋后就可以訪問(wèn)APB1各類(lèi)外設(shè),比方TIM5等,。 至于咨詢(xún)者問(wèn)到的兩個(gè)橋接器的作用,,沒(méi)啥過(guò)多需要解釋的。橋嘛,,連接第一,;然后兩邊時(shí)鐘的同步和時(shí)鐘分頻,滿(mǎn)足不同外設(shè)的時(shí)鐘需求,。 ST MCU的參考手冊(cè)里強(qiáng)調(diào)了只有DMA2能實(shí)現(xiàn)MEMORY到MEMORY的傳輸,DMA1是實(shí)現(xiàn)不了的,,原理類(lèi)似,。因?yàn)橐獙?shí)現(xiàn)M to M 的傳輸,必須兩個(gè)端口都能實(shí)現(xiàn)對(duì)MEMORY的訪問(wèn),,DMA1的AHB外設(shè)端口無(wú)法訪問(wèn)到內(nèi)部MEMORY,。 咨詢(xún)者的問(wèn)題,基本上靠看上面幾幅圖可以得到答案,。這些圖很重要,,很多信息用圖描述也很直觀明了。各技術(shù)手冊(cè)里的插圖往往大有乾坤,,不要視而不見(jiàn),。上面提到的都是基于STM32F4系列的總線(xiàn)架構(gòu),你也可以去看看STM32其它系列的系統(tǒng)總線(xiàn)框圖,,相信你一定會(huì)另有發(fā)現(xiàn)和收獲 |
|
來(lái)自: 戴維圖書(shū)館 > 《筆記》