娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月21日(星期六)

2019年06月21日 | 嵌入式stm32學習:DMA-存儲到外設

發(fā)布者:心靈的旅程 來源: eefocus關鍵字:stm32  DMA  存儲到外設 手機看文章 掃描二維碼
隨時隨地手機看文章

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  DMA  存儲到外設 引用地址:嵌入式stm32學習:DMA-存儲到外設

上一篇:嵌入式stm32學習:I2C-讀寫EEPROM
下一篇:嵌入式stm32學習:DMA-存儲到存儲

推薦閱讀

根據(jù)IHS Markit預測,推動車用顯示系統(tǒng)成長的主要力量來自于供應鏈,亞洲的顯示器面板大廠最近大舉投資車用顯示器面板制造,以因應銷售量的持續(xù)成長...市場研究機構IHS Markit的最新報告指出,隨著車廠將越來越多技術導入車輛以創(chuàng)造產品差異化,車用顯示系統(tǒng)需求預期在今年將會快速成長;該機構預測,車用顯示器面板出貨量今年將成長11%,達到1,640萬片...
TrendForce報告指出,電動汽車已成為汽車產業(yè)未來的主要成長動能,預估在2021年電動汽車將突破800萬輛,為2018年的兩倍。集邦咨詢旗下拓墣產業(yè)研究院報告指出,除了電池與發(fā)動機外,電動汽車關鍵零組件以IGBT功率元件最為重要,其使用量約為傳統(tǒng)內燃機引擎汽車的5至10倍之多,因此電動汽車的發(fā)展將帶動IGBT市場總值持續(xù)成長,預估2021年IGBT的市場總值將突...
搞過嵌入式開發(fā)的程序員一定知道有I2C總線,手機和電視中的主要串行技術,通過兩條線SDA,SCL解決總線傳輸,地址區(qū)分和熱插拔問題的技術。可是就是這么一個簡單的東西,讓我這個自認為有些經驗的單片機開發(fā)者浪費了整整五個月!這還是我有比較充分的經驗,在一年半前就已經非常了解I2C協(xié)議的情況下!這段時間我花了無數(shù)的時間在調試,思考,解決問題而沒有...
Teledyne e2v半導體公司和賽峰電子與防務公司(Safran Electronics & Defense)聯(lián)合取得法國政府的援助,開發(fā)系統(tǒng)封裝路線圖,此舉將作為法國復蘇計劃的一部分法國格勒諾布爾 - 2021年6月14日 - Teledyne e2v半導體公司(格勒諾布爾)和賽峰電子與防務公司(瓦朗斯)目前正在法國政府的大力援助下啟動CORAIL SiP(系統(tǒng)級封裝)項目。CORAIL SiP...

史海拾趣

小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 霞浦县| 永顺县| 香港| 新干县| 南靖县| 太谷县| 渝中区| 红河县| 南皮县| 诏安县| 余干县| 佛山市| 桐城市| 永城市| 班玛县| 科技| 翁牛特旗| 伊川县| 永清县| 蛟河市| 分宜县| 乐业县| 永川市| 宁明县| 江安县| 綦江县| 登封市| 平阴县| 河津市| 岚皋县| 黎平县| 鹤山市| 洞头县| 延边| 大宁县| 乳山市| 洱源县| 大关县| 汝城县| 当雄县| 庆安县|