跳过正文

ch32v00x_adc.h

目录
Ch32v00x软件文档 - 这篇文章属于一个选集。
§ 4: 本文

描述
#

该文件定义了 CH32V00x 系列微控制器 ADC 外设的固件库所有函数原型、常量、枚举和结构体。ADC(模数转换器)支持单通道与多通道扫描转换、注入通道、模拟看门狗、DMA 请求、软件与外部触发等多种模式,适用于高精度模拟信号采集场景。本库通过寄存器掩码操作实现灵活配置,所有常量均以 uint32_tuint8_t 类型定义,确保与硬件寄存器位域精确匹配。函数设计遵循标准外设库风格,支持初始化、启动、中断、校准、偏移设置等完整功能链,适用于工业控制、传感器接口、电源管理等嵌入式应用。

常量
#

ADC_mode
#

配置 ADC 工作模式为独立模式(仅支持单 ADC)

名称 简述
ADC_Mode_Independent 0x00000000 ADC 工作在独立模式,不参与双 ADC 同步操作

该模式为单 ADC 系统的唯一选择,CH32V00x 仅含一个 ADC 模块,因此该常量实际为默认且唯一有效值。

ADC_external_trigger_sources_for_regular_channels_conversion
#

配置常规通道转换的外部触发源

名称 简述
ADC_ExternalTrigConv_T1_TRGO 0x00000000 定时器1的TRGO事件触发
ADC_ExternalTrigConv_T1_CC1 0x00020000 定时器1的捕获比较1事件触发
ADC_ExternalTrigConv_T1_CC2 0x00040000 定时器1的捕获比较2事件触发
ADC_ExternalTrigConv_T2_TRGO 0x00060000 定时器2的TRGO事件触发
ADC_ExternalTrigConv_T2_CC1 0x00080000 定时器2的捕获比较1事件触发
ADC_ExternalTrigConv_T2_CC2 0x000A0000 定时器2的捕获比较2事件触发
ADC_ExternalTrigConv_Ext_PD3_PC2 0x000C0000 外部引脚PD3或PC2的上升沿触发
ADC_ExternalTrigConv_None 0x000E0000 软件触发(无外部硬件触发)

所有值均为 CTLR2 寄存器中 EXTSEL[3:0] 字段的编码,用于选择触发源。None 模式下需配合 ADC_SoftwareStartConvCmd() 使用,实现纯软件控制采样。

ADC_data_align
#

配置转换结果的数据对齐方式

名称 简述
ADC_DataAlign_Right 0x00000000 右对齐,结果存于寄存器低10位
ADC_DataAlign_Left 0x00000800 左对齐,结果存于寄存器高10位

右对齐为默认模式,便于直接读取10位有效值;左对齐适用于需要与12位或16位数据对齐的后续处理,如DMA传输至缓冲区时保持字节对齐。

ADC_channels
#

ADC 通道编号定义(共10个通道)

名称 简述
ADC_Channel_0 0x00 通道0(PA0)
ADC_Channel_1 0x01 通道1(PA1)
ADC_Channel_2 0x02 通道2(PA2)
ADC_Channel_3 0x03 通道3(PA3)
ADC_Channel_4 0x04 通道4(PA4)
ADC_Channel_5 0x05 通道5(PA5)
ADC_Channel_6 0x06 通道6(PA6)
ADC_Channel_7 0x07 通道7(PA7)
ADC_Channel_8 0x08 通道8(Vrefint)
ADC_Channel_9 0x09 通道9(Vcalint)

ADC_Channel_8ADC_Channel_9 为内部参考电压通道,分别用于读取内部1.2V参考电压和校准电压,可用于系统电压监测或温度估算。

ADC_Channel_VrefintADC_Channel_Vcalint
#

内部参考电压通道别名定义

名称 简述
ADC_Channel_Vrefint ADC_Channel_8 内部参考电压通道(1.2V)
ADC_Channel_Vcalint ADC_Channel_9 内部校准电压通道(用于ADC校准)

这两个通道为系统级通道,不连接外部引脚,仅用于内部校准或电压监测,使用时需确保ADC时钟稳定。

ADC_sampling_time
#

配置通道采样时间(单位:ADC时钟周期)

