這是以前學32的時候寫的,那時候學了32之後感覺32真是太強大了,比51強的沒影。關於dma網上有許多的資料,親們搜搜,這裡只貼**了,其實我也想詳詳細細地敘述一番,但是自己本身打字就慢,還有好多事情要做!**是我親自都在板子上測試過的,,當然貼上/複製過去可能也不會盡如人意,知識這東西總是有許多道不清說不明的東西在裡頭,往往總是不經一番徹骨寒,哪得梅花撲鼻香。推薦一本書吧!這是野火出的。(是為了湊夠150個字,否則不讓提交)
這本書自從在圖書館借來就從來沒有再放回去,總是在續借。像是在打廣告了
將gpiob 16個埠全部置為高電
while(1
);}
/*其他函式裡 usart_dmacmd(usart1, usart_dmareq_tx, enable);
*/#include
"usart1.h
"uint8_t sendbuff[sendbuff_size];
/** 函式名:dma_config
* 描述 :dma 串列埠的初始化配置
* 輸入 :無
* 輸出 : 無
* 呼叫 :外部呼叫 */
void dma_config(void)/*
* 函式名:nvic_config
* 描述 :dma 中斷配置
* 輸入 :無
* 輸出 : 無
* 呼叫 :外部呼叫 */
static
void nvic_config(void
)
#ifndef __usart1_h#define __usart1_h#include
"stm32f10x.h
"#define usart1_dr_base 0x40013804
#define sendbuff_size 5000
void dma_config(void
);static
void nvic_config(void
);#endif /* __usart1_h */
#include "qq1.h"/*
* 函式名:usart1_config
* 描述 :usart1 gpio 配置,工作模式配置。115200 8-n-1
* 輸入 :無
* 輸出 : 無
* 呼叫 :外部呼叫 */
void usart1_config(void
)
#ifndef __qq1_h#define __qq1_h#include
void usart1_config(void
);#endif
#include"gpio.h
"void gpioinit(void
)
#ifndef __gpio_h#define __gpio_h#include
"stm32f10x.h
"void gpioinit(void
);#endif
#include "stm32f10x_it.h
"void dma1_channel4_irqhandler(void
)
}
三 stm32之串列埠通訊DMA傳輸完成中斷
一 dma功能簡介 首先嘮叨一下dma的基本概念,dma的出現大大減輕了cpu的工作量。在硬體系統中,主要由cpu 核心 外設 記憶體 sram 匯流排等結構組成,資料經常要在記憶體和外設之間,外設和外設之間轉移。例如 cpu需要處理從外設採集回來的資料,cpu需要先將資料從adc外設的暫存器讀取到...
stm32 利用DMA 串列埠空閒中斷接受任意長資料
二 串列埠空閒中斷 三 糾正 在進行stm32開發時,有時會遇到這種情況 需要在裝置間進行資料傳輸,由於stm32串列埠rdr和tdr暫存器都是8位有效的,我們往往需要定義傳輸協議 如一幀資料中,包含包含幀頭 幀id 資料幀 校驗幀等若干8位資料 我們希望可以一次收到一幀資料,並進行解碼操作。利dm...
LL庫串列埠 DMA
由於工作中測試發現串列埠傳輸資料延時有點大,傳輸35個位元組,115200,理論值應該在3ms左右,然而實際測試卻有40ms,所以首先想到會不會是hal庫執行效率低得原因,所以採用ll庫,但是ll庫的資料少之又少啊!自己做個記錄。使用cubemx可以直接生產ll庫的 我的工程裡是hal庫和ll庫混用...