GD32F470入门教程(九)ADC

20k 词

ADC

简介

MCU 片上集成了 12 位逐次逼近式模数转换器模块(ADC),可以采样来自于 16 个外部通道和 2 个内部通道和一个电池电压(VBAT)通道的模拟信号。这 19 个 ADC 采样通道都支持多种运行模式,采样转换后,转换结果可以按照最低有效位对齐或最高效位对齐的方式保存在相应的数据寄存器中。片上的硬件过采样机制可以通过减少来自 MCU 的相关计算负担来提高性能。

主要特征

image-20260227214139078

image-20260227214150987

具体ADC原理,支持的功能可详看用户手册266页

代码实现:单通道ADC采样(查询模式)

对于初学者来说,最简单的ADC使用方式是软件触发 + 查询模式。就像是你每隔一段时间去问ADC:“你转换好了吗?”,如果好了就读取数据。

下面我们以使用 ADC0通道10 (PC0引脚) 为例,演示如何读取电压值。

1. 初始化步骤详解

配置ADC通常需要以下几个步骤,每一步都必不可少:

  1. 开启时钟:GPIO端口的时钟和ADC外设的时钟都要打开。
  2. 配置GPIO:将采集引脚配置为模拟输入模式GPIO_MODE_ANALOG),这是ADC专用的模式,防止数字信号干扰。
  3. 配置ADC时钟:ADC需要一个特定的工作时钟,GD32F470的ADC时钟是挂载在APB2总线上的,需要分频,保证ADC时钟频率在规格范围内(通常不超过40MHz,建议更低以保证精度)。
  4. 配置ADC参数
    • 工作模式:独立模式(只用一个ADC)。
    • 数据对齐:右对齐(比如12位数据,低12位有效,方便直接读取数值)。
    • 分辨率:12位(0~4095)。
  5. 配置规则通道:指定我们要读的是哪个通道,以及采样的顺序和采样时间。
  6. 校准:上电后进行一次自校准,消除误差。

2. 初始化代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "gd32f4xx.h"
#include "systick.h"

void adc_config(void)
{
/* 1. 开启时钟 */
rcu_periph_clock_enable(RCU_GPIOC); // 开启PC端口时钟
rcu_periph_clock_enable(RCU_ADC0); // 开启ADC0时钟

/* 配置ADC时钟分频 */
/* APB2时钟通常较高,ADC时钟需要分频。这里设为8分频
假设APB2是100MHz,8分频后是12.5MHz,符合ADC要求 */
adc_clock_config(ADC_ADCCK_PCLK2_DIV8);

/* 2. 配置GPIO为模拟输入模式 */
/* PC0 对应 ADC0_CH10 */
gpio_mode_set(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0);

/* 3. 复位ADC设置(是个好习惯) */
adc_deinit();

/* 4. 配置ADC基本参数 */
/* 独立模式:只使用ADC0,不和ADC1/2配合 */
adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT);

/* 数据右对齐:方便直接读取uint16_t数值 */
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);

/* 单次转换模式:触发一次,转换一次,然后停止。适合手动读取 */
/* 如果想让它一直自动转,使用 ADC_CHANNEL_LENGTH_1 */
adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, DISABLE); // 关闭连续模式
adc_special_function_config(ADC0, ADC_SCAN_MODE, DISABLE); // 关闭扫描模式(我们只读一个通道)

/* 分辨率:12位 */
adc_resolution_config(ADC0, ADC_RESOLUTION_12B);

/* 5. 配置规则通道 */
/* 配置ADC0的规则通道组,长度为1(只转换1个序列) */
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1);

/* 配置具体的通道:ADC0, 第0个转换序列, 通道10(PC0), 采样时间480个周期 */
/* 采样时间越长,数据越稳定,但速度越慢 */
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_10, ADC_SAMPLETIME_480);

/* 6. 配置触发源 */
/* 使用软件触发,不需要外部引脚或定时器触发 */
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);

/* 7. 使能ADC */
adc_enable(ADC0);
delay_1ms(1); // 等待ADC稳定

/* 8. ADC校准 */
adc_calibration_enable(ADC0);
/* 等待校准结束 */
// 注意:GD32F4系列部分型号可能自动处理,但标准流程通常包含检查校准位
}

3. 读取数据的函数

因为我们配置的是单次模式,所以每次读取都需要手动触发一次转换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uint16_t adc_channel_sample(void)
{
/* 1. 软件触发ADC开始转换 */
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);