名称 简述
ADC_SampleTime_3Cycles 0x00 3个ADC时钟周期
ADC_SampleTime_9Cycles 0x01 9个ADC时钟周期
ADC_SampleTime_15Cycles 0x02 15个ADC时钟周期
ADC_SampleTime_30Cycles 0x03 30个ADC时钟周期
ADC_SampleTime_43Cycles 0x04 43个ADC时钟周期
ADC_SampleTime_57Cycles 0x05 57个ADC时钟周期
ADC_SampleTime_73Cycles 0x06 73个ADC时钟周期
ADC_SampleTime_241Cycles 0x07 241个ADC时钟周期

采样时间越长,转换精度越高,尤其适用于高阻抗传感器。241Cycles 为最大采样时间,适合低频、高精度场景;3Cycles 适用于高速连续采样。

ADC_external_trigger_sources_for_injected_channels_conversion
#

配置注入通道转换的外部触发源

名称 简述
ADC_ExternalTrigInjecConv_T1_CC3 0x00000000 定时器1捕获比较3事件触发
ADC_ExternalTrigInjecConv_T1_CC4 0x00001000 定时器1捕获比较4事件触发
ADC_ExternalTrigInjecConv_T2_CC3 0x00002000 定时器2捕获比较3事件触发
ADC_ExternalTrigInjecConv_T2_CC4 0x00003000 定时器2捕获比较4事件触发
ADC_ExternalTrigInjecConv_Ext_PD1_PA2 0x00006000 外部引脚PD1或PA2上升沿触发
ADC_ExternalTrigInjecConv_None 0x00007000 软件触发(无外部硬件触发)

注入通道优先级高于常规通道,常用于中断式采样(如过流保护、快速响应)。None 模式下需配合 ADC_SoftwareStartInjectedConvCmd() 使用。

ADC_injected_channel_selection
#

注入通道编号定义(用于设置偏移和读取结果)

名称 简述
ADC_InjectedChannel_1 0x14 注入通道1(对应ISQR寄存器第1个位置)
ADC_InjectedChannel_2 0x18 注入通道2(对应ISQR寄存器第2个位置)
ADC_InjectedChannel_3 0x1C 注入通道3(对应ISQR寄存器第3个位置)
ADC_InjectedChannel_4 0x20 注入通道4(对应ISQR寄存器第4个位置)

这些值并非通道编号,而是用于计算偏移地址的标识符,与 ADC_SetInjectedOffset()ADC_GetInjectedConversionValue() 配合使用,通过地址偏移访问注入通道结果寄存器。

ADC_analog_watchdog_selection
#

配置模拟看门狗监控模式

名称 简述
ADC_AnalogWatchdog_SingleRegEnable 0x00800200 仅监控一个常规通道
ADC_AnalogWatchdog_SingleInjecEnable 0x00400200 仅监控一个注入通道
ADC_AnalogWatchdog_SingleRegOrInjecEnable 0x00C00200 监控任意一个常规或注入通道
ADC_AnalogWatchdog_AllRegEnable 0x00800000 监控所有常规通道
ADC_AnalogWatchdog_AllInjecEnable 0x00400000 监控所有注入通道
ADC_AnalogWatchdog_AllRegAllInjecEnable 0x00C00000 监控所有常规和注入通道
ADC_AnalogWatchdog_None 0x00000000 禁用模拟看门狗

看门狗通过比较转换值与设定的高低阈值触发中断或标志,适用于电压越限报警、电池电量监测等安全监控场景。SingleRegEnable 需配合 ADC_AnalogWatchdogSingleChannelConfig() 指定具体通道。

ADC_interrupts_definition
#

