描述 #
该文件定义了 CH32V00x 系列微控制器 ADC 外设的固件库所有函数原型、常量、枚举和结构体。ADC(模数转换器)支持单通道与多通道扫描转换、注入通道、模拟看门狗、DMA 请求、软件与外部触发等多种模式,适用于高精度模拟信号采集场景。本库通过寄存器掩码操作实现灵活配置,所有常量均以 uint32_t 或 uint8_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_8和ADC_Channel_9为内部参考电压通道,分别用于读取内部1.2V参考电压和校准电压,可用于系统电压监测或温度估算。
ADC_Channel_Vrefint 和 ADC_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()的NewState为ENABLE。
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()清除。JSTRT和STRT用于确认转换是否已启动,适用于轮询模式。
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_NbrOfChannel与ADC_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 * |
指向包含配置参数的结构体指针 |
该函数会清除
CTLR1和CTLR2的相关位,然后写入配置值。注意: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_EOC、ADC_IT_AWD、ADC_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()前调用。复位后CTLR2的RSTCAL位被置位,需等待其自动清零。
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 |
序列由
RSQR3、RSQR2、RSQR1三个寄存器组成,分别支持前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_EOC为SET时读取有效。若为左对齐,需右移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_ExternalTrigInjecConv为None时有效,用于手动触发高优先级采样。
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_JEOC为SET时读取有效。结果寄存器地址为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 |
该函数设置
CTLR1的AWDEN和AWDSGL位,决定监控范围。必须配合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)
配置模拟看门狗监控的单个通道(仅在 SingleRegEnable 或 SingleInjecEnable 模式下有效)。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
ADCx |
ADC_TypeDef * |
选择 ADC 外设,仅支持 ADC1 |
ADC_Channel |
uint8_t |
通道编号,如 ADC_Channel_0~ADC_Channel_9 |
该函数设置
CTLR1的AWDCH[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_50PERCENT 或 ADC_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_DLY 或 ADC_ExternalTrigInjec_DLY |
DelayTim |
uint16_t |
延迟时间(0~511个系统时钟周期) |
该功能用于精确同步 ADC 采样与外部事件(如 PWM 边沿),延迟范围 0~511 个系统时钟周期,可实现微秒级同步控制。