關(guān)于STM32的SPI加DMA通訊速度的調(diào)試總結(jié)
最近在琢磨240*320的RGB565的LCD屏幕的寫入,移植了店家提供的例程,嘗試各種方法,清屏需要的時(shí)間由原來的94ms變成了24ms到26ms,使用的單片機(jī)是STM32F411CEU6,單片機(jī)最后使用的兩種清屏幕的程序如下:單純的SPI1傳輸 和 SPI1加DMA傳輸
單片機(jī)模擬SPI通訊實(shí)在是太慢了!

耗時(shí)測(cè)試的方法:使用了個(gè)小軟件,能在收到串口信息時(shí)輸出當(dāng)前時(shí)間(精確到ms),而單片機(jī)清屏開始前串口發(fā)送 “s”到電腦,結(jié)束時(shí)又發(fā)送“P”到電腦,對(duì)比兩次時(shí)間的差距就知道花了多少時(shí)間了。

這是普通的SPI寫入清屏的耗時(shí),一個(gè)320*240的循環(huán),每次寫入2個(gè)Byte,這次耗時(shí)38ms
而DMA加SPI寫入數(shù)據(jù)的思路是,DMA傳輸512個(gè)Byte,等待傳輸結(jié)束,再次傳輸512個(gè)Byte,循環(huán)300次。


這次的運(yùn)行耗時(shí)為25ms,由此可見DMA加SPI比單純SPI發(fā)送快上不少,但具體原因我現(xiàn)在還不知道,如果誰有資料推薦的話在評(píng)論發(fā)一下鏈接,非常感謝。
SPI1的發(fā)送和接收都是掛DMA2上的,我開始感覺,一個(gè)DMA不同通道同時(shí)搬運(yùn)數(shù)據(jù)會(huì)不會(huì)讓清屏?xí)r間變長(zhǎng)?那樣的話一個(gè)DMA不就只能開啟一個(gè)通道?最后又花些時(shí)間實(shí)現(xiàn)SPI1加DMA同時(shí)發(fā)送接收時(shí),清屏?xí)r間依然沒有什么變化,總的來說,DMA搬運(yùn)數(shù)據(jù)可能是STM32傳輸數(shù)據(jù)達(dá)到最快速度的必須的硬件了。
使用的小軟件大概學(xué)過C#的查查資料都能做出來了,就不放鏈接了。