久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

stm32cubemx教程之DMA的MemToMem例子,即數(shù)據(jù)從flash到sram的DMA操作

 雪山白鳳凰_ 2020-10-30
stm32cubemx教程之DMA的MemToMem例子,即數(shù)據(jù)從flash到sram的DMA操作
關(guān)于DMA的使用,先來測試m2m的操作,
官方有這樣的例子,我是拿來參照的.
咱們用stm32cubemx來設(shè)置并自動生成DMA的代碼,稍加修改就可以用了.
先來說下什么是從flash到sram....
首先比如一個數(shù)據(jù)變量, 當你定義它為不可修改屬性的時候,它就會保存在flash中,
即flash中存儲的是不可修改的數(shù)據(jù).......可以理解為你燒寫進去的數(shù)據(jù)...嗯
而sram是可更改變量,即你寫的代碼中的那些運行中要修改數(shù)值的變量,可以理解為
這個變量保存在內(nèi)存中,嗯,電腦的內(nèi)存,你想啊,你關(guān)機之后內(nèi)存里面的東西就沒了.....
好了,程序中不可修改屬性一般用 const 來修飾.
我們的例子就是基于這個 .
首先,設(shè)置stm32cubemx的RCC,然后設(shè)置其中的DMA項.
你設(shè)置完RCC啥也別管,直接打開軟件的第三個選項卡,里面有DMA,
就點ADD,添加一個類似下圖的

4.png

還有記得返回NVIC開啟DMA的中斷.
生成代碼.
打開dma.c文件添加
hdma_memtomem_dma2_stream0 .XferCpltCallback = TransferComplete;
hdma_memtomem_dma2_stream0 .XferErrorCallback = TransferError;
意思是,產(chǎn)生中斷的調(diào)用函數(shù)定義,第一個是dma傳輸完成調(diào)用名為TransferComplete的函數(shù)
第二個是傳輸出錯則調(diào)用名字為TransferError的函數(shù),
然后再文件末尾添加這兩個函數(shù)
/ USER CODE BEGIN 2 /
static void TransferComplete(DMA_HandleTypeDef *DmaHandle)
{
/ Turn LED4 on: Transfer correct /
HAL_GPIO_WritePin (GPIOD,GPIO_PIN_12,GPIO_PIN_RESET );
}

/**
* @brief DMA conversion error callback
* @note This function is executed when the transfer error interrupt
* is generated during DMA transfer
* @retval None
*/
static void TransferError(DMA_HandleTypeDef *DmaHandle)
{
/ Turn LED5 on: Transfer Error /
HAL_GPIO_WritePin (GPIOD,GPIO_PIN_13,GPIO_PIN_RESET );
}

/ USER CODE END 2 /
意思就不寫了.
哦,對了,還要打開dma.h文件
在里面添加 extern DMA_HandleTypeDef hdma_memtomem_dma2_stream0;
意思是為了使main.c文件能夠調(diào)用dma.

2.png


3.png



在main.c文件頭部用戶代碼輸入0處添加
/ USER CODE BEGIN 0 /
static const uint32_t aSRC_Const_Buffer= {
0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10,
0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20,
0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30,
0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40,
0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50,
0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60,
0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70,
0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80};

static uint32_t aDST_Buffer;
/ USER CODE END 0 /
意思是定義一個const屬性的數(shù)據(jù),我們準備把它寫入到aDST_Buffer的sram里面
然后再main()主函數(shù)中添加
HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream0,(uint32_t)&aSRC_Const_Buffer, (uint32_t)&aDST_Buffer, 32);
開啟dma中斷傳輸,你可以看到我用了幾個led指示傳輸?shù)臓顟B(tài),你也可以在線調(diào)試debug查看

1.png

看到aSRC_Const_Buffer這個變量的地址是: 0x8001D8C ,這個地址在flash中,屬于flash的地址
而我們接受變量aDST_Buffer的地址:0x20000068 ,這個地址在sram地址范圍中,
說明我們傳輸數(shù)據(jù)正確,從flash通過DMA傳輸?shù)搅藄ram中

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多