ADC 中断源定义(用于 ADC_ITConfig()

名称 简述
ADC_IT_EOC 0x0220 常规通道转换结束中断
ADC_IT_AWD 0x0140 模拟看门狗中断
ADC_IT_JEOC 0x0480 注入通道转换结束中断

中断掩码为 CTLR1 寄存器中对应位的组合,0x0220 = 0x0200 | 0x0020,其中 0x0200 为 EOC 位,0x0020 为中断使能位。使用时需确保 ADC_ITConfig()NewStateENABLE

ADC_flags_definition
#

ADC 状态标志定义(用于 ADC_GetFlagStatus()

名称 简述
ADC_FLAG_AWD 0x01 模拟看门狗标志
ADC_FLAG_EOC 0x02 常规通道转换结束标志
ADC_FLAG_JEOC 0x04 注入通道转换结束标志
ADC_FLAG_JSTRT 0x08 注入通道转换启动标志
ADC_FLAG_STRT 0x10 常规通道转换启动标志

所有标志位位于 STATR 寄存器,可通过 ADC_ClearFlag() 清除。JSTRTSTRT 用于确认转换是否已启动,适用于轮询模式。

ADC_calibration_voltage_definition
#

ADC 校准电压选择(用于 ADC_Calibration_Vol()

名称 简述
ADC_CALVOL_50PERCENT 0x02000000 校准电压为 VDD 的 50%
ADC_CALVOL_75PERCENT 0x04000000 校准电压为 VDD 的 75%

该功能用于在特定电压点校准 ADC,提高线性度。校准前需确保 VDD 稳定,校准后需调用 ADC_StartCalibration()ADC_ResetCalibration() 完成完整流程。

ADC_external_trigger_sources_delay_channels_definition
#

外部触发延迟通道选择(用于 ADC_ExternalTrig_DLY()

名称 简述
ADC_ExternalTrigRegul_DLY 0x00000000 延迟应用于常规通道触发
ADC_ExternalTrigInjec_DLY 0x00000200 延迟应用于注入通道触发

该功能允许在外部触发事件后插入可编程延迟(0~511个系统时钟周期),用于同步多个外设(如PWM与ADC采样),提升系统时序精度。

枚举
#

FunctionalState
#

启用/禁用状态枚举(由 ch32v00x.h 定义)

名称
DISABLE 0
ENABLE 1

该枚举广泛用于控制外设功能的开关,如 ADC_Cmd()ADC_DMACmd() 等,其值直接映射为寄存器位的置位/复位操作。

结构体
#

ADC_InitTypeDef
#

ADC 初始化结构体定义

名称 类型 简述
ADC_Mode uint32_t 配置 ADC 工作模式,仅支持 ADC_Mode_Independent
ADC_ScanConvMode FunctionalState 启用扫描模式(多通道)或单通道模式
ADC_ContinuousConvMode FunctionalState 启用连续转换模式(自动重复)或单次转换模式
ADC_ExternalTrigConv uint32_t 选择常规通道的外部触发源,可为 ADC_ExternalTrigConv_* 常量之一
ADC_DataAlign uint32_t 设置转换结果对齐方式:右对齐或左对齐
ADC_NbrOfChannel uint8_t 设置常规通道序列中要转换的通道数量,范围 1~16

该结构体是 ADC_Init() 的核心输入参数,所有配置必须在调用 ADC_Init() 前完成。ADC_NbrOfChannelADC_RegularChannelConfig()Rank 参数需一致,确保序列完整。

函数
#

ADC_DeInit
#

void ADC_DeInit(ADC_TypeDef *ADCx)
将 ADCx 外设寄存器复位为默认复位值,通过复位 APB2 时钟实现。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1

该函数通过 RCC_APB2PeriphResetCmd() 触发硬件复位,比直接写寄存器更彻底,适用于系统初始化或异常恢复。

ADC_Init
#

void ADC_Init(ADC_TypeDef *ADCx, ADC_InitTypeDef *ADC_InitStruct)
根据 ADC_InitStruct 中的参数初始化 ADC 外设。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_InitStruct ADC_InitTypeDef * 指向包含配置参数的结构体指针

该函数会清除 CTLR1CTLR2 的相关位,然后写入配置值。注意:ADC_NbrOfChannel 仅影响常规通道序列,注入通道需单独配置。

ADC_StructInit
#

void ADC_StructInit(ADC_InitTypeDef *ADC_InitStruct)
ADC_InitTypeDef 结构体所有成员初始化为默认值。

参数:

名称 类型 简述
ADC_InitStruct ADC_InitTypeDef * 待初始化的结构体指针

默认值为:独立模式、单次转换、软件触发、右对齐、1个通道。建议在调用 ADC_Init() 前先调用此函数,避免未初始化变量导致异常。

ADC_Cmd
#

void ADC_Cmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用 ADC 外设。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启用,DISABLE 禁用

启用后 ADC 才能进行转换。禁用后可节省功耗,但需重新校准才能恢复精度。

ADC_DMACmd
#

void ADC_DMACmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用 ADC 转换结果的 DMA 请求。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启用,DISABLE 禁用

启用后,每次转换结束自动将结果写入指定内存缓冲区,减少 CPU 干预,适用于高速连续采样场景。

ADC_ITConfig
#

void ADC_ITConfig(ADC_TypeDef *ADCx, uint16_t ADC_IT, FunctionalState NewState)
启用或禁用指定的 ADC 中断源。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_IT uint16_t 中断源,可为 ADC_IT_EOCADC_IT_AWDADC_IT_JEOC
NewState FunctionalState ENABLE 启用,DISABLE 禁用

中断使能后需在 NVIC 中配置相应中断向量。ADC_IT_AWD 通常用于异常检测,ADC_IT_EOC 用于数据采集完成通知。

ADC_ResetCalibration
#

void ADC_ResetCalibration(ADC_TypeDef *ADCx)
复位 ADC 校准寄存器,为校准做准备。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1

必须在 ADC_StartCalibration() 前调用。复位后 CTLR2RSTCAL 位被置位,需等待其自动清零。

ADC_GetResetCalibrationStatus
#

FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef *ADCx)
获取 ADC 校准复位状态。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1

返回值:
SET:复位操作正在进行中;RESET:复位已完成。

用于轮询校准复位是否完成,确保 ADC_StartCalibration() 在正确时机调用。

ADC_StartCalibration
#

void ADC_StartCalibration(ADC_TypeDef *ADCx)
启动 ADC 校准过程。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1

校准过程自动完成,期间 ADC 不能工作。校准完成后 CAL 位自动清零,需调用 ADC_GetCalibrationStatus() 确认。

ADC_GetCalibrationStatus
#

FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef *ADCx)
获取 ADC 校准状态。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1

返回值:
SET:校准正在进行中;RESET:校准已完成。

校准完成后 ADC 精度提升,建议在系统上电后、首次使用前执行完整校准流程(复位→启动→等待完成)。

ADC_SoftwareStartConvCmd
#

void ADC_SoftwareStartConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用常规通道的软件启动转换。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启动转换,DISABLE 停止

仅在 ADC_ExternalTrigConv 设置为 ADC_ExternalTrigConv_None 时有效。调用后立即启动一次转换。

ADC_GetSoftwareStartConvStatus
#

FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef *ADCx)
获取常规通道软件启动转换状态。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1

返回值:
SET:软件启动信号有效;RESET:无效。

用于确认转换是否已启动,适用于轮询模式下的状态监控。

ADC_DiscModeChannelCountConfig
#

void ADC_DiscModeChannelCountConfig(ADC_TypeDef *ADCx, uint8_t Number)
配置常规通道不连续模式的通道数量。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
Number uint8_t 不连续模式下每组转换的通道数(1~8)

不连续模式下,ADC 每次只转换指定数量的通道,其余通道跳过,适用于降低功耗或提高采样速率。需配合 ADC_DiscModeCmd() 使用。

ADC_DiscModeCmd
#

void ADC_DiscModeCmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用常规通道的不连续转换模式。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启用,DISABLE 禁用

启用后,ADC 按 ADC_DiscModeChannelCountConfig() 设置的通道数分组转换,每组后暂停,适合低功耗间歇采样。

ADC_RegularChannelConfig
#

void ADC_RegularChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
配置常规通道的序列顺序、采样时间。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_Channel uint8_t 通道编号,如 ADC_Channel_0~ADC_Channel_9
Rank uint8_t 在序列中的位置(1~16)
ADC_SampleTime uint8_t 采样时间,如 ADC_SampleTime_3Cycles

序列由 RSQR3RSQR2RSQR1 三个寄存器组成,分别支持前6、6、4个通道。Rank 为1时为第一个采样通道。必须按顺序配置,否则序列错乱。

ADC_ExternalTrigConvCmd
#

void ADC_ExternalTrigConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用常规通道的外部触发转换。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启用,DISABLE 禁用

启用后,ADC 将等待外部触发事件(如定时器边沿)启动转换,适用于同步采集场景。

ADC_GetConversionValue
#

uint16_t ADC_GetConversionValue(ADC_TypeDef *ADCx)
读取最近一次常规通道转换结果。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1

返回值:
转换结果值(0~1023,10位精度)

仅在 ADC_FLAG_EOCSET 时读取有效。若为左对齐,需右移6位获取有效值。

ADC_AutoInjectedConvCmd
#

void ADC_AutoInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用注入通道在常规通道转换后自动启动。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启用,DISABLE 禁用

启用后,每次常规通道序列完成,自动触发一次注入通道序列,适用于“主采样+辅助监测”场景。

ADC_InjectedDiscModeCmd
#

void ADC_InjectedDiscModeCmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用注入通道的不连续转换模式。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启用,DISABLE 禁用

注入通道最多支持4个,不连续模式下可跳过部分通道,提升响应速度。

ADC_ExternalTrigInjectedConvConfig
#

void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef *ADCx, uint32_t ADC_ExternalTrigInjecConv)
配置注入通道的外部触发源。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_ExternalTrigInjecConv uint32_t 触发源,如 ADC_ExternalTrigInjecConv_T1_CC3

