STM32CUBEMX(6)--移植雅特力AT32F403AVGT7,雙串口通過(guò)DMA方式接收不定長(zhǎng)數(shù)據(jù)
概述
????本篇文章主要介紹如何使用STM32CubeMX移植到雅特力AT32F403AVGT7,并通過(guò)雙串口輸出打印。
????直接存儲(chǔ)器訪問(wèn)(DMA)用于在外設(shè)與存儲(chǔ)器之間以及存儲(chǔ)器與存儲(chǔ)器之間提供高速數(shù)據(jù)傳輸??梢栽跓o(wú)需任何CPU操作的情況下通過(guò)DMA快速傳輸傳輸。這樣節(jié)省的CPU資源可供其它操作使用。
? ?DMA允許在后臺(tái)執(zhí)行數(shù)據(jù)傳輸,無(wú)需Cortex-M3處理器干預(yù)。在此操作過(guò)程中,主處理器可以執(zhí)行其它任務(wù),僅當(dāng)整個(gè)數(shù)據(jù)塊需要處理時(shí),才會(huì)中斷主處理器。這樣即使傳輸大量數(shù)據(jù)也不會(huì)對(duì)系統(tǒng)性能造成太大影響。
????DMA主要用于為不同的外設(shè)模塊實(shí)現(xiàn)集中數(shù)據(jù)緩沖存儲(chǔ)(通常在系統(tǒng)SRAM中)。與分布式解決方案(其中每個(gè)外設(shè)都需要實(shí)現(xiàn)自己的本地?cái)?shù)據(jù)存儲(chǔ))相比,DMA解決方案在硅片成本和功耗方面的成本較低。
????根據(jù)使用的產(chǎn)品型號(hào)的不同,有一個(gè)或兩個(gè)DMA模塊。
????本篇文章主要介紹如何使用STM32CubeMX實(shí)現(xiàn)串口DMA讀取,并且打印出去。

硬件準(zhǔn)備
????首先需要準(zhǔn)備一個(gè)開(kāi)發(fā)板,這里我準(zhǔn)備的是雅特力AT32F403AVGT7的開(kāi)發(fā)板:?

選擇芯片型號(hào)
????雅特力AT32F403AVGT7兼容STM32F103系列,故選取STM32f103VG進(jìn)行開(kāi)發(fā)。

配置時(shí)鐘源
????HSE與LSE分別為外部高速時(shí)鐘和低速時(shí)鐘,在本文中使用內(nèi)置的時(shí)鐘源,故都選擇Disable選項(xiàng),如下所示:

配置時(shí)鐘樹(shù)
????雅特力AT32F403AVGT7最高頻率到240M,但是STM32F1的最高主頻到72M,同時(shí)使用不使用外部晶振時(shí)候,最高速度只能到64M,所以配置64即可:

串口配置
????本次實(shí)驗(yàn)使用的串口2,串口3進(jìn)行串口通信,波特率配置為115200。


配置DMA
????在DMA 設(shè)置中,Mode有兩種模式,一種是普通模式(Normal),使用一次發(fā)送語(yǔ)句就發(fā)一次,另一種是循環(huán)模式(Circula),使用一次發(fā)送會(huì)一直發(fā)送。這里接收選擇循環(huán)模式。


中斷
????在中斷設(shè)置里打開(kāi)串口2,3的中斷。

生成工程設(shè)置
????注意在生產(chǎn)工程設(shè)置中不能出現(xiàn)中文,不然會(huì)報(bào)錯(cuò)。

代碼生成設(shè)置
????最后設(shè)置生成獨(dú)立的初始化文件。

生成代碼

代碼
????在main.c中,添加頭文件,若不添加會(huì)出現(xiàn) identifier "FILE" is undefined報(bào)錯(cuò)。
????變量定義 ,在main.c中添加。
????函數(shù)聲明和串口重定向,這里使用串口3進(jìn)行打印,在main.c中添加。
????開(kāi)啟串口IDLE中斷,在main.c中添加。
????串口DMA獲取,在main.c中添加。
????主循環(huán),在main.c中添加。
????中斷外部變量引用,在stm32f0xx_it.c中添加。
????串口2,3中斷函數(shù),在stm32f0xx_it.c中添加。
結(jié)果演示
????開(kāi)機(jī)會(huì)顯示雙串口DMA接收例程。
????串口2發(fā)送數(shù)據(jù)會(huì)在串口3中打印,但是會(huì)顯示接收的是串口2。
????串口3發(fā)送數(shù)據(jù)會(huì)在串口3中打印,但是會(huì)顯示接收的是串口3。

視頻教學(xué)
