日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年01月07日(星期二)

正在發(fā)生

2019年01月07日 | STM32F103之DMA實驗,內存通過DMA向串口1發(fā)送數(shù)據(jù)

發(fā)布者:碼夢創(chuàng)想 來源: eefocus關鍵字:STM32F103  DMA實驗  內存  發(fā)送數(shù)據(jù) 手機看文章 掃描二維碼
隨時隨地手機看文章


#include "dma.h"

//////////////////////////////////////////////////////////////////////////////////   

//////////////////////////////////////////////////////////////////////////////////

 

DMA_InitTypeDef DMA_InitStructure;

 

u16 DMA1_MEM_LEN;//保存DMA每次數(shù)據(jù)傳送的長度     

//DMA1的各通道配置

//這里的傳輸形式是固定的,這點要根據(jù)不同的情況來修改

//從存儲器->外設模式/8位數(shù)據(jù)寬度/存儲器增量模式

//DMA_CHx:DMA通道CHx

//cpar:外設地址

//cmar:存儲器地址

//cndtr:數(shù)據(jù)傳輸量 

void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)

{

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA傳輸

DMA_DeInit(DMA_CHx);   //將DMA的通道1寄存器重設為缺省值,默認值

DMA1_MEM_LEN=cndtr;

DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //DMA外設ADC基地址

DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //DMA內存基地址

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //數(shù)據(jù)傳輸方向,從內存讀取發(fā)送到外設

DMA_InitStructure.DMA_BufferSize = cndtr;  //DMA通道的DMA緩存的大小

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外設地址寄存器不變

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //內存地址寄存器遞增數(shù)組緩存的地址

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  //數(shù)據(jù)寬度為8位

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //數(shù)據(jù)寬度為8位

 

DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  //工作在正常緩存模式

DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x擁有中優(yōu)先級 

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMA通道x沒有設置為內存到內存?zhèn)鬏?/p>

 

DMA_Init(DMA_CHx, &DMA_InitStructure);  //根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道USART1_Tx_DMA_Channel所標識的寄存器


//開啟一次DMA傳輸

void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)

DMA_Cmd(DMA_CHx, DISABLE );  //關閉USART1 TX DMA1 所指示的通道 

 

DMA_SetCurrDataCounter(DMA1_Channel4,DMA1_MEM_LEN);//DMA通道的DMA緩存的大小

 

DMA_Cmd(DMA_CHx, ENABLE);  //使能USART1 TX DMA1 所指示的通道 

}   

#include "led.h"

#include "delay.h"

#include "sys.h"

#include "usart.h"

#include "lcd.h"

#include "key.h"

#include "dma.h"

 

const u8 TEXT_TO_SEND[]={"我要用dma做esp8266實驗"};//發(fā)送的字符串,數(shù)據(jù)。

 

#define TEXT_LENTH  sizeof(TEXT_TO_SEND)-1//取值發(fā)送的文本的長度,TEXT_TO_SEND字符串長度(不包含結束符)

 

u8 SendBuff[(TEXT_LENTH+2)*100];//存儲器地址及容量,定義為一個數(shù)組,TO BE USED FOR STRING  THAT IS TEXT_LENTH

 

int main(void)

u16 i;

u8 t=0; 

float pro=0; //進度 

delay_init();     //延時函數(shù)初始化   

uart_init(9600); //串口初始化為9600

LED_Init();   //初始化與LED連接的硬件接口

LCD_Init();     //初始化LCD 

KEY_Init(); //按鍵初始化

MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)SendBuff,(TEXT_LENTH+2)*100);//DMA1通道4,外設為串口1,存儲器為SendBuff,長(TEXT_LENTH+2)*100.

POINT_COLOR=RED;//設置字體為紅色 

LCD_ShowString(60,50,200,16,16,"Mini STM32");

LCD_ShowString(60,70,200,16,16,"DMA TEST");

LCD_ShowString(60,90,200,16,16,"2018/6/22");

LCD_ShowString(60,110,200,16,16,"KEY0:Start");

//顯示提示信息    

for(i=0;i<(TEXT_LENTH+2)*100;i++)//填充ASCII字符集數(shù)據(jù),小于存儲容量的范圍內

{

if(t>=TEXT_LENTH)//加入換行符

{ SendBuff[i++]=0x0d; 

  SendBuff[i]=0x0a; 

  t=0;

}else SendBuff[i]=TEXT_TO_SEND[t++];//復制TEXT_TO_SEND語句 ,一位一位的發(fā)送文本里的數(shù)據(jù),存儲到內存的sendbuffer數(shù)組里   

}  

