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

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

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

配置 ADC 外设

本教程将引导您完成 ADC(模数转换器)外设的芯片模板配置。ADC 外设具有多种工作模式,且模式之间存在复杂的依赖和互斥关系,正确理解这些规则是配置 ADC 的关键。

概述

ADC 外设用于将模拟信号转换为数字信号。在芯片模板中配置 ADC 时,需要理解以下核心概念:

  • 扫描模式 (Scan Mode):是否依次转换多个通道
  • 连续模式 (Continuous Mode):是否连续循环转换
  • 断续模式 (Discontinuous Mode):是否分批转换
  • 常规转换 (Regular Conversion):常规通道组
  • 注入转换 (Injected Conversion):可中断常规转换的高优先级通道组

模式依赖规则

以下是 ADC 模式之间的核心互斥和依赖规则:

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

连续模式 (ContinuousConvMode) 与 断续模式 (DiscontinuousConvMode) 不能同时启用
连续模式断续模式是否允许
EnableEnable❌ 不允许
EnableDisable✅ 允许
DisableEnable✅ 允许
DisableDisable✅ 允许

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

启用断续模式 (DiscontinuousConvMode) 前,必须先启用扫描模式 (ScanConvMode)

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

当 NbrOfConversion > 1 时,必须启用扫描模式

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

当 NbrOfConversion <= 1 时,不需要扫描模式

参数配置

基础参数

// ADC 配置示例
ADC: {
  // 转换通道数
  NbrOfConversion: {
    label: 'Number Of Conversion',
    value: '1',
    type: 'number',
    min: 1,
    max: 16
  },

  // 扫描模式
  ScanConvMode: {
    label: 'Scan Conversion Mode',
    type: 'select',
    options: [
      {
        label: 'Enable',
        value: 'enable',
        disabled: '@get: $root.NbrOfConversion.value <= 1'  // 单通道禁用
      },
      {
        label: 'Disable',
        value: 'disable',
        disabled: '@get: $root.NbrOfConversion.value > 1'   // 多通道禁用
      }
    ]
  },

  // 连续模式
  ContinuousConvMode: {
    label: 'Continuous Conversion Mode',
    type: 'select',
    options: [
      {
        label: 'Enable',
        value: 'enable',
        disabled: "@get: $root.DiscontinuousConvMode.value === 'enable'"
      },
      {
        label: 'Disable',
        value: 'disable'
      }
    ]
  },

  // 断续模式
  DiscontinuousConvMode: {
    label: 'Discontinuous Conversion Mode',
    type: 'select',
    options: [
      {
        label: 'Enable',
        value: 'enable',
        disabled: "@get: $root.ContinuousConvMode.value === 'enable' || $root.ScanConvMode.value === 'disable'"
      },
      {
        label: 'Disable',
        value: 'disable'
      }
    ]
  }
}

参数可见性规则

某些参数只在特定条件下显示:

// 转换通道数 — 仅在启用常规转换时可见
NbrOfConversion: {
  visible: "@get: $root.EnableRegularConversions.value === 'enable'"
}

// 外部触发源 — 仅在启用常规转换时可见
ExternalTrigConv: {
  visible: "@get: $root.EnableRegularConversions.value === 'enable'"
}

// 断续通道数 — 仅在启用断续模式时可见
NbrOfDiscConversion: {
  visible: "@get: $root.DiscontinuousConvMode.value === 'enable'"
}

通道 Rank 配置

Rank 用于定义转换通道的顺序和属性:

// Rank 示例 — 第1个转换通道
RegularRank1: {
  visible: "@get: $root.EnableRegularConversions.value === 'enable' && $root.NbrOfConversion.value >= 1"
}

RegularRank2: {
  visible: "@get: $root.EnableRegularConversions.value === 'enable' && $root.NbrOfConversion.value >= 2"
}
// ... Rank3 到 Rank16 同理

常见配置场景

场景 1:单通道单次采集

最基础的 ADC 使用场景,只需采集一个通道:

