0

在使用 DMA 传输 SPI 时,我在触发 NSS 引脚时遇到问题。我使用 CubeMX 生成项目的整个核心。触发 NSS 为低电平和发送数据(也在传输结束和 NSS 为高电平之间)的时间太长。我怎样才能缩短这个时间?

我试着用

HAL_DMA_PollForTransfer(&hdma_spi1_tx, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY);

用于检测 SPI DMA 传输的结束,但一旦它工作,后来当我在 CubeIDE 中更改某些内容时,它完全停止了整个程序的工作......

int dmabusy = 0;
  while (1)
  {
      uint8_t testing[] = {5, 10, 15, 20, 25, 30};
      //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
      dmaBusy = 1;
      GPIOB->BSRR = GPIO_BSRR_BS12;
      HAL_SPI_Transmit_DMA(&hspi1, testing, 6);
      while(dmaBusy == 1);
      GPIOB->BSRR = GPIO_BSRR_BR12;
      //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
      for(int i=0; i<80000; i++){ // OPOZNIACZ START
          asm("NOP");
      } // OPOZNIACZ STOP
  }
  /* USER CODE END 3 */
}



void HAL_SPI_TxCpltCallback (SPI_HandleTypeDef * hspi){
    dmaBusy=0;
}

逻辑分析仪

4

0 回答 0