与常规通道触发源独立,可配置不同事件触发注入转换,实现多任务同步。

ADC_ExternalTrigInjectedConvCmd
#

void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用注入通道的外部触发转换。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启用,DISABLE 禁用

启用后,注入通道仅在外部事件触发时转换,否则需软件启动。

ADC_SoftwareStartInjectedConvCmd
#

void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)
启用或禁用注入通道的软件启动转换。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
NewState FunctionalState ENABLE 启动,DISABLE 停止

仅在 ADC_ExternalTrigInjecConvNone 时有效,用于手动触发高优先级采样。

ADC_GetSoftwareStartInjectedConvCmdStatus
#

FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef *ADCx)
获取注入通道软件启动状态。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1

返回值:
SET:软件启动信号有效;RESET:无效。

用于确认注入转换是否已启动,适用于轮询模式。

ADC_InjectedChannelConfig
#

void ADC_InjectedChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
配置注入通道的序列顺序和采样时间。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_Channel uint8_t 通道编号,如 ADC_Channel_0~ADC_Channel_9
Rank uint8_t 在注入序列中的位置(1~4)
ADC_SampleTime uint8_t 采样时间,如 ADC_SampleTime_3Cycles

注入通道序列由 ISQR 寄存器管理,最多支持4个通道。Rank 为1时为第一个注入通道。采样时间与常规通道独立配置。

