不管怎么读 都是通道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; } |
STM32G030, RTC, 调用LL_RTC_DeInit() 会进入1s超时的错误
STM32G030K8 i2c_get通讯异常
mcu iic问题:mcu作为i2c-slave, main函数内循环打印,收到 i2c get 时,循环打印停止了是什么原因?
adc采集电压
关于使用STM32G030C8T6的串口收发过程中串口接收问题
STM32G0B1的CAN自动重发
用stm32cubeide生成的STM32G030F6P6代码只要一开中断,任何中断程序都会跑飞.
STM32G0B1CBT6 双Bank升级,运行Bank2上Flash不能写问题
有关STM32G0B1RET6芯片FLASH擦除问题
STM32G030烧录程序
你如果现在的确需要逐个通道地查询获取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的值。麻烦告知一下怎么改是好。