代码示例:
假设使用一个定时器或主循环不断切换通道进行采样:
c
复制代码
// 配置 ADC 初始化
ADC_InitTypeDef ADC_InitStruct;
ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b; // 12 位分辨率
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐
ADC_InitStruct.ADC_ScanConvMode = DISABLE; // 禁用扫描模式
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 软件触发
ADC_Init(&ADC_InitStruct);
// 启用 ADC
ADC_Cmd(ENABLE);
while (1) {
// 切换到通道 0
ADC_RegularChannelConfig(ADC_Channel_0, 1, ADC_SampleTime_15Cycles);
ADC_SoftwareStartConvCmd(ENABLE); // 开始转换
while (ADC_GetFlagStatus(ADC_FLAG_EOC) == RESET); // 等待转换完成
uint16_t data0 = ADC_GetConversionValue(); // 读取数据
// 切换到通道 1
ADC_RegularChannelConfig(ADC_Channel_1, 1, ADC_SampleTime_15Cycles);
ADC_SoftwareStartConvCmd(ENABLE); // 开始转换
while (ADC_GetFlagStatus(ADC_FLAG_EOC) == RESET);
uint16_t data1 = ADC_GetConversionValue(); // 读取数据
}
|