用了 ADC1_IN10 ADC1_IN11 ADC1_IN15 只有10 和11 的adc值正确 IN15的值不正确, 模式选择的是 sequencer set to not fully configurable 求大佬看看 void MX_ADC1_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.LowPowerAutoPowerOff = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.NbrOfConversion =3; 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.OversamplingMode = DISABLE; hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH; 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_11; 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(); } } |
如需获得 stm32g030c8t6 等器件的更多信息,请点击链接或 点击此处 联系在线客服!
如果硬件及电源方面没问题的话,很可能就出在ADC的配置序列模式的选择了。对于STM32G0系列,ADC扫描模式可以有两种,分别是不完全配置序列模式和完全配置序列模式。你若用到通道15的话,请选择不完全配置序列模式.不知你的CubeMx版本是不是还比较低,现在是6.6版本了。
如果硬件及电源方面没问题的话,很可能就出在ADC的配置序列模式的选择了。对于STM32G0系列,ADC扫描模式可 ...
谢谢 我去看看
从代码看:ADC_RANK_CHANNEL_NUMBER应该是一个固定数值的变量 而3个通道都使用:sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; 结果就只转换1个通道而已
检查一下IO的配置,另外可以单独测试15是否正常。