参数值说明
EnableRegularConversionsenable启用常规转换
NbrOfConversion11 个通道
ScanConvModedisable单通道无需扫描
ContinuousConvModedisable单次采集
DiscontinuousConvModedisable不启用
RegularRank1Channel 0配置通道

场景 2:多通道扫描采集

需要依次采集多个通道时:

参数值说明
EnableRegularConversionsenable启用常规转换
NbrOfConversion33 个通道
ScanConvModeenable必须启用扫描模式
ContinuousConvModedisable单次扫描
DiscontinuousConvModedisable不启用
RegularRank1~33 个通道配置分别配置

场景 3:连续转换模式

需要持续不断地采集数据:

参数值说明
NbrOfConversion11 个通道
ScanConvModedisable单通道
ContinuousConvModeenable启用连续转换
DiscontinuousConvModedisable与连续模式互斥

场景 4:断续扫描模式

多个通道,但分批转换:

参数值说明
NbrOfConversion44 个通道
ScanConvModeenable必须启用扫描
ContinuousConvModedisable与断续互斥
DiscontinuousConvModeenable启用断续模式
NbrOfDiscConversion2每次转换 2 个通道
ScanConvModeenable必须启用

模拟看门狗配置

模拟看门狗用于监控 ADC 转换结果是否在预设的阈值范围内:

// 看门狗使能
EnableWatchDog: {
  label: 'Enable WatchDog',
  value: false,
  type: 'checkbox'
}

// 看门狗模式
WatchdogMode: {
  label: 'WatchDog Mode',
  type: 'select',
  visible: '@get: $root.EnableWatchDog.value === true',
  options: [
    { label: 'Single Channel', value: 'single' },
    { label: 'All Channels', value: 'all' }
  ]
}

// 高阈值
HighThreshold: {
  label: 'High Threshold',
  type: 'number',
  visible: '@get: $root.EnableWatchDog.value === true',
  value: '4095'
}

// 低阈值
LowThreshold: {
  label: 'Low Threshold',
  type: 'number',
  visible: '@get: $root.EnableWatchDog.value === true',
  value: '0'
}

注入转换配置

注入转换提供高优先级的通道组,可中断常规转换:

// 注入转换使能
EnableInjectedConversions: {
  label: 'Enable Injected Conversions',
  value: false,
  type: 'checkbox'
}

// 注入通道数
InjectedNbrOfConversion: {
  label: 'Injected Number Of Conversion',
  type: 'number',
  visible: "@get: $root.EnableInjectedConversions.value === 'enable'",
  min: 1,
  max: 4
}

// 注入转换模式
InjectedConversionMode: {
  label: 'Injected Conversion Mode',
  type: 'select',
  visible: "@get: $root.EnableInjectedConversions.value === 'enable' && $root.InjectedNbrOfConversion.value > 0"
}

双 ADC 模式

注意

双 ADC 模式仅在芯片支持多个 ADC 实例时可用(如 GD32F103 的 ADC0 和 ADC1)。ADC2 不支持双 ADC 模式。

CommonMode: {
  label: 'Dual ADC Mode',
  type: 'select',
  visible: "@get: $root.$name === 'ADC0' || $root.$name === 'ADC1'",
  disabled: "@get: $root.$name === 'ADC1'",  // ADC1 跟随 ADC0 配置
  options: [
    {
      label: 'Independent',
      value: 'independent',
      visible: '@get: ADC0.enabled() && ADC1.enabled()'
    },
    // ... 其他双 ADC 模式选项
  ]
}

注意事项

  1. 模式互斥验证:在编写初始化脚本时,建议添加配置验证逻辑,确保不存在矛盾的配置组合
  2. Rank 数量匹配:Rank 的可见数量应与 NbrOfConversion 一致,多余的 Rank 应隐藏
  3. 看门狗阈值:高阈值必须大于低阈值,建议在代码中添加范围检查
  4. 注入转换优先级:注入转换会中断常规转换,需注意时序要求

下一步

  • 继续学习 配置通信外设
  • 查阅 ADC 开发参考 — 查看完整的模式规则验证表
Prev
配置 GPIO 外设
Next
配置通信外设