/* 2. 等待转换结束标志位 (EOC - End Of Conversion) */
/* 只要标志位是 RESET (0),就一直死循环等待 */
while(RESET == adc_flag_get(ADC0, ADC_FLAG_EOC));

/* 3. 清除结束标志位(读取数据寄存器也会自动清除) */
adc_flag_clear(ADC0, ADC_FLAG_EOC);

/* 4. 返回转换结果 */
/* 读取常规数据寄存器 */
return (uint16_t)adc_regular_data_read(ADC0);
}

4. 主函数调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "gd32f4xx.h"
#include "systick.h"
#include "stdio.h" // 假设已经重定向了 printf

/* 假设已经写好了串口打印函数 */

int main(void)
{
float voltage;
uint16_t adc_value;

systick_config();
// 串口初始化...

adc_config();

while(1)
{
/* 读取 ADC 值 (0 - 4095) */
adc_value = adc_channel_sample();

/* 转换为电压值 */
/* 假设参考电压 Vref+ 是 3.3V */
/* 电压 = (ADC值 / 4095) * 3.3 */
voltage = (float)adc_value / 4095 * 3.3f;

printf("ADC Value: %d, Voltage: %.3f V\r\n", adc_value, voltage);

delay_1ms(500); // 每500ms读取一次
}
}

ADC库函数

库函数名称 库函数描述
adc_deinit 复位 ADCx 外设
adc_clock_config ADC 时钟配置
adc_special_function_config 使能或禁能 ADC 特殊功能
adc_data_alignment_config 配置 ADC 数据对齐方式
adc_enable 使能 ADCx 外设
adc_disable 禁能 ADCx 外设
adc_calibration_enable ADCx 校准复位
adc_channel_16_to_18 配置内部温度传感器采集通道,Vrefint 电压采集通道通道,VBAT 电压采集通道
adc_resolution_config 配置 ADCx 分辨率
adc_oversample_mode_config 配置 ADCx 过采样模式
adc_oversample_mode_enable 使能 ADCx 过采样
adc_oversample_mode_disable 禁能 ADCx 过采样
adc_dma_mode_enable ADCx DMA 请求使能
adc_dma_mode_disable ADCx DMA 请求禁能
adc_dma_request_after_last_disable DMA 机制在 DMA 控制器的传输结束信号之后失能
adc_discontinuous_mode_config 配置 ADC 间断模式
adc_channel_length_config 配置规则通道组或注入通道组的长度
adc_regular_channel_config 配置 ADC 规则通道组
adc_inserted_channel_config 配置 ADC 注入通道组
adc_inserted_channel_offset_config 配置 ADC 注入通道组数据偏移值
adc_external_trigger_source_config 配置 ADC 外部触发源
adc_external_trigger_config 配置 ADC 外部触发
adc_software_trigger_enable ADC 软件触发使能
adc_end_of_conversion_config 配置规则组转换结束模式
adc_regular_data_read 读 ADC 规则组数据寄存器
adc_inserted_data_read 读 ADC 注入组数据寄存器
adc_watchdog_single_channel_disable 配置 ADC 模拟看门狗单通道无效
adc_watchdog_group_channel_enable 配置 ADC 模拟看门狗在通道组有效
adc_watchdog_disable ADC 模拟看门狗禁能
adc_watchdog_threshold_config 配置 ADC 模拟看门狗阈值
adc_flag_get 获取 ADC 标志位
adc_flag_clear 清除 ADC 标志位
adc_regular_software_startconv_flag_get 获取 ADC 规则通道组软件触发转换开始位
adc_inserted_software_startconv_flag_get 获取 ADC 注入通道组软件触发转换开始位
adc_interrupt_flag_get 获取 ADC 中断标志位
adc_interrupt_flag_clear 清除 ADC 中断标志位
adc_interrupt_enable ADC 中断使能
adc_interrupt_disable ADC 中断禁能
adc_sync_mode_config ADC 同步模式配置
adc_sync_delay_config 配置 ADC 同步模式两次采样之间的延时
adc_sync_dma_request_after_last_enable 当 SYNCDMA 不为 00 时,根据 SYNCDMA 位来产生 DMA 请求
adc_sync_dma_request_after_last_disable 当检测到来自 DMA 控制器的传输结束信号后,DMA 机制失能
adc_sync_regular_data_read ADC 同步模式规则数据读取