POINT_COLOR=BLUE;//設置字體為藍色

 

i=0;

while(1)

{

////if the button is pressed,then wit excuate the usart_dma

t=KEY_Scan(0);

if(t==KEY0_PRES)//KEY0按下

{

LCD_ShowString(60,150,200,16,16,"Start Transimit....");

LCD_ShowString(60,170,200,16,16,"   %");//顯示百分號

printf("\r\nDMA DATA:\r\n ");

USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //串口DMA發(fā)送使能

MYDMA_Enable(DMA1_Channel4);//使能一次DMA傳輸!    

//實際應用中,傳輸數(shù)據(jù)期間,可以執(zhí)行另外的任務    //等待DMA傳輸完成,此時我們來做另外一些事,點燈

while(1)

{

if(DMA_GetFlagStatus(DMA1_FLAG_TC4)!=RESET)//等待通道4傳輸完成

{

DMA_ClearFlag(DMA1_FLAG_TC4);//清除通道4傳輸完成標志

break; 

}pro=DMA_GetCurrDataCounter(DMA1_Channel4);//得到當前DMA還剩余多少個數(shù)據(jù)。這個也可以作為傳輸完成的標志

pro=1-pro/((TEXT_LENTH+2)*100);//得到百分比,why it is TEST_LENTH+2,not theTEXT-LENTH ??  

pro*=100;      //擴大100倍

LCD_ShowNum(60,170,pro,3,16);   

}     

LCD_ShowNum(60,170,100,3,16);//顯示100%   

LCD_ShowString(60,150,200,16,16,"Transimit Finished!");//提示傳送完成

}

//if no press is buttoned,the led is lighted.

 

i++; //實際應用中,傳輸數(shù)據(jù)期間,可以執(zhí)行另外的任務

delay_ms(100);

if(i==20)

{

LED0=!LED0;//提示系統(tǒng)正在運行

i=0;

}    

}

}

關鍵字:STM32F103  DMA實驗  內存  發(fā)送數(shù)據(jù) 引用地址:STM32F103之DMA實驗,內存通過DMA向串口1發(fā)送數(shù)據(jù)

上一篇:STM32F103實現(xiàn)DMA接收串口不定長度數(shù)據(jù)
下一篇:stm32f103串口dma配置實例

推薦閱讀

Freescal的單片在汽車業(yè)界長時間占據(jù)主導地位,本人從事汽車行業(yè)10余年,對飛思卡爾的單片機頗為熟悉。近段時間經(jīng)常遇到很多同行到處尋找codewarrior的license因為從freescal的官方下載的編譯器都有功能和代碼長度方面的限制,接著,他們大多到網(wǎng)絡上搜索,希望能找到一款破解軟件,解除codewarrior的限制。但是,遺憾的是網(wǎng)絡的鋪天蓋地的license100%全都...
要想了解一鍵下載電路的工作過程,首先要了解STM32的幾種啟動模式。ISP下載一般步驟1) Boot0接3.3,Boot1接GND 2) 按復位按鍵,實現(xiàn)下載程序執(zhí)行的一般步驟1)mcuisp/flymcu勾選“編程后執(zhí)行”,發(fā)送命令直接從FLASH啟動。 2)Boot0接GND,Boot1接任意,按一次復位。STM32的幾種啟動模式如下表所示: 從表中可知,我們想用串口下載代碼,就要配置BOOT0為1...
PMIC初創(chuàng)公司Trameto(位于威爾士斯旺西)已與其他四個初創(chuàng)公司一起加入了Silicon Catalyst的孵化計劃。Silicon Catalyst是世界上首屈一指的半導體解決方案創(chuàng)業(yè)孵化器公司。榮獲2015 UBM ACE最佳新創(chuàng)公司獎項,Silicon Catalyst及其合作伙伴建立生態(tài)系統(tǒng),通過解決新興企業(yè)面臨的挑戰(zhàn)促進硅解決方案的成功啟動,其中包括獲取啟動資金和關鍵的行業(yè)資源...
91% 的受調研者表示,2030 年時汽車將采用全電或混合動力自動駕駛技術將主要關注司機和乘客安全高速 WiFi、無線充電和車輛間通信成為最主要的功能特點軟件定義車輛作為汽車廠商最重要的議題美國伊利諾伊州萊爾 – 2021 年 1 月 7 日 – 全球領先的連接與電子解決方案提供商Molex莫仕發(fā)布面向汽車行業(yè)決策者的全球性調研成果,對將會影響到“未...

史海拾趣

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

最新單片機文章
更多每日新聞

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved