代码之家  ›  专栏  ›  技术社区  ›  Mike

在STM32上用DMA复制16位数据

  •  0
  • Mike  · 技术社区  · 4 年前

    如何使用DMA将ADC数据复制到16位缓冲区?STM32F373有一个16位ADC,可以使用HAL函数读取: HAL_StatusTypeDef HAL_SDADC_InjectedStart_DMA(SDADC_HandleTypeDef *hsdadc, uint32_t *pData, uint32_t Length)

    uint32_t 价值观。但是,ADC的本机数据格式是 int16_t 所以我想把数据放到 int16_t adc_data[ADC_BUFFER_LENGTH] 通过呼叫:

    HAL_SDADC_InjectedStart_DMA(&hsdadc, adc_data, ADC_BUFFER_LENGTH);

    这似乎工作正常,但抛出一个不兼容的指针类型警告。我对解决这个问题的正确方法感到困惑。我应该过去吗 (uint32_t*)adc_data 相反呢?DMA如何知道16位阵列与32位阵列的正确阵列步长?如果我通过考试会怎么样 int32_t

    当我深入研究 HAL_SDADC_InjectedStart_DMA() 我发现呼叫: HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) 它只接受泛型uint32\t指针,而不引用步长增量。这让我更不明白这到底是怎么回事。

    0 回复  |  直到 4 年前