STM32F103 串列埠 DMA中斷實現資料收發

2021-10-10 11:45:45 字數 2774 閱讀 6376

02 stm32f103 串列埠 +dma中斷實現資料收發

講了 串列埠 + dma空閒中斷實現不定長資料收發的功能,除了利用空閒中斷實現資料收發,還可以利用dma的中斷實現資料的收發,不同之處是後者不能實現不定長資料的接收,本文講解dma中斷的方式實現資料的收發。

使用dma的中斷時,無需配置串列埠的中斷

#include

#include

#include

#include

"stm32f10x_gpio.h"

#include

"stm32f10x_rcc.h"

#include

"stm32f10x_usart.h"

#include

"stm32f10x_dma.h"

#include

"misc.h"

#include

"systick.h"

#include

"uart_dma.h"

uint8_t uart1recvdata[32]

=;// 接收資料緩衝區

uint8_t uart1recvflag =0;

// 接收完成標誌位

uint8_t uart1recvlen =0;

// 接收的資料長度

uint8_t uart1senddata[32]

=;// 傳送資料緩衝區

uint8_t uart1sendflag =0;

// 傳送完成標誌位

/* 串列埠1 gpio引腳初始化 */

void

uart1gpioinit

(void

)/************ ↓ rs485 相關 ↓ ************/

/* 使能485傳送 */

void

uart1txenable

(void

)/* 使能485接收 */

void

uart1rxenable

(void

)/************ ↑ rs485 相關 ↑ ************/

/* 串列埠1配置 9600 8n1 */

void

uart1config

(void

)/* 清除dma的傳輸數量暫存器 */

void

uart1dmaclear

(void

)/* 串列埠1傳送陣列 */

void

uart1sendarray

(uint8_t *arr, uint8_t len)

#ifndef _uart_dam_h_

#define _uart_dma_h_

#include

#define uart1_tx_port gpioa

#define uart1_tx_pin gpio_pin_9

#define uart1_rx_port gpioa

#define uart1_rx_pin gpio_pin_10

#define uart1_en_port gpiod

#define uart1_en_pin gpio_pin_1

#define baud_rate (9600)

extern uint8_t uart1recvdata[32]

;extern uint8_t uart1recvflag;

extern uint8_t uart1recvlen;

extern uint8_t uart1sendflag;

void

uart1gpioinit

(void);

void

uart1config

(void);

void

uart1dmaclear

(void);

void

uart1sendarray

(uint8_t *arr, uint8_t len)

;/************ ↓ rs485 相關 ↓ ************/

void

uart1rxenable

(void);

void

uart1txenable

(void);

/************ ↑ rs485 相關 ↑ ************/

#endif

/* uart_dma.h */

#include

"uart_dma.h"

#include

"misc.h"

intmain()

if(uart1sendflag ==1)

}}

#include

"stm32f10x_it.h"

#include

"stm32f10x_usart.h"

#include

"stm32f10x_dma.h"

#include

"uart_dma.h"

void

dma1_channel4_irqhandler

(void

)// 串列埠1 dma傳送中斷處理函式

}void

dma1_channel5_irqhandler

(void

)// 串列埠1 dma接收中斷處理函式

}

STM32F103 串列埠DMA 庫函式程式設計

串列埠dma實質上就是在dma控制器的控制下將記憶體中的資料 比如我們定義的乙個陣列 乙個位元組乙個位元組複製到,串列埠資料暫存器,然後傳送出去,傳送過程由dma控制,不用我們 控制。而對於傳統串列埠傳送,要傳送字串一般是要用迴圈語句,而用dma只需要配置好相關暫存器就可以自動傳送字串。dma時鐘和...

STM32F103串列埠通訊

usart 通用同步非同步收發器 是乙個序列通訊裝置,可以靈活地與外部裝置進行全雙工資料交換。有別於 usart 還有乙個uart,它是在 usart 基礎上裁剪掉了同步通訊功能,只有非同步通訊。全雙工的,非同步通訊 分數波特率發生器系統 傳送和接收共用的可程式設計波特率,最高達4.5mbits s...

STM32F103串列埠接收中斷溢位問題分析

stm32f103串列埠接收中斷溢位問題分析 本人目前正在做的機械人專案中,存在如下問題 1 小車舵機容易燒毀 分析原因 舵機不能堵轉,堵轉電流瞬間變大,將舵機燒毀,懷疑舵機質量問題以及存在舵機連桿機構不順滑導致堵轉的問題。2 小車手動模式能夠正常長時間執行,一旦上位機bringup指令啟動,建圖d...