stm32ethdma
⑴ stm32 dma串口發送和接收怎麼配置
DMA接收數據只採用查詢用此函數還可以。
但同時開了DMA中斷的~~~~~~~
不管什麼時候,都是接收完整個數據包之後才對該包進行處理,是吧?
函數DMA_GetCurrDataCounte()只得到當前收到了多少個數據,而不知道接收數據完成沒有的
STM32要是有串口接收超時功能就好了。
問:如何利用STM32的資源自己做個類似超時的功能?加上DMA作為類似的接收FIFO.
⑵ STM32中DMA通道
呵呵,你這個應該是的stm32的固件庫函數的修改版吧。
DMA_Channel_TypeDef*指的是DMA_Channel_TypeDef的指針,它指向一個地址。
DMA_CHx應該是一個宏定義,它定義了這個地址。
x值代表DMA的通道號,根據晶元不同,可能有1~7不等。
如果想要明白些,用goto difinition查看宏定義即可。
歡迎追問
⑶ stm32cubemx 組態怎麼實現
1.新建工程
打開STM32cubeMX軟體,點擊New Project。選擇對應開板MCU(STM32F103ZET6)。
選擇工程後進入工程界面,如下圖所示。
2. 配置外設。
RCC設置,選擇HSE(外部高速時鍾)為Crystal/Ceramic Resonator(晶振/陶瓷諧振器)
GPIO口功能選擇,PF6,PF7,PF8,PF9為LED1-LED4.找到對應管腳設置為GPIO_Output模式。(黃色引腳為該功能的GPIO已被用作其他功能,可以忽略。綠色表示管腳已使用)
3. 時鍾配置
時鍾配置採用圖形配置,直觀簡單。各個外設時鍾一目瞭然。STM32最高時鍾為72M,此處只有在HCLK處輸入72,軟體即可自動配置。(RCC選擇外部高速時鍾)。
4.功能外設配置
在配置框我們可以看到有幾個區域,分別對應的功能設置如下
Multimedia(多媒體):音頻視頻、LCD
Control(控制):定時器
Analog(模擬):DAC、ADC
Connectivity(通訊連接):串口、SPI 、I2C、USB、ETH
SYStem(系統):DMA(直接存儲器存取)、GPIO、NVIC、RCC、看門狗
middlewares(中間件): FreeRTOS、FATFS、LwIP、USB
此工程中DMA沒用的不用配置,NVIC(嵌套中斷向量控制器(Nested Vectored Interrupt Controller))配置中斷優先順序。RCC不用配置。
GPIO Pin Level (管腳狀態):低電平
GPIO mode (管腳模式 ):推挽輸出
Maximum output speed (最大輸出速度):低速
User Label (用戶標簽):LED1
更改用戶標簽,管腳配置圖會顯示管腳的標簽。
4. 功耗計算
這個根據配置的外設計算功耗,不用理會。
5. 生成工程報告
點擊Project –>Generate Reports或者點擊快捷圖標生成報告。系統會提示先創建一個工程項目。點擊Yes設置工程。
輸入工程名,選擇工程路徑(注意不要出現中文,否則可能出錯)。工具鏈/IDE選擇MDK-ARM V5。最後面可以設置堆棧大小,此處默認不作修改。
在Code Generator中找到Generated files框,勾選Generated periphera initialization as a pair of '.c/.h' files per IP。外設初始化為獨立的C文件和頭文件。
點擊生成報告,工程目錄下會生成txt文件和pdf文件,裡面記錄了我們剛才的設置。
6. 生成工程代碼
點擊Project –>Generate Code或者點擊快捷圖標生成工程代碼。
點擊Open Project打開工程。到此就配置好工程外設初始化。
點擊Build按鈕,Build Optput信息框會輸出沒有錯誤沒有警告。
6. 添加應用程序
在gpio.c文件中可以看到LED管腳的初始化函數。
在stm32f1xx_hal_gpio.h頭文件中可以看到GPIO的操作函數。
在main函數中的while循環中添加LED流水燈效果的應用程序。
重新編譯程序,點擊下載到Open103Z-C開發板。如果提示錯誤,可以點擊圖標對Option for Target 的Dubug選項進行修改。(圖上選的是ST-LINK)
點擊Settings->Flash Download勾選 Reset and Run選項。這樣程序下載後自動啟動運行,不用再按一下復位或者重新上電才能運行。
程序下載到Open103Z-C開發板。可以看到LED1~LED4依次被點亮,實現流水燈的效果。
總結:STM32Cube提供了固件庫,用戶可直接調用固件庫函數來開發,並且可以很好的實現STM32-MCU全系列的代碼一致性。同時STM32CubeMX工具提供的可視化引腳、外設、時鍾等配置功能,可以幫助快速完成工程的建立、初始化。大大降低了開發者的工作量。
後續我們會結合微雪Open746I-C開發板,通過STM32cubeMX系列教程講解如何學習STM32F7系列的片上外設。通過STM32F7系列的學習,可以讓各位更快的掌握其他系列的使用方法。
附上出處鏈接:http://www.waveshare.net/forum/article-629-1.html
⑷ stm32 dma應用在什麼地方
形象地說,DMA是MCU內的搬運工,通過DMA把數據從外設和內存之間的自動搬遷,節省軟體的開銷。
STM32 的DMA有三種模式:內存-外設,外設-內存,內存-內存。
我舉幾個例子:
USART串口發送:沒DMA的情況,要發送大量數據,需要每一個位元組發送後產生完成中斷或輪詢旗標,然後軟體介入把下一個數據放入TDR寄存器,這樣會有大量中斷或等待消耗程序的資源,如果採用DMA的話,至需要預先在DMA通道設定要發送的數據的第一位元組的內存地址(例如: &buf[0]), 和設定需要發送多少位元組,開始發送後,DMA就會像z指針一樣完成一節,指針自動遞增或減自動移動數據到發送寄存器,直至發送完成會有一次中斷通知。中間過程軟體完全可以不介入。
ADC採集:多次采樣或循環采樣,同樣地沒DMA的話,采樣完畢中斷,搬移ADC的采樣值,出現大量中斷,如果是高速采樣情況更甚。可以通過DMA采樣完成後自動寫入你指定的數組地址,一個循環後DMA一個完成中斷通知你做後續的事情,例如平均演算法之類的。
DAC波形輸出:把波形的樣本建立一個數組,使用DMA循環發送。
⑸ STM32 DMA 問題
下面的描述可以幫你理解DMA,具體使用自行查手冊,讀代碼
DMA每一個通道可以視作一個獨立的外設, 有一個源地址寄存器(),一個目標地址寄存器,
一個傳輸次數寄存器,若干控制寄存器
可以將傳輸過程視作一個額外的cpu在啟動之後,開始執行如下代碼:
UDdst * pDst; //UDdst可以是 u8 u16 u32 任意
UDsrc * pDst; //UDsrc 可以是 u8 u16 u32
while(TransCNT)
{
if(觸發了一次傳輸) //一般來說指定了特定硬體功能(P2P,P2m,M2P)的話, 觸發型號是外設電路給到DMA電路的,有時候啟動傳輸會作為傳輸過程的第一個觸發信號(比如用M2P模式發送若干數據至串口,啟動時直接觸發一次,後續觸發則是傳輸完成時串口外設電路發送給DMA)
{
*pDst = *pSrc; TransCNT--;
if(源地址自動增 ==true)pSrc++;
if(目標地址自動增==true)pDst++;
}
}
⑹ STM32中DMA有什麼好處
用和不用當然都可以發送。不用DMA發送是需要單片機實時參與,由單片機一個一個地發送數據並進行監控。但是如果用DMA,設置了起始地址,數據大小等參數後,就直接由專門的一個DMA模塊進行數據發送,發送過程中單片機無需參與。發送完後會產生中斷告知單片機。由此可知用DMA可以節省單片機資源,讓單片可以在同一時間里干更多事。
⑺ STM32 DMA問題
STM32的DMA有多路!例如F103zet6有DMA1
7路
DMA2
5路,共計12路DMA通道。
使用三個不同外設分別配置三個通道即可!要注意每個外設對應的通道是手冊中固定的,不能自己定義。同時避開沖突的外設即可。
舉例:ADC1,TIM2_CH3,TIM4_CH1三個外設通道可配置為DMA1_CH1
。使用此三個外設時必須配置為此通道,且此三個外設不可同時使能配置使用!
⑻ 求嵌入式stm32中的dma工作原理如何個結構原理怎麼實現具體實現過程是一定採納
dma是將晶元的外設直接連接到ram上,外設可以直接訪問某一段ram,這樣可以提高運行的效率,減輕內核的負擔。對於使用者來說,詳細看看其相關寄存器的配置,使用應該挺簡單的。
⑼ 關於stm32串口使用DMA接收數據的問題
USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //使能串口2的DMA發送
/*等待DMA傳輸完成,實際應用中,傳輸數據期間,可以執行另外的任務 */
while(1)
{
if(DMA_GetFlagStatus(DMA1_FLAG_TC7)!=RESET) //判斷通道7傳輸完成
{
SZ_STM32_LED1Toggle();
SZ_STM32_LED2Toggle();
DMA_ClearFlag(DMA1_FLAG_TC7);//清除通道7傳輸完成標志
}
看不到你寫的程序 給你個DMA中斷提示