
不管怎么读 都是通道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; } |
STM32G0b1 USB device cdc显示设备描述符请求失败
基于STM32U575的RFID信息审查系统?
STM32CubeProgrammer 安装错误,请帮忙解决,谢谢
STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
STM32G070RBT6TR STM32CubeMX ADC配置后使用的是内部参考电压且零点的读数太大了
测评在哪里发?
Group Study vs. Solo Study: What Works Best?
STM32G070CBT6使用硬件SPI无法读出W25Q128的ID
STM32G0B0CET6的usb的时钟只能用48MHz的晶振来实现吗?
STM32G070RET6,中断优先级配置没有效果
你如果现在的确需要逐个通道地查询获取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的值。麻烦告知一下怎么改是好。