如何使用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指针,而不引用步长增量。这让我更不明白这到底是怎么回事。