1. adc_deinit

  • 函数原型void adc_deinit(uint32_t adc_periph);
  • 功能描述:复位ADCx外设。
  • 先决条件:无
  • 被调用函数rcu_periph_reset_enablercu_periph_reset_disable
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

2. adc_clock_config

  • 函数原型void adc_clock_config(uint32_t pscaler);
  • 功能描述:配置ADC时钟。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • pscaler:预分频器,可选值:
      • ADC_ADCCK_PCLK2_DIV2:PCLK2时钟2分频
      • ADC_ADCCK_PCLK2_DIV4:PCLK2时钟4分频
      • ADC_ADCCK_PCLK2_DIV6:PCLK2时钟6分频
      • ADC_ADCCK_PCLK2_DIV8:PCLK2时钟8分频
      • ADC_ADCCK_HCLK_DIV4:HCLK时钟4分频
      • ADC_ADCCK_HCLK_DIV6:HCLK时钟6分频
      • ADC_ADCCK_HCLK_DIV8:HCLK时钟8分频
      • ADC_ADCCK_HCLK_DIV10:HCLK时钟10分频
      • ADC_ADCCK_HCLK_DIV12:HCLK时钟12分频
      • ADC_ADCCK_HCLK_DIV16:HCLK时钟16分频
      • ADC_ADCCK_HCLK_DIV20:HCLK时钟20分频
  • 输出参数:无
  • 返回值:无

3. adc_special_function_config

  • 函数原型void adc_special_function_config(uint32_t adc_periph, uint32_t function, ControlStatus newvalue);
  • 功能描述:使能或禁能ADC特殊功能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • function:功能配置,可选值:
      • ADC_SCAN_MODE:扫描模式选择
      • ADC_INSERTED_AUTO:注入红自动转换
      • ADC_CONTINUOUS_MODE:连续模式选择
    • newvalue:功能使能禁能,可选值:
      • ENABLE:使能
      • DISABLE:禁能
  • 输出参数:无
  • 返回值:无

4. adc_data_alignment_config

  • 函数原型void adc_data_alignment_config(uint32_t adc_periph, uint32_t data_alignment);
  • 功能描述:配置ADC数据对齐方式。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • data_alignment:数据对齐方式选择,可选值:
      • ADC_DATA_ALIGN_RIGHT:LSB对齐
      • ADC_DATA_ALIGN_LEFT:MSB对齐
  • 输出参数:无
  • 返回值:无

5. adc_enable

  • 函数原型void adc_enable(uint32_t adc_periph);
  • 功能描述:使能ADCx外设。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

6. adc_disable

  • 函数原型void adc_disable(uint32_t adc_periph);
  • 功能描述:禁能ADCx外设。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

7. adc_calibration_enable

  • 函数原型void adc_calibration_enable(uint32_t adc_periph);
  • 功能描述:ADCx校准复位。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

8. adc_channel_16_to_18

  • 函数原型void adc_channel_16_to_18(uint32_t function, ControlStatus newvalue);
  • 功能描述:配置内部温度传感器采集通道,Vrefint电压采集通道,VBAT电压采集通道。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • function:选择被配置的内部通道,可选值:
      • ADC_TEMP_SENSOR_CHANNEL:选择内部通道16(温度传感器)
      • ADC_VREFINT_CHANNEL:选择内部通道17(Vrefint电压)
      • ADC_VBAT_CHANNEL:选择内部通道18(VBAT电压)
    • newvalue:功能使能禁能,可选值:
      • ENABLE:使能
      • DISABLE:禁能
  • 输出参数:无
  • 返回值:无

9. adc_resolution_config

  • 函数原型void adc_resolution_config(uint32_t adc_periph, uint32_t resolution);
  • 功能描述:配置ADCx分辨率。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • resolution:ADC分辨率,可选值:
      • ADC_RESOLUTION_12B:12位分辨率
      • ADC_RESOLUTION_10B:10位分辨率
      • ADC_RESOLUTION_8B:8位分辨率
      • ADC_RESOLUTION_6B:6位分辨率
  • 输出参数:无
  • 返回值:无

