需求:拟用ADC1的IN1~7进行多通道采样,其中IN7通过多路复用开关再扩展七个通道,思路是在单个ADC通道采样中断处理中切换ADC采采样通道。编程实现:
- Init.NbrOfConversion = 1;
- Init.EOCSelection =ADC_EOC_SINGLE_CONV;
复制代码
- void CfgAdcSampleChannel(ADC_HandleTypeDef *pAdcHandleCfg,UINT32 sample_channel,UINT32 rank)
- {
- ADC_ChannelConfTypeDef sConfig = {0};
- sConfig.Channel = sample_channel; // 输入通道号
- sConfig.Rank = ADC_REGULAR_RANK_1; // ADC常规转换组里的编号
- sConfig.SamplingTime = ADC_SAMPLETIME_391CYCLES; // 采样时间,单位为ADCCLK周期数
- sConfig.SingleDiff = ADC_SINGLE_ENDED; // 选择单端采样
- sConfig.OffsetNumber = ADC_OFFSET_NONE;
- sConfig.Offset = 0;
- HAL_ADC_ConfigChannel(pAdcHandleCfg, &sConfig);
- }
复制代码
问题:
1.如何实现多通道的ADC采样频率不同,例如IN1->IN2->IN3->IN1-IN4->IN5,其中IN1采样频率为其他通道的2倍;
2.多通道单次采样是否可以如上面代码所示,在ADC采样中断中仅仅修改Channel 的参数,而rank保持不变?
3.在ADC采样中断处理中是否可以重新配置ADC采样通道及配置?
|