串列埠通訊DMA中斷

2021-09-08 01:15:43 字數 2190 閱讀 7780

這是以前學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庫混用...