McuStudioMcuStudio
指南
开发者
组件
API
  • 版本发布
指南
开发者
组件
API
  • 版本发布
  • 概述
  • 快速开始
  • 添加厂商的芯片到平台
  • 芯片模板教程

    • 芯片模板开发教程
    • 创建引脚封装
    • 配置时钟树
    • 配置 GPIO 外设
    • 配置 ADC 外设
    • 配置通信外设
    • 配置 TIM 外设
  • 开发参考

    • 框架与规则
    • 芯片包结构
    • 芯片描述
    • 芯片包配置
    • 引脚配置详解
    • 外设配置详解
    • 外设元素参考
    • GPIO 开发参考
    • ADC 开发参考
    • TIM 开发参考
    • 固件库开发指南
    • 版本管理机制
    • Define 映射指南
    • 多语言(i18n)

ADC 开发参考

本文档深入介绍 ADC 外设的模式规则、参数依赖关系和配置验证方法,是 ADC 配置教程 的进阶补充。

模式互斥规则总览

规则 R1:连续转换与断续转换互斥

连续模式断续模式允许?说明
EnableEnable❌硬件不支持同时启用
EnableDisable✅连续扫描所有通道
DisableEnable✅分批次转换
DisableDisable✅单次转换
// 代码中的实现
ContinuousConvMode: {
  options: [{
    label: 'Enable',
    value: 'enable',
    disabled: "@get: $root.DiscontinuousConvMode.value === 'enable'"
  }]
}

DiscontinuousConvMode: {
  options: [{
    label: 'Enable',
    value: 'enable',
    disabled: "@get: $root.ContinuousConvMode.value === 'enable' || " +
              "$root.ScanConvMode.value === 'disable'"
  }]
}

规则 R2:断续转换依赖扫描模式

断续模式 → 需要扫描模式先启用

硬件原因:断续模式每次只转换 N 个通道,然后暂停等待下一次触发。必须通过扫描模式来依次处理多个规则通道。

规则 R3:多通道必须启用扫描模式

NbrOfConversion > 1 → ScanConvMode 必须为 Enable

硬件原因:当配置了多个转换通道时,必须通过扫描模式依次转换每个通道,否则只能转换第一个通道。

规则 R4:单通道不能启用扫描模式

NbrOfConversion <= 1 → ScanConvMode 只能为 Disable

硬件原因:单个通道不需要扫描,可以直接转换。

参数依赖关系表

参数依赖参数关系
ScanConvMode.EnableNbrOfConversion > 1多通道必须启用
ScanConvMode.DisableNbrOfConversion <= 1单通道只能禁用
ContinuousConvMode.EnableDiscontinuousConvMode = disable互斥
DiscontinuousConvMode.EnableScanConvMode = enable依赖扫描模式
DiscontinuousConvMode.EnableContinuousConvMode = disable互斥
NbrOfDiscConversionDiscontinuousConvMode = enable仅在断续模式显示
ExternalTrigConvEnableRegularConversions = enable仅在常规转换显示
AnalogWatchDogChannelWatchdogMode = single仅在单通道看门狗显示

可见性规则汇总

// 仅在启用常规转换时可见
NbrOfConversion:   visible: EnableRegularConversions === 'enable'
ExternalTrigConv:  visible: EnableRegularConversions === 'enable'
All RegularRanks:  visible: EnableRegularConversions === 'enable' && N >= rank

// 仅在启用注入转换时可见
InjectedNbrOfConversion: visible: EnableInjectedConversions === 'enable'
InjectedConversionMode:  visible: EnableInjectedConversions === 'enable' && Nbr > 0
All InjectedRanks:       visible: EnableInjectedConversions === 'enable' && N >= rank

// 仅在启用断续模式时可见
NbrOfDiscConversion: visible: DiscontinuousConvMode === 'enable'