ADC_InjectedSequencerLengthConfig
#

void ADC_InjectedSequencerLengthConfig(ADC_TypeDef *ADCx, uint8_t Length)
配置注入通道序列长度。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
Length uint8_t 序列中通道数量(1~4)

该值决定 ISQR 寄存器中实际使用的通道数,超出部分将被忽略。必须与 ADC_InjectedChannelConfig() 配置的通道数一致。

ADC_SetInjectedOffset
#

void ADC_SetInjectedOffset(ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset)
设置注入通道的转换结果偏移值。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_InjectedChannel uint8_t 注入通道标识符,如 ADC_InjectedChannel_1
Offset uint16_t 偏移值(0~1023),10位有效

偏移值将被加到实际转换结果上,用于补偿传感器零点漂移或系统误差。偏移寄存器地址通过 ADC_InjectedChannel 值计算。

ADC_GetInjectedConversionValue
#

uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel)
读取指定注入通道的转换结果。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_InjectedChannel uint8_t 注入通道标识符,如 ADC_InjectedChannel_1

返回值:
转换结果值(0~1023,10位精度)

仅在 ADC_FLAG_JEOCSET 时读取有效。结果寄存器地址为 ADCx + 0x28 + ADC_InjectedChannel

ADC_AnalogWatchdogCmd
#

void ADC_AnalogWatchdogCmd(ADC_TypeDef *ADCx, uint32_t ADC_AnalogWatchdog)
启用或禁用模拟看门狗,并选择监控模式。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_AnalogWatchdog uint32_t 看门狗模式,如 ADC_AnalogWatchdog_SingleRegEnable

该函数设置 CTLR1AWDENAWDSGL 位,决定监控范围。必须配合 ADC_AnalogWatchdogThresholdsConfig() 设置阈值。

ADC_AnalogWatchdogThresholdsConfig
#

void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef *ADCx, uint16_t HighThreshold, uint16_t LowThreshold)
配置模拟看门狗的高低阈值。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
HighThreshold uint16_t 高阈值(0~1023)
LowThreshold uint16_t 低阈值(0~1023)

当转换值超出 [Low, High] 区间时触发 ADC_FLAG_AWD 和中断。高阈值必须大于低阈值,否则行为未定义。

ADC_AnalogWatchdogSingleChannelConfig
#

void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel)
配置模拟看门狗监控的单个通道(仅在 SingleRegEnableSingleInjecEnable 模式下有效)。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_Channel uint8_t 通道编号,如 ADC_Channel_0~ADC_Channel_9

该函数设置 CTLR1AWDCH[4:0] 字段,指定被监控的通道。必须在 ADC_AnalogWatchdogCmd() 之后调用。

ADC_GetFlagStatus
#

