1. STM32 ADC多通道转换的核心原理
第一次用STM32做多通道ADC采集时,我对着数据手册发呆了半小时——规则通道、注入通道、扫描模式这些概念像天书一样。后来在工控项目里被逼着啃透了这块,才发现其实掌握几个关键点就能玩转多通道采集。
电压输入范围就像ADC的"胃口",STM32的ADC默认能吃下0-3.3V的电压信号。这个范围由VREF+和VREF-引脚决定,常规接法是VREF-接地,VREF+接3.3V。有次我偷懒没接VREF+,结果采集的数据全飘了,血的教训告诉我们这两个引脚必须接好。
通道选择比想象中复杂得多。STM32F103的ADC1有16个外部通道加2个内部通道(温度传感器和内部参考电压)。这些通道分为规则组和注入组,规则组像排队买奶茶的队伍,注入组就像VIP通道可以插队。我在电机控制项目中就用注入通道来紧急采集过流信号,确实能及时打断常规采集流程。
最让人头大的转换顺序配置,其实就靠三个寄存器搞定:
- SQR1控制总通道数(SQ13-SQ16)
- SQR2控制SQ7-SQ12
- SQR3控制SQ1-SQ6
比如要按顺序采集通道5、11、8,配置代码如下:
c复制ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 3, ADC_SampleTime_55Cycles5);
扫描模式是多通道采集的灵魂。开启后ADC会自动按顺序扫描所有设置的通道,配合连续转换模式就能实现循环采集。不过要注意DMA和中断的区别——我最早用中断处理多通道数据,结果漏数据严重,后来改用DMA才稳定。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中断处理机制的实战技巧
ADC中断就像外卖小哥的电话,数据准备好了就通知你来取。但处理不当就会像我被投诉那样——要么漏接电话,要么取餐太慢。
中断类型有三种需要分清:
- 规则通道转换完成(EOC)
- 注入通道转换完成(JEOC)
