From feccee151fe4eb0b49681138f4a8250922dcf151 Mon Sep 17 00:00:00 2001 From: dufresne <1625800082@qq.com> Date: Sat, 13 Sep 2025 18:15:31 +0800 Subject: [PATCH] =?UTF-8?q?readme=E6=B7=BB=E5=8A=A0=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- drivers/drv_adc.c | 2 +- drivers/readme.md | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/drv_adc.c b/drivers/drv_adc.c index 3c84776..7cc0c72 100644 --- a/drivers/drv_adc.c +++ b/drivers/drv_adc.c @@ -53,10 +53,10 @@ void adc_config(void) // 打开扫描模式 adc_special_function_config(ADCX, ADC_SCAN_MODE, ENABLE); + // 禁止连续模式 -> 单次转换模式 adc_special_function_config(ADCX, ADC_CONTINUOUS_MODE, ENABLE); - // 使能外部触发:这里使用软件触发,所以先禁用硬件触发 adc_external_trigger_config(ADCX, ADC_ROUTINE_CHANNEL, DISABLE); diff --git a/drivers/readme.md b/drivers/readme.md index 7f72fa0..4aafc4b 100644 --- a/drivers/readme.md +++ b/drivers/readme.md @@ -183,3 +183,44 @@ C1 -->|读取注入组
有专用寄存器| A2 * **What to do** (DMA/中断):定义了结果数据的处理方式。 三者协同工作,共同构成了一个高效、可靠且响应及时的数据采集系统。 + + +在GD32微控制器的ADC驱动库中,`adc_routine_channel_config`函数用于配置规则组(常规序列)的通道序列。 + +### 🧾 函数原型 + +在GD32的库函数中,该函数的原型通常类似于: + +```c +void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t channel, uint32_t sample_time); +``` + +### 📊 参数详解 + +为了更直观地理解第二和第三个参数的区别与联系,请看下表: + +| 特性 | 第二个参数 (`rank`) | 第三个参数 (`channel`) | +| :------------------- | :------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------- | +| **参数含义** | 指定**转换顺序中的序号**(即该通道在规则组序列中的**位置**) | 指定**具体的ADC物理通道**(即连接模拟信号的**输入源**) | +| **参数目的** | 决定**多个通道的转换先后顺序** | 决定**转换哪个引脚或内部信号源** | +| **取值范围** | 通常从 `0`开始,最大取决于规则组通道总数(例如,16个通道则是 `0`到 `15`) | 取决于MCU型号,例如 `ADC_CHANNEL_0`, `ADC_CHANNEL_1`, ..., `ADC_CHANNEL_17`(内部通道) | +| **配置寄存器** | `ADC_RSQ2`, `ADC_RSQ1`, `ADC_RSQ0` (规则序列寄存器) | 与 `rank`共同配置规则序列寄存器 | +| **示例说明** | `rank = 0`表示该通道是序列中**第一个**被转换的 | `channel = ADC_CHANNEL_5`表示选择MCU的**特定ADC引脚**(如PA5) | + +### ⚠️ 注意事项 + +1. **`rank`值与实际转换顺序**:`rank`参数通常从 `0`开始递增,表示转换的先后顺序。**`rank`值越小,转换顺序越靠前**。例如,`rank = 0`的通道最先转换,`rank = 1`的通道其次,以此类推。 +2. **通道总数设置**:在配置所有通道的 `rank`之前,务必先通过 `adc_channel_length_config(adc_periph, ADC_ROUTINE_CHANNEL, n)`函数正确设置规则组的总通道数 `n`。 +3. **避免重复或越界**:确保不同的 `rank`值指向不同的序列位置,并且所有 `rank`值都小于总通道数 `n`。同时,确保选择的物理 `channel`在MCU实际存在的范围内。 +4. **采样时间**:此函数的第四个参数 `sample_time`(采样时间)同样重要,它决定了ADC对输入信号采样的持续时间,需根据信号源阻抗进行调整。 + +### 💡 总结 + +你可以这样理解: + +* **`rank`(第二个参数)是“排队号”**:决定通道转换的**顺序**。 +* **`channel`(第三个参数)是“身份证”**:确定转换的**具体是哪个物理通道**。 + +函数的作用就是将特定的物理通道(`channel`)安排到规则组转换序列中的指定位置(`rank`)上。 + +希望这些信息能帮助你更好地理解和使用GD32的ADC功能!