CH32V307SPI DMA

用DMA和SPI發(fā)送一個大數組,就是在SPI屏幕上顯示數組里的圖像數據


出現一個問題,DMA內存地址不自增的時候發(fā)送數據是對的,就是發(fā)那么多個,但是內存地址自增的時候圖像下面的數據出錯,debug過了圖像數據沒有問題,但是屏幕下面顯示出錯,說明屏幕下面的數據出錯了,難道你們的大數組存放的位置是分開的嗎


#define TFT_IMG_W 128

#define TFT_IMG_H 152


unsigned char TFT_Img[TFT_IMG_H][TFT_IMG_W*2];


void TFT_DMA_Init(void)

{

? ? //DMA1_CHANNEL5

? ? //RCC DMA

? ? RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

? ? //Init

? ? DMA_InitTypeDef DMA_InitStructure;

? ? DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)&SPI2->DATAR;

? ? DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;

? ? DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;

? ? DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)TFT_Img;

? ? DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;

? ? DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;

? ? DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;

? ? DMA_InitStructure.DMA_BufferSize=0;

? ? DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;

? ? DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;

? ? DMA_InitStructure.DMA_Priority=DMA_Priority_Low;

? ? DMA_Init(DMA1_Channel5, &DMA_InitStructure);


? ? DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE);

? ? NVIC_InitTypeDef NVIC_InitStructure;

? ? NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel5_IRQn;

? ? NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;

? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;

? ? NVIC_Init(&NVIC_InitStructure);


? ? SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE);

}


void TFT_DMA_Start(void)

{

? ? if(!TFT_DMA_Transmiting)

? ? {

? ? ? ? TFT_DMA_Transmiting=1;

? ? ? ? TFT_Set_Region(0,0,TFT_IMG_W-1,TFT_IMG_H-1);

? ? ? ? DMA_Cmd(DMA1_Channel5, DISABLE);

? ? ? ? DMA_SetCurrDataCounter(DMA1_Channel5, TFT_IMG_H*TFT_IMG_W*2);


? ? ? ? DMA_Cmd(DMA1_Channel5, ENABLE);

? ? }

}



我去,內存地址自增就錯了,不自增刷的就是對的,啊


有沒有一種可能,你的圖像數組的內容在刷新期間變了


你好 你的數組大小并沒有很大,在RAM中指定數組的地址即可,如果你需要DMA搬運很大的數據(64K左右),請郵箱與我聯(lián)系zdg@wch.cn8165a93060bdbfa4563833fe4a20ba5.png


ba34557cca95b558bdaa24f07e99b9d.png數組這樣聲明


這個指定ram的地址,是有什么講究嗎,如果不指定會咋樣?


有具體問題可以郵箱聯(lián)系,謝謝


有空又回來弄一下這個,可是我加了他就報錯了


d:/_software/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe:C:\Users\qwe19\Desktop\CH30V307\CH32V307_V3\MCU\Ld\Link.ld:1 cannot move location counter backwards (from 0000000020000228 to 0000000020000100)

collect2.exe: error: ld returned 1 exit status

make: *** [makefile:57: CH32V307_V3.elf] Error 1

image.png


只改過這個東西

image.png


您好,你這報錯原因應該是設置的section太小了,放在該區(qū)域的數據太大,超過定義指定的這個RAM的空間大小了,導致越界,可將0x100改的大一些,比如改成0x1000,具體可根據你數據的大小來定這段區(qū)域的大小。后續(xù)若有問題,可通過郵箱(lzs@wch.cn)和我溝通



樓主,你這個問題解決了嗎?我遇到不知道怎么使用DMA批量發(fā)送數據至SPI的屏,可以指導一下嗎?


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频