10. adc_oversample_mode_config

  • 函数原型void adc_oversample_mode_config(uint32_t adc_periph, uint32_t mode, uint16_t shift);
  • 功能描述:配置ADCx过采样模式。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • mode:ADC过采样模式,可选值:
      • ADC_OVERSAMPLING_MODE_2X:2倍过采样
      • ADC_OVERSAMPLING_MODE_4X:4倍过采样
      • ADC_OVERSAMPLING_MODE_8X:8倍过采样
      • ADC_OVERSAMPLING_MODE_16X:16倍过采样
      • ADC_OVERSAMPLING_MODE_32X:32倍过采样
      • ADC_OVERSAMPLING_MODE_64X:64倍过采样
      • ADC_OVERSAMPLING_MODE_128X:128倍过采样
      • ADC_OVERSAMPLING_MODE_256X:256倍过采样
    • shift:ADC过采样移位,可选值:
      • ADC_OVERSAMPLING_SHIFT_1B:1位
      • ADC_OVERSAMPLING_SHIFT_2B:2位
      • ADC_OVERSAMPLING_SHIFT_3B:3位
      • ADC_OVERSAMPLING_SHIFT_4B:4位
      • ADC_OVERSAMPLING_SHIFT_5B:5位
      • ADC_OVERSAMPLING_SHIFT_6B:6位
      • ADC_OVERSAMPLING_SHIFT_7B:7位
      • ADC_OVERSAMPLING_SHIFT_8B:8位
  • 输出参数:无
  • 返回值:无

11. adc_oversample_mode_enable

  • 函数原型void adc_oversample_mode_enable(uint32_t adc_periph);
  • 功能描述:使能ADCx过采样。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

12. adc_oversample_mode_disable

  • 函数原型void adc_oversample_mode_disable(uint32_t adc_periph);
  • 功能描述:禁能ADCx过采样。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

13. adc_dma_mode_enable

  • 函数原型void adc_dma_mode_enable(uint32_t adc_periph);
  • 功能描述:ADCx DMA请求使能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

14. adc_dma_mode_disable

  • 函数原型void adc_dma_mode_disable(uint32_t adc_periph);
  • 功能描述:ADCx DMA请求禁能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

15. adc_dma_request_after_last_enable

  • 函数原型void adc_dma_request_after_last_enable(uint32_t adc_periph);
  • 功能描述:当DMA=1时,在每个规则通道转换结束后提出一个DMA请求。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

16. adc_dma_request_after_last_disable

  • 函数原型void adc_dma_request_after_last_disable(uint32_t adc_periph);
  • 功能描述:DMA机制在DMA控制器的传输结束信号之后失能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

17. adc_discontinuous_mode_config

  • 函数原型void adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length);
  • 功能描述:配置ADC间断模式。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_channel_group:通道组选择,可选值:
      • ADC_REGULAR_CHANNEL:规则通道组
      • ADC_INSERTED_CHANNEL:注入通道组
    • length:间断模式下的转换数目,规则通道组取值为1-8,注入通道组取值无意义
  • 输出参数:无
  • 返回值:无

18. adc_channel_length_config

  • 函数原型void adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length);
  • 功能描述:配置规则通道组或注入通道组的长度。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_channel_group:通道组选择,可选值:
      • ADC_REGULAR_CHANNEL:规则通道组
      • ADC_INSERTED_CHANNEL:注入通道组
    • length:通道长度,规则通道组为1-16,注入通道组为1-4
  • 输出参数:无
  • 返回值:无

19. adc_regular_channel_config

  • 函数原型void adc_regular_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time);
  • 功能描述:配置ADC规则通道组。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • rank:规则通道序列,取值范围0-15
    • adc_channel:ADC通道选择,通道x(x=0-18),只有ADC0可使用x=16,18
    • sample_time:采样时间,可选值:
      • ADC_SAMPLETIME_3CYCLE:3周期
      • ADC_SAMPLETIME_15CYCLES:15周期
      • ADC_SAMPLETIME_28CYCLES:28周期
      • ADC_SAMPLETIME_56CYCLES:56周期
      • ADC_SAMPLETIME_84CYCLES:84周期
      • ADC_SAMPLETIME_112CYCLES:112周期
      • ADC_SAMPLETIME_144CYCLES:144周期
      • ADC_SAMPLETIME_480CYCLES:480周期
  • 输出参数:无
  • 返回值:无

20. adc_inserted_channel_config

  • 函数原型void adc_inserted_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time);
  • 功能描述:配置ADC注入通道组。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • rank:注入通道序列,取值范围0-3
    • adc_channel:ADC通道选择,通道x(x=0-18),只有ADC0可使用x=16,18
    • sample_time:采样时间,可选值:
      • ADC_SAMPLETIME_3CYCLE:3周期
      • ADC_SAMPLETIME_15CYCLES:15周期
      • ADC_SAMPLETIME_28CYCLES:28周期
      • ADC_SAMPLETIME_56CYCLES:56周期
      • ADC_SAMPLETIME_84CYCLES:84周期
      • ADC_SAMPLETIME_112CYCLES:112周期
      • ADC_SAMPLETIME_144CYCLES:144周期
      • ADC_SAMPLETIME_480CYCLES:480周期
  • 输出参数:无
  • 返回值:无

21. adc_inserted_channel_offset_config

  • 函数原型void adc_inserted_channel_offset_config(uint32_t adc_periph, uint8_t inserted_channel, uint16_t offset);
  • 功能描述:配置ADC注入通道组数据偏移值。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • inserted_channel:注入通道选择,可选值ADC_INSERTED_CHANNEL_0ADC_INSERTED_CHANNEL_1ADC_INSERTED_CHANNEL_2ADC_INSERTED_CHANNEL_3(x=0,1,2,3)
    • offset:数据偏移值,取值范围0-0xFF
  • 输出参数:无
  • 返回值:无

22. adc_external_trigger_source_config

  • 函数原型void adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t trigger_source);
  • 功能描述:配置ADC外部触发源。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_channel_group:通道组选择,可选值:
      • ADC_REGULAR_CHANNEL:规则通道组
      • ADC_INSERTED_CHANNEL:注入通道组
    • trigger_source:外部触发源,可选值:
      • ADC_EXT_TRG_TMR1_CC1:TMR1_CH1事件(规则组)
      • ADC_EXT_TRG_TMR1_CC2:TMR1_CH2事件(规则组)
      • ADC_EXT_TRG_TMR1_CC3:TMR1_CH3事件(规则组)
      • ADC_EXT_TRG_TMR2_CC2:TMR2_CH2事件(规则组)
      • ADC_EXT_TRG_TMR2_CC3:TMR2_CH3事件(规则组)
      • ADC_EXT_TRG_TMR2_CC4:TMR2_CH4事件(规则组)
      • ADC_EXT_TRG_TMR3_CC1:TMR3_CH1事件(规则组)
      • ADC_EXT_TRG_TMR3_TRGO:TMR3_TRGO事件(规则组)
      • ADC_EXT_TRG_TMR4_CC4:TMR4_CH4事件(规则组)
      • ADC_EXT_TRG_TMR5_CC1:TMR5_CH1事件(规则组)
      • ADC_EXT_TRG_TMR5_CC2:TMR5_CH2事件(规则组)
      • ADC_EXT_TRG_TMR5_CC3:TMR5_CH3事件(规则组)
      • ADC_EXT_TRG_TMR8_CC1:TMR8_CH1事件(规则组)
      • ADC_EXT_TRG_TMR8_TRGO:TMR8_TRGO事件(规则组)
      • ADC_EXT_TRG_EINT11:EINT线11事件(规则组)
      • ADC_EXT_TRG_SWSTART:软件触发(规则组)
      • ADC_EXT_TRG_TMR1_CC4:TMR1_CH4事件(注入组)
      • ADC_EXT_TRG_TMR1_TRGO:TMR1_TRGO事件(注入组)
      • ADC_EXT_TRG_TMR2_CC1:TMR2_CH1事件(注入组)
      • ADC_EXT_TRG_TMR2_TRGO:TMR2_TRGO事件(注入组)
      • ADC_EXT_TRG_TMR3_CC2:TMR3_CH2事件(注入组)
      • ADC_EXT_TRG_TMR3_CC4:TMR3_CH4事件(注入组)
      • ADC_EXT_TRG_TMR4_CC1:TMR4_CH1事件(注入组)
      • ADC_EXT_TRG_TMR4_CC2:TMR4_CH2事件(注入组)
      • ADC_EXT_TRG_TMR4_CC3:TMR4_CH3事件(注入组)
      • ADC_EXT_TRG_TMR5_TRGO:TMR5_TRGO事件(注入组)
      • ADC_EXT_TRG_TMR8_CC2:TMR8_CH2事件(注入组)
      • ADC_EXT_TRG_TMR8_CC3:TMR8_CH3事件(注入组)
      • ADC_EXT_TRG_TMR8_CC4:TMR8_CH4事件(注入组)
      • ADC_EXT_TRG_EINT15:EINT线15事件(注入组)
      • ADC_EXT_TRG_SWSTART:软件触发(注入组)
  • 输出参数:无
  • 返回值:无

23. adc_external_trigger_config

  • 函数原型void adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t trigger_mode);
  • 功能描述:配置ADC外部触发。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_channel_group:通道组选择,可选值:
      • ADC_REGULAR_CHANNEL:规则通道组
      • ADC_INSERTED_CHANNEL:注入通道组
    • trigger_mode:通道使能/触发模式,可选值:
      • EXTERNAL_TRIGGER_DISABLE:外部触发禁能
      • EXTERNAL_TRIGGER_RISING:上升沿触发
      • EXTERNAL_TRIGGER_FALLING:下降沿触发
      • EXTERNAL_TRIGGER_BOTH_EDGES:双边沿触发
  • 输出参数:无
  • 返回值:无

24. adc_software_trigger_enable

  • 函数原型void adc_software_trigger_enable(uint32_t adc_periph, uint8_t adc_channel_group);
  • 功能描述:ADC软件触发使能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_channel_group:通道组选择,可选值:
      • ADC_REGULAR_CHANNEL:规则通道组
      • ADC_INSERTED_CHANNEL:注入通道组
  • 输出参数:无
  • 返回值:无

25. adc_end_of_conversion_config

  • 函数原型void adc_end_of_conversion_config(uint32_t adc_periph, uint8_t end_selection);
  • 功能描述:配置规则组转换结束模式。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • end_selection:通道组选择,可选值:
      • ADC_EOC_SET_SEQUENCE:只有在规则转换序列转换结束时,才将EOC置1。如果不设置DMA=1,则溢出检测失能
      • ADC_EOC_SET_CONVERSION:在每个规则转换结束时,将EOC置1。溢出检测自动使能
  • 输出参数:无
  • 返回值:无

26. adc_regular_data_read

  • 函数原型uint16_t adc_regular_data_read(uint32_t adc_periph);
  • 功能描述:读ADC规则组数据寄存器。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值uint16_t,ADC转换值(0x0~0xFFF)

27. adc_inserted_data_read

  • 函数原型uint16_t adc_inserted_data_read(uint32_t adc_periph, uint8_t inserted_channel);
  • 功能描述:读ADC注入组数据寄存器。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • inserted_channel:注入通道选择,可选值ADC_INSERTED_CHANNEL_0ADC_INSERTED_CHANNEL_1ADC_INSERTED_CHANNEL_2ADC_INSERTED_CHANNEL_3(x=0,1,2,3)
  • 输出参数:无
  • 返回值uint16_t,ADC转换值(0x0~0xFFF)

28. adc_watchdog_single_channel_disable

  • 函数原型void adc_watchdog_single_channel_disable(uint32_t adc_periph);
  • 功能描述:配置ADC模拟看门狗单通道无效。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

29. adc_watchdog_single_channel_enable

  • 函数原型void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel);
  • 功能描述:配置ADC模拟看门狗单通道有效。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_channel:选择ADC通道,通道x(x=0-17),只有ADC0可使用x=16和17
  • 输出参数:无
  • 返回值:无

30. adc_watchdog_group_channel_enable

  • 函数原型void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group);
  • 功能描述:配置ADC模拟看门狗在通道组有效。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_channel_group:通道组使能看门狗,可选值:
      • ADC_REGULAR_CHANNEL:规则通道组
      • ADC_INSERTED_CHANNEL:注入通道组
      • ADC_REGULAR_INSERTED_CHANNEL:规则和注入通道组
  • 输出参数:无
  • 返回值:无

31. adc_watchdog_disable

  • 函数原型void adc_watchdog_disable(uint32_t adc_periph);
  • 功能描述:ADC模拟看门狗禁能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值:无

32. adc_watchdog_threshold_config

  • 函数原型void adc_watchdog_threshold_config(uint32_t adc_periph, uint16_t low_threshold, uint16_t high_threshold);
  • 功能描述:配置ADC模拟看门狗阈值。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • low_threshold:低阈值(0x0~0xFFF)
    • high_threshold:高阈值(0x0~0xFFF)
  • 输出参数:无
  • 返回值:无

