本帖最后由 pssyx 于 2023-12-26 15:47 编辑
执行USER_Spi_init();之后,DMA就完成了此次传输。
DAM传输完成后,必须重新设置部分修改过的参数,比如:cnt值等,简单处理可以直接再调用一次DMA初始化代码。如下代码,请参考!
int32_t main(void)
{
//...
while(1)
{
//...
WS2812_senddata(TxBuffer1);
SysTickDelay(30);
}
}
void WS2812_senddata(uint8_t *sendbuff)
{
for(uint8_t i = 0; i < 24; i++)
{
TxBuffer1 = sendbuff;
}
SPI_DMACmd(SPIy, SPI_DMAReq_Tx, DISABLE);
SPI_FlushSendBuff(SPIy);
SPI_DMACmd(SPIy, SPI_DMAReq_Tx, ENABLE);
//...
DMA_Cmd(CW_DMACHANNEL1, DISABLE); //不能DMA
CW_DMACHANNEL1->CNT = 0x10000 | 0x18; //重置CNT计数:24 Bytes
//CW_DMACHANNEL1->DSTADDR = (uint32_t)( &SPIy->DR ); //重置目的地址
CW_DMACHANNEL1->SRCADDR = (uint32_t)( TxBuffer1 ); //重置源地址
DMA_Cmd(CW_DMACHANNEL1, ENABLE); //使能DMA
while(DMA_GetFlagStatus(CW_DMACHANNEL1)!= DMA_CHANNEL_STATUS_TRANSCOMPLETE);
DMA_ClearITPendingBit(DMA_IT_TC1);
//while(DMA_GetFlagStatus(CW_DMACHANNEL1)!= DMA_CHANNEL_STATUS_STOPREQ);
}
|