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...