33. adc_flag_get

  • 函数原型FlagStatus adc_flag_get(uint32_t adc_periph, uint32_t adc_flag);
  • 功能描述:获取ADC标志位。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_flag:ADC标志位,可选值:
      • ADC_FLAG_WDE:模拟看门狗事件标志位
      • ADC_FLAG_EOC:组转换结束标志位
      • ADC_FLAG_EOIC:注入通道组转换结束标志位
      • ADC_FLAG_STRC:通道转换开始标志位
      • ADC_FLAG_STIC:注入通道转换开始标志位
      • ADC_FLAG_OVR:溢出标志位
  • 输出参数:无
  • 返回值FlagStatusSETRESET

34. adc_flag_clear

  • 函数原型void adc_flag_clear(uint32_t adc_periph, uint32_t adc_flag);
  • 功能描述:清除ADC标志位。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_flag:ADC标志位,可选值:
      • ADC_FLAG_WDE:模拟看门狗事件标志位
      • ADC_FLAG_EOC:组转换结束标志位
      • ADC_FLAG_EOIC:注入通道组转换结束标志位
      • ADC_FLAG_STRC:通道转换开始标志位
      • ADC_FLAG_STIC:注入通道转换开始标志位
      • ADC_FLAG_OVR:溢出标志位
  • 输出参数:无
  • 返回值:无

35. adc_regular_software_startconv_flag_get

  • 函数原型FlagStatus adc_regular_software_startconv_flag_get(uint32_t adc_periph);
  • 功能描述:获取ADC规则通道组软件触发转换开始位。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值FlagStatusSETRESET

36. adc_inserted_software_startconv_flag_get

  • 函数原型FlagStatus adc_inserted_software_startconv_flag_get(uint32_t adc_periph);
  • 功能描述:获取ADC注入通道组软件触发转换开始位。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值FlagStatusSETRESET

37. adc_interrupt_flag_get

  • 函数原型FlagStatus adc_interrupt_flag_get(uint32_t adc_periph, uint32_t adc_interrupt);
  • 功能描述:获取ADC中断标志位。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_interrupt:ADC中断标志位,可选值:
      • ADC_INT_WDE:模拟看门狗中断标志位
      • ADC_INT_EOC:组转换结束中断标志位
      • ADC_INT_EOIC:注入通道组转换结束中断标志位
      • ADC_INT_OVR:溢出中断标志位
  • 输出参数:无
  • 返回值FlagStatusSETRESET

38. adc_interrupt_flag_clear

  • 函数原型void adc_interrupt_flag_clear(uint32_t adc_periph, uint32_t adc_interrupt);
  • 功能描述:清除ADC中断标志位。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_interrupt:ADC中断标志位,可选值:
      • ADC_INT_WDE:模拟看门狗中断标志位
      • ADC_INT_EOC:组转换结束中断标志位
      • ADC_INT_EOIC:注入通道组转换结束中断标志位
      • ADC_INT_OVR:溢出中断标志位
  • 输出参数:无
  • 返回值:无

39. adc_interrupt_enable

  • 函数原型void adc_interrupt_enable(uint32_t adc_periph, uint32_t adc_interrupt);
  • 功能描述:ADC中断使能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_interrupt:ADC中断标志位,可选值:
      • ADC_INT_WDE:模拟看门狗中断标志位
      • ADC_INT_EOC:组转换结束中断标志位
      • ADC_INT_EOIC:注入通道组转换结束中断标志位
      • ADC_INT_OVR:溢出中断标志位
  • 输出参数:无
  • 返回值:无

40. adc_interrupt_disable

  • 函数原型void adc_interrupt_disable(uint32_t adc_periph, uint32_t adc_interrupt);
  • 功能描述:ADC中断禁能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
    • adc_interrupt:ADC中断标志位,可选值:
      • ADC_INT_WDE:模拟看门狗中断标志位
      • ADC_INT_EOC:组转换结束中断标志位
      • ADC_INT_EOIC:注入通道组转换结束中断标志位
      • ADC_INT_OVR:溢出中断标志位
  • 输出参数:无
  • 返回值:无