FlagStatus ADC_GetFlagStatus(ADC_TypeDef *ADCx, uint8_t ADC_FLAG)
检查指定 ADC 标志是否置位。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_FLAG uint8_t 标志位,如 ADC_FLAG_EOC

返回值:
SET:标志置位;RESET:标志未置位。

用于轮询模式判断转换是否完成或异常是否发生,避免中断开销。

ADC_ClearFlag
#

void ADC_ClearFlag(ADC_TypeDef *ADCx, uint8_t ADC_FLAG)
清除指定的 ADC 标志位。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_FLAG uint8_t 标志位,如 ADC_FLAG_EOC

通过向 STATR 寄存器写入1清除标志。必须在中断服务程序或轮询处理后清除,否则会重复触发。

ADC_GetITStatus
#

ITStatus ADC_GetITStatus(ADC_TypeDef *ADCx, uint16_t ADC_IT)
检查指定的 ADC 中断是否发生。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_IT uint16_t 中断源,如 ADC_IT_EOC

返回值:
SET:中断发生;RESET:未发生。

该函数同时检查中断使能位和状态标志位,确保中断确实被触发,而非仅标志置位。

ADC_ClearITPendingBit
#

void ADC_ClearITPendingBit(ADC_TypeDef *ADCx, uint16_t ADC_IT)
清除指定的 ADC 中断挂起位。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_IT uint16_t 中断源,如 ADC_IT_EOC

通过清除 STATR 中对应标志位实现,必须在中断服务程序末尾调用,防止重复进入中断。

ADC_Calibration_Vol
#

void ADC_Calibration_Vol(ADC_TypeDef *ADCx, uint32_t ADC_CALVOL)
设置 ADC 校准电压参考点。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
ADC_CALVOL uint32_t 校准电压,ADC_CALVOL_50PERCENTADC_CALVOL_75PERCENT

该功能用于在特定电压点校准 ADC,提高线性度。校准前需确保 VDD 稳定,校准后需调用 ADC_StartCalibration()ADC_ResetCalibration() 完成完整流程。

ADC_ExternalTrig_DLY
#

void ADC_ExternalTrig_DLY(ADC_TypeDef *ADCx, uint32_t channel, uint16_t DelayTim)
配置外部触发延迟通道和延迟时间。

参数:

名称 类型 简述
ADCx ADC_TypeDef * 选择 ADC 外设,仅支持 ADC1
channel uint32_t 触发通道,ADC_ExternalTrigRegul_DLYADC_ExternalTrigInjec_DLY
DelayTim uint16_t 延迟时间(0~511个系统时钟周期)

该功能用于精确同步 ADC 采样与外部事件(如 PWM 边沿),延迟范围 0~511 个系统时钟周期,可实现微秒级同步控制。

Ch32v00x软件文档 - 这篇文章属于一个选集。
§ 4: 本文

相关文章

ch32v00x_tim.h

该文件定义了CH32V00x系列微控制器定时器(TIM)固件库的所有常量、枚举、结构体及函数原型,用于配置和控制TIM1与TIM2定时器外设。支持定时器基本计数、PWM输出、输入捕获、编码器接口、外部时钟同步、死区控制、互补输出、DMA传输及中断管理等高级功能。所有配置均通过结构体初始化和寄存器位操作实现,适用于电机控制、电源管理、精密测频与信号生成等应用场景。TIM1为高级定时器,支持互补输出与死区时间;TIM2为通用定时器,功能受限但资源更紧凑。

ch32v00x.h

该文件是 CH32V003 微控制器的外设访问层头文件,定义了所有外设寄存器的内存映射、位域常量、中断向量、时钟配置、GPIO 控制结构及系统级常量。它为标准外设库提供底层硬件抽象,使开发者可通过结构体指针直接访问寄存器,或通过位掩码配置外设功能。本文件不包含函数原型,仅提供寄存器定义与常量,是所有外设驱动开发的基础。

ch32v00x_dma.h

该文件定义了 CH32V00x 系列微控制器 DMA(直接存储器访问)外设的固件库函数原型、数据结构及常量宏。DMA 用于在不占用 CPU 资源的情况下实现外设与内存、内存与内存之间的高效数据传输,适用于高速数据采集、串口/ADC 缓冲、图像处理等场景。本库支持 7 个 DMA 通道,每个通道可独立配置传输方向、数据宽度、地址递增模式、优先级和循环模式,极大提升系统并发处理能力。