bsp_usart_dma.h
#ifndef __USART_DMA_H
#define __USART_DMA_H
#include "stm32f4xx.h"
#include //USART #define DEBUG_USART USART1 #define DEBUG_USART_CLK RCC_APB2Periph_USART1 #define DEBUG_USART_RX_GPIO_PORT GPIOA #define DEBUG_USART_RX_GPIO_CLK RCC_AHB1Periph_GPIOA #define DEBUG_USART_RX_PIN GPIO_Pin_10 #define DEBUG_USART_RX_AF GPIO_AF_USART1 #define DEBUG_USART_RX_SOURCE GPIO_PinSource10 #define DEBUG_USART_TX_GPIO_PORT GPIOA #define DEBUG_USART_TX_GPIO_CLK RCC_AHB1Periph_GPIOA #define DEBUG_USART_TX_PIN GPIO_Pin_9 #define DEBUG_USART_TX_AF GPIO_AF_USART1 #define DEBUG_USART_TX_SOURCE GPIO_PinSource9 #define DEBUG_USART_BAUDRATE 115200 //DMA #define DEBUG_USART_DR_BASE (USART1_BASE+0x04) #define SENDBUFF_SIZE 5000 //發(fā)送的數(shù)據(jù)量 #define DEBUG_USART_DMA_CLK RCC_AHB1Periph_DMA2 #define DEBUG_USART_DMA_CHANNEL DMA_Channel_4 #define DEBUG_USART_DMA_STREAM DMA2_Stream7 void Debug_USART_Config(void); void USART_DMA_Config(void); #endif /* __USART1_H */ bsp_usart_dma.c /** ****************************************************************************** * 重定義C庫函數(shù)printf到USART端口,使用DMA模式發(fā)送數(shù)據(jù) ****************************************************************************** */ #include "./usart/bsp_usart_dma.h" uint8_t SendBuff[SENDBUFF_SIZE]; /** * @brief USART GPIO 配置,工作模式配置。115200 8-N-1 */ void Debug_USART_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;---------------------------- RCC_AHB1PeriphClockCmd( DEBUG_USART_RX_GPIO_CLK|DEBUG_USART_TX_GPIO_CLK, ENABLE); /* Enable UART clock */ RCC_APB2PeriphClockCmd(DEBUG_USART_CLK, ENABLE); /* Connect PXx to USARTx_Tx*/ GPIO_PinAFConfig(DEBUG_USART_RX_GPIO_PORT,DEBUG_USART_RX_SOURCE, DEBUG_USART_RX_AF); /* Connect PXx to USARTx_Rx*/ GPIO_PinAFConfig(DEBUG_USART_TX_GPIO_PORT,DEBUG_USART_TX_SOURCE,DEBUG_USART_TX_AF); /* Configure USART Tx as alternate function */ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_PIN ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure); /* Configure USART Rx as alternate function */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_PIN; GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure); /* USART mode config */ USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(DEBUG_USART, &USART_InitStructure); USART_Cmd(DEBUG_USART, ENABLE); } ///重定向C庫函數(shù)printf到USART1 int fputc(int ch, FILE *f) { /* 發(fā)送一個字節(jié)數(shù)據(jù)到USART1 */ USART_SendData(DEBUG_USART, (uint8_t) ch); /* 等待發(fā)送完畢 */ while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TXE) == RESET); return (ch); } ///重定向C庫函數(shù)scanf到USART1 int fgetc(FILE *f) { /* 等待串口輸入數(shù)據(jù) */ while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_RXNE) == RESET); return (int)USART_ReceiveData(DEBUG_USART); } /** * @brief USART1 TX DMA 配置,內存到外設(USART1->DR) */ void USART_DMA_Config(void) { DMA_InitTypeDef DMA_InitStructure; /*開啟DMA時鐘*/ RCC_AHB1PeriphClockCmd(DEBUG_USART_DMA_CLK, ENABLE); /* 復位初始化DMA數(shù)據(jù)流 */ DMA_DeInit(DEBUG_USART_DMA_STREAM); /* 確保DMA數(shù)據(jù)流復位完成 */ while (DMA_GetCmdStatus(DEBUG_USART_DMA_STREAM) != DISABLE) { } /*USART tx對應DMA2,通道4,數(shù)據(jù)流7*/ DMA_InitStructure.DMA_Channel = DEBUG_USART_DMA_CHANNEL; /*設置DMA源,串口數(shù)據(jù)寄存器地址*/ DMA_InitStructure.DMA_PeripheralBaseAddr = DEBUG_USART_DR_BASE; /*內存地址(要傳輸?shù)淖兞康闹羔槪?/ DMA_InitStructure.DMA_Memory0BaseAddr = (u32)SendBuff; /*方向:內存到外設*/ DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; /*傳輸大小DMA_BufferSize=SENDBUFF_SIZE*/ DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE; /*外設地址不增*/ DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /*內存地址自增*/ DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /*外設數(shù)據(jù)單位*/ DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; /*內存數(shù)據(jù)單位 8bit*/ DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; /*DMA模式:循環(huán)*/ DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; /*優(yōu)先級:中*/ DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; /*禁用FIFO*/ DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; /*存儲器突發(fā)傳輸16個節(jié)拍*/ DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; /*外設突發(fā)傳輸1個節(jié)拍*/ DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; /*配置DMA2的數(shù)據(jù)流7*/ DMA_Init(DEBUG_USART_DMA_STREAM, &DMA_InitStructure); /*使能DMA*/ DMA_Cmd(DEBUG_USART_DMA_STREAM, ENABLE); /*等待DMA數(shù)據(jù)流有效*/ while(DMA_GetCmdStatus(DEBUG_USART_DMA_STREAM) != ENABLE) { } } /*********************************************END OF FILE**********************/
上一篇:嵌入式stm32學習:I2C-讀寫EEPROM
下一篇:嵌入式stm32學習:DMA-存儲到存儲
推薦閱讀
史海拾趣
設計資源 培訓 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產品線 推出PWM 分辨率和 ADC 速度業(yè)界領先的新器件
- 意法半導體STM32MP23x:突破成本限制的工業(yè)AI應用核心
- 意法半導體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網頁和arduino的通訊
- ESP32 freeRTOS使用測試
- 480Wh/kg!湖南久森半固態(tài)金屬鋰負極電池即將量產
- 中國首條硫化物固體電解質量產線正式落地
- QUT開發(fā)出新的LENS系統(tǒng) 可以讓機器人進行類似大腦的導航
- 毫米波雷達裝機量分析:毫米波雷達裝車量持續(xù)攀升,大陸和博世占據(jù)60%以上市場份額
- TDK推出適用于車載濾波器的同軸電纜供電電感器
- 大摩給“人形機器人100”清單注入新思路
- 行家預判:2025年車載Mini LED反超OLED
- 2025數(shù)智未來峰會:深度解讀AI賦能工業(yè)的趨勢與實踐
- 工業(yè)自動化中的Raspberry Pi:簡化經濟實惠的邊緣計算
- 意法半導體宣布擴大在新加坡的“Lab-in-Fab”廠內實驗室合作項目
- 半導體品牌知名度問卷調查
- 上演你的“ADI實驗室電路”DIY!
- 下載有禮|是德科技電子書 《通過了解測試精度的基礎知識, 提高良率并降低風險》,不做“差不多先生”
- 下載《Altera SoC深度體驗》,打分評論贏好禮
- 【已結束】 Qorvo、村田、NI直播【UWB最新技術、方案、市場、應用解析】(13:30開始入場)
- TI 最新CapTIvate™ 觸控微控制器技術直播開始報名嘍!報名參與有禮呦!
- 老T叔的藏書閣——一位老工程師多年的資料積累
- 有獎直播【Keysight World Tech Day 2023分論壇——汽車自動駕駛與新能源】
- #最能打國產芯#能打入汽車電子這片地的國產芯,有多少啦?
- 新年新挑戰(zhàn):ST藍牙開發(fā)板免費申請評測+挑戰(zhàn)賽(littleshrimp帶隊)
- 可快速診斷皮膚癌的新設備:利用激光束讀取數(shù)據(jù),快速無
- 51單片機(AT89C52)串口收發(fā)程序
- Keil C51對C語言的關鍵詞擴展之一: _at_
- Keil C51對C語言的關鍵詞擴展之二: alien
- Keil C51對C語言的關鍵詞擴展之三: bdata
- msp430的DCO校準值被清除后該如何處理
- 使用Energia開發(fā)MSP430 LAUNCHPAD學習筆記2--串口通信
- MSP430系列嵌入式實驗教程---基礎
- 使用MSP430G2 LaunchPad開發(fā)板連接步進電機的方法
- 使用MSP430連接RTC模塊(DS2321)制作數(shù)字時鐘