不管怎么读 都是通道10的值 ,麻烦大牛们帮忙看看函数 ADC_HandleTypeDef hadc1; void MX_ADC1_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode = ADC_SCAN_SEQ_FIXED; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.LowPowerAutoPowerOff = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.NbrOfConversion = 2; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_12CYCLES_5; hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_12CYCLES_5; hadc1.Init.OversamplingMode = ENABLE; hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256; // 16bit hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4; hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } sConfig.Channel = ADC_CHANNEL_10; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } sConfig.Channel = ADC_CHANNEL_15; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } } uint16_t ADC_Read(uint32_t Channel) { uint32_t value; ADC_ChannelConfTypeDef sConfig; sConfig.Channel = Channel; sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1; /* 通道 */ if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); value = HAL_ADC_GetValue(&hadc1); HAL_ADC_Stop(&hadc1); return value; } |
STM32G0B1CC单片机多个从板使用CAN链接,CAN接收帧和发送帧丢失的问题。
STM32G0B1adc+dma采样数据错位
cube stm32g030f6p6 adc analog watchdog1 无法配置
STM32G070使用HAL_SPI_Receive函数疑问
stm32g030j6m6如何使用串口烧录程序?NRST引脚能否作为普通输入IO口用?
STM32的H5/U5系列处理器内置运放支持负压运算吗?比如输入-1V,放大倍数为2时输出-2V
stm32G030C8T6 官方例程库
STM32G070 调用HAL_I2C_Mem_Read_IT测试疑问
STM32G030F6P6中的3种睡眠模式的功耗分别是多少
STM32G030F6 ADC+DMA多通道非连续采样无法正常工作?
你如果现在的确需要逐个通道地查询获取ADC值。
你先在CubeMx仅选择1个通道比方通道15完成配置,生成初始化工程。
然后,基于cubeMx创建的工程额外加点代码,加个基于单个通道的初始化代码。
void User_Channel_Config(uint32_t ChannelNum )
{
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ChannelNum;
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
具体操作时,需要用哪个通道就启用哪个通道。比方这样:
while (1)
{
HAL_Delay(500);
Channel_Config(ADC_CHANNEL_15 );
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,0xffff);
Adc_ch15 = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
Channel_Config( ADC_CHANNEL_10 );
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,0xffff);
Adc_ch10 = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
}
这样操作是可以的,我刚才验证测试过。你可以参考下。
另外,看到你代码里启动ADC后,读取一次结果就停止了ADC,现在是扫描模式的话,这样不会每次只读到1个通道的数据,第2通道数据不会丢掉?
大佬你好,版本号我回头看一下,我试了一下把IN10和IN15分开初始化,就是写了两个初始化函数,每次读参数的时候都重新初始化一下就没问题, 现在就是放一下初始化 ,就不行 只能读到IN10的值。麻烦告知一下怎么改是好。