// 仅在启用看门狗时可见
WatchdogMode:        visible: EnableWatchDog === true
HighThreshold:       visible: EnableWatchDog === true
LowThreshold:        visible: EnableWatchDog === true
AnalogWatchDogChannel: visible: EnableWatchDog === true && WatchdogMode === single

// 双 ADC 模式
CommonMode: visible: $name === 'ADC0' || $name === 'ADC1'

常见配置场景详解

场景 1:单通道单次采集

适用场景:只需测量一个模拟信号,如温度传感器

参数值UI 行为
EnableRegularConversionsenable—
NbrOfConversion1ScanConvMode.Enable 禁用(R4)
ScanConvModedisable自动限制(R4)
ContinuousConvModedisable—
DiscontinuousConvModedisable自动禁用(R2)
RegularRank1Channel X可见
RegularRank2-16—不可见

场景 2:多通道扫描采集

适用场景:依次测量多个模拟信号

参数值UI 行为
EnableRegularConversionsenable—
NbrOfConversion3ScanConvMode.Disable 禁用(R3)
ScanConvModeenable必须启用(R3)
ContinuousConvModedisable—
DiscontinuousConvModedisableDiscontinuousConvMode.Enable 可选
RegularRank1-3独立通道配置可见
RegularRank4-16—不可见

场景 3:连续转换模式

适用场景:持续监控模拟信号

参数值UI 行为
NbrOfConversion1单通道
ScanConvModedisableR4 限制
ContinuousConvModeenableDiscontinuousConvMode.Enable 禁用(R1)
DiscontinuousConvModedisable与连续模式互斥(R1)

场景 4:断续扫描模式

适用场景:多通道但分批转换,减少单次转换时间

参数值UI 行为
NbrOfConversion4多通道
ScanConvModeenable必须启用(R3)
ContinuousConvModedisable与断续互斥(R1)
DiscontinuousConvModeenableNbrOfDiscConversion 可见
NbrOfDiscConversion2每次转换 2 个通道

双 ADC 模式

适用范围

双 ADC 模式仅在部分芯片上支持。以 GD32F103 为例,只有 ADC0 和 ADC1 支持双 ADC 模式,ADC2 不支持。

CommonMode: {
  visible: "@get: $root.$name === 'ADC0' || $root.$name === 'ADC1'",
  disabled: "@get: $root.$name === 'ADC1'",  // ADC1 配置跟随 ADC0
  options: [
    { label: 'Independent', value: 'independent' },
    { label: 'Regular Simultaneous', value: 'reg_simult' },
    { label: 'Regular Interleaved', value: 'reg_interleaved' },
    { label: 'Injected Simultaneous', value: 'inj_simult' }
    // 这些选项仅在两个 ADC 都使能时可见
    // visible: '@get: ADC0.enabled() && ADC1.enabled()'
  ]
}

验证最佳实践

建议 1:添加用户友好的提示

// 在参数被禁用时显示原因
ScanConvMode: {
  disabled: '@get: $root.NbrOfConversion.value <= 1',
  hint: '单通道转换不需要扫描模式'
}

建议 2:参数联动更新

// 当 NbrOfConversion 从 1 变为 3 时,自动设置 ScanConvMode = enable
onChange: function(newValue, oldValue) {
  if (newValue > 1 && this.ScanConvMode === 'disable') {
    this.ScanConvMode = 'enable'
  }
}

建议 3:配置验证

// 在代码生成前检查配置有效性
function validateADCConfig(config) {
  const errors = []

  // R1 检查
  if (config.Continuous === 'enable' && config.Discontinuous === 'enable') {
    errors.push('连续模式和断续模式不能同时启用')
  }

  // R2 检查
  if (config.Discontinuous === 'enable' && config.Scan !== 'enable') {
    errors.push('断续模式需要先启用扫描模式')
  }

  // R3 检查
  if (config.NbrOfConversion > 1 && config.Scan !== 'enable') {
    errors.push('多通道采集必须启用扫描模式')
  }

  return errors
}
Prev
GPIO 开发参考
Next
TIM 开发参考