请问用ADC多通道DMA采集,用的就是b站上这一集的那个程序改了一下,结果一接上传感器就只在0到3.3之间跳变了采不了数据,是咋回事啊?代码没有报错

请问用ADC多通道DMA采集,用的就是b站上这一集的那个程序改了一下,结果一接上传感器就只在0到3.3之间跳变了采不了数据,是咋回事啊?代码没有报错

关注让【道友老李】来帮你解答,本回答参考通义千问大模型编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
如果答案让您满意,请采纳、关注,非常感谢!问题描述: 使用ADC多通道DMA采集时,修改了b站上某教程的程序,但连接传感器后,采集到的数据只在0到3.3之间跳变,无法正常采集数据。代码没有报错。请问是什么原因导致的? 回答: 可能出现这个问题的原因有几种可能性:
#include "stm32xxx.h"
#include <stdio.h>
ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;
uint32_t ADC_Value[4];
void DMA_ADC_Init(void)
{
// 初始化ADC
HAL_ADC_Init(&hadc1);
// 初始化DMA
HAL_DMA_Init(&hdma_adc1);
// 配置DMA传输数据源和目的地
hdma_adc1.Instance = DMA1_Channel1;
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_adc1.Init.Mode = DMA_CIRCULAR;
hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH;
HAL_DMA_Init(&hdma_adc1);
__HAL_LINKDMA(&hadc1, DMA_Handle, hdma_adc1);
// 启动ADC和DMA
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC_Value, 4);
}
int main(void)
{
// 初始化各个模块,包括ADC、DMA等
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_DMA_Init();
// 初始化DMA和ADC
DMA_ADC_Init();
while (1)
{
// 等待数据采集完成
HAL_Delay(1000);
// 打印采集到的数据
printf("ADC Value: %d %d %d %d\n", ADC_Value[0], ADC_Value[1], ADC_Value[2], ADC_Value[3]);
}
}