41. adc_sync_mode_config

  • 函数原型void adc_sync_mode_config(uint32_t sync_mode);
  • 功能描述:ADC同步模式配置。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • sync_mode:同步模式,可选值:
      • ADC_SYNC_MODE_DISABLE:ADC同步模式失能,所有的ADC都独立工作
      • ADC_PARALLEL_REGULAR_INSERTED_ROTATION:ADC0和ADC1工作在规则并行和注入并行的组合模式,ADC2独立工作
      • ADC_PARALLEL_REGULAR_INSERTED:ADC0和ADC1工作在规则并行和交替触发的组合模式,ADC2独立工作
      • ADC_DUAL_INSERTER:ADC0和ADC1工作在注入并行模式,ADC2独立工作
      • ADC_DUAL_PARALLEL:ADC0和ADC1工作在规则并行模式,ADC2独立工作
      • ADC_FOLLOWUP_ROTATION:ADC0和ADC1工作在跟随模式,ADC2独立工作
      • ADC_FOLLOWUP_INSERTER:ADC0和ADC1工作在跟随模式,ADC2独立工作
      • ADC_FOLLOWUP_PARALLEL:ADC0和ADC1工作在跟随模式,ADC2独立工作
      • ADC_TRIGGERED_ROTATION:ADC0和ADC1工作在交替触发模式,ADC2独立工作
      • ADC_TRIGGERED_INSERTER:ADC0和ADC1工作在交替触发模式,ADC2独立工作
      • ADC_TRIGGERED_PARALLEL:ADC0和ADC1工作在交替触发模式,ADC2独立工作
      • ADC_ALL_REGULAR_INSERTED_ROTATION:所有的ADC都工作在规则并行和注入并行的组合模式
      • ADC_ALL_REGULAR_INSERTED:所有的ADC都工作在规则并行和交替触发的组合模式
      • ADC_ALL_INSERTER:所有的ADC都工作在注入并行模式
      • ADC_ALL_PARALLEL:所有的ADC都工作在规则并行模式
      • ADC_ALL_FOLLOWUP:所有的ADC都工作在跟随模式
      • ADC_ALL_TRIGGERED:所有的ADC都工作在交替触发模式
  • 输出参数:无
  • 返回值:无

42. adc_sync_delay_config

  • 函数原型void adc_sync_delay_config(uint32_t adc_sync_delay);
  • 功能描述:配置ADC同步模式两次采样之间的延时。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_sync_delay:采样之间的延时,可选值:
      • ADC_SYNC_DELAY_5CYCLES:5个ADC时钟周期
      • ADC_SYNC_DELAY_10CYCLES:10个ADC时钟周期
      • ADC_SYNC_DELAY_15CYCLES:15个ADC时钟周期
      • ADC_SYNC_DELAY_20CYCLES:20个ADC时钟周期
      • ADC_SYNC_DELAY_25CYCLES:25个ADC时钟周期
      • ADC_SYNC_DELAY_30CYCLES:30个ADC时钟周期
      • ADC_SYNC_DELAY_35CYCLES:35个ADC时钟周期
      • ADC_SYNC_DELAY_40CYCLES:40个ADC时钟周期
  • 输出参数:无
  • 返回值:无

43. adc_sync_dma_config

  • 函数原型void adc_sync_dma_config(uint32_t dma_mode);
  • 功能描述:ADC同步模式DMA选择。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • dma_mode:DMA模式,可选值:
      • DMA_DISABLE:DMA失能
      • DMA_MODE_1:ADC同步DMA模式1
      • DMA_MODE_2:ADC同步DMA模式2
  • 输出参数:无
  • 返回值:无

44. adc_sync_dma_request_after_last_enable

  • 函数原型void adc_sync_dma_request_after_last_enable(void);
  • 功能描述:当SYNCDMA不为00时,根据SYNCDMA位来产生DMA请求。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数:无
  • 输出参数:无
  • 返回值:无

45. adc_sync_dma_request_after_last_disable

  • 函数原型void adc_sync_dma_request_after_last_disable(void);
  • 功能描述:当检测到来自DMA控制器的传输结束信号后,DMA机制失能。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数:无
  • 输出参数:无
  • 返回值:无

46. adc_sync_regular_data_read

  • 函数原型uint32_t adc_sync_regular_data_read(uint32_t adc_periph);
  • 功能描述:ADC同步模式规则数据读取。
  • 先决条件:无
  • 被调用函数:无
  • 输入参数
    • adc_periph:ADC外设,可选值为ADC0ADC1ADC2
  • 输出参数:无
  • 返回值uint32_t,ADC转换值
留言