|
DMA一次最多只能传65536次,每次最多16位两个字节,16位颜色的240*320是76,800次,超过了最大次数,分两次发送中间必须要隔一段时间才能成功发送,就算第一次发送的回调函数已经调用了,我在里面把标志位置一,外面用while判断标志位为0就一直等也不行,必须要再隔段时间才可以。。
unsigned char *p;
f_LCDSetWindows(0, 0, xLcd.Width, xLcd.Height);
CS(False);
ILI9341DC(True);
g_xDriverSPI.bSPITransFinishingFlag = False;
p = (unsigned char *)&s_DispBuf[0];
HAL_SPI_Transmit_DMA(&g_xSPI, p, 120 * 320);
while (g_xDriverSPI.bSPITransFinishingFlag == False)
{
/* code */
}
f_Delayms(20);
g_xDriverSPI.bSPITransFinishingFlag = False;
p = (unsigned char *)&s_DispBuf[120 * 320];
HAL_SPI_Transmit_DMA(&g_xSPI, p, 120 * 320);
while (g_xDriverSPI.bSPITransFinishingFlag == False)
{
/* code */
}
CS(True);
|
|