问答

汇集网友智慧,解决技术难题

dyming2007

TA的家园币:12  

  • GD32 SPI+DMA 发送不了数据

    我是从STM32F103VCT6的代码移植到GD32F103VCT6,代码在STM32上跑的没问题,产品都上市了,现在移植过来,如题所述。我要实现的功能也就是基于SPI+DMA去控制SK6812灯带,实际跑下来DMA无法发送数据,调试时,DMA_GetFlagStatus(DMA1_FLAG_TC5)==0,始终为0,也就是DMA发送完成标志始终不置1,不知道为啥,看寄存器相关配置都没问题,但一个数据都发不出来。代码如下:voidLED_SPI_LowLevel_Init(void){uint16_ti=0;uint32_ttemp=0;GPIO_InitTypeDefGPIO_InitStructure;SPI_InitTypeDefSPI_InitStructure;DMA_InitTypeDefDMA_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);DMA_Cmd(DMA1_Channel5,DISABLE);DMA_DeInit(DMA1_Channel5);DMA_InitStructure.DMA_BufferSize=0;//开辟3个连续的DMA存储单元//DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)&(SPI2->DR);//外设地址(u32)SPI2_DR_Address;DMA_InitStructure.DMA_PeripheralBaseAddr=0x4000380C;DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)PixelBuffer;//内存地址,就是你想要把采样值存在那个变量的地址DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;//方向DMA_InitStructure.DMA_Priority=DMA_Priority_Low;//DMA优先级为低DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址不变DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//内存地址自增DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;//设置外设数据长度为半字,即16位DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;//设置DMA存储数据长度为半字,即16位DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;DMA_Init(DMA1_Channel5,&DMA_InitStructure);/*DMA1CH3=MEM->DR*/DMA_SetCurrDat

    国产芯片 GD spi DMA

    2022-04-09 2