STM32U5 系列 中 ADC4 有个特殊的属性,当配置成SCAN模式时,分为以下两种情况:
1、Fully-configurable sequencer
这种模式就是常用的模式,可以随意配置ADC通道,针对不同的通道可以配置成不同的采样时间,同时随意调整采样的顺序,简单那来说就是如下两个参数
sConfig.SamplingTime = ADC1_SAMPLE_TIME; /* 采样时间 */
sConfig.Rank = ADC_REGULAR_RANK_1; /* 采样顺序 */
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
HAL_ADC_ConfigChannel(ADCCfg[ADC1_CFG].ADCHandler, &sConfig);
如下ADC的采样通道,分别为IN1-IN11, 我们可以通过 参数 ADC_REGULAR_RANK_1,设置首先采样的通道。
但是这个配置在CUBEMX 不适用于所有的通道,如下所示,灰色的通道就不能使用
2、Sequencer not fully configurable:
这种模式下上述灰色的通道就能正常使用了
在此种配置下,每个通道不能自由配置,所以称之为
not fully configurable,体现在如下两点
1、采样顺序不能改变
那么在此情况,采样的顺序是由ADC本身的物理通道顺序决定的,
参考手册这么写的:
The order in which the channels are scanned is defined by the channel number
也就是ADC_IN1 是优先于 ADC_IN2采样(配置的前提下),具体的顺序如下
软件配置如下:
ADCCfg[ADC4_CFG].ADCHandler->Init.SamplingTimeCommon1 = ADC4_SAMPLE_TIME1;
ADCCfg[ADC4_CFG].ADCHandler->Init.SamplingTimeCommon2 = ADC4_SAMPLE_TIME2;
HAL_ADC_Init(ADCCfg[ADC4_CFG].ADCHandler);
sConfig.Rank = ADC4_RANK_CHANNEL_NUMBER;
sConfig.SamplingTime = ADC4_SAMPLINGTIME_COMMON_1;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
HAL_ADC_ConfigChannel(ADCCfg[ADC4_CFG].ADCHandler, &sConfig);
所有当使用这个模式采样的,有的时候得到的采样值并不是按照自己预期就要查看自己所选择那些通道在上图的顺序了。
2、采样时间有限选择
采样时间只有两个选择,也就是 ADC4_SAMPLINGTIME_COMMON_1 和 ADC4_SAMPLINGTIME_COMMON_2,
这两个采样时间又是由 SamplingTimeCommon1 和 SamplingTimeCommon2 配置的