refactor(device): 移除备份配置文件并完善ADC模块注释

移除不再需要的 .cproject.yml.bak_dma 和 README.md 备份文件,
同时为 ADC.cpp 添加完整的 Doxygen 风格函数注释,提升代码可读性。
This commit is contained in:
cbb
2026-05-10 21:27:51 +08:00
parent 4b8b47bc9b
commit 078ea06317
77 changed files with 1326 additions and 6074 deletions
+80
View File
@@ -18,6 +18,13 @@ volatile uint16_t s_dmaBuffer[kChannelCount] = {0U, 0U, 0U};
volatile uint8_t s_dmaReady = 0U;
} // namespace
/**
* @brief 初始化 ADC DMA 循环搬运。
* @param[in] 无。
* @param[out] 无。
* @retval 无返回值。
* @note 配置 DMA0 Channel0,将 ADC 规则组结果连续搬运到 `s_dmaBuffer`。
*/
void Adc::initDma()
{
dma_parameter_struct dma_initpara{};
@@ -40,6 +47,13 @@ void Adc::initDma()
dma_channel_enable(kDmaPeriph, kDmaChannel);
}
/**
* @brief 初始化 ADC、DMA 与规则通道扫描配置。
* @param[in] 无。
* @param[out] 无。
* @retval 无返回值。
* @note 按 `VIN_ADC / TEMP / VREFINT` 三通道顺序启用连续扫描与 DMA 采样。
*/
void Adc::init()
{
rcu_periph_clock_enable(RCU_ADC0);
@@ -74,16 +88,35 @@ void Adc::init()
s_dmaReady = 1U;
}
/**
* @brief 查询 ADC DMA 采样是否已经就绪。
* @param[in] 无。
* @param[out] 无。
* @retval bool true 表示 DMA 已启动并完成初始稳定等待,false 表示尚未就绪。
*/
bool Adc::dmaReady()
{
return s_dmaReady != 0U;
}
/**
* @brief 获取 ADC DMA 原始缓冲区首地址。
* @param[in] 无。
* @param[out] 无。
* @retval const uint16_t* 返回 DMA 原始缓冲区首地址。
* @note 缓冲顺序固定为 `VIN_ADC / TEMP / VREFINT`。
*/
const uint16_t *Adc::dmaBuffer()
{
return (const uint16_t *)s_dmaBuffer;
}
/**
* @brief 按逻辑通道号读取一个原始 ADC 数值。
* @param[in] channel 逻辑 ADC 通道号。
* @param[out] 无。
* @retval uint16_t 返回对应通道的原始采样值;若通道不受支持则返回 0。
*/
uint16_t Adc::readRaw(uint8_t channel)
{
if(channel == CONFIG_ADC_VIN_CHANNEL) return s_dmaBuffer[0];
@@ -92,27 +125,74 @@ uint16_t Adc::readRaw(uint8_t channel)
return 0U;
}
/**
* @brief 读取 VIN_ADC 原始采样值。
* @param[in] 无。
* @param[out] 无。
* @retval uint16_t 返回 VIN_ADC 通道原始值。
*/
uint16_t Adc::readVinRaw() { return readRaw(CONFIG_ADC_VIN_CHANNEL); }
/**
* @brief 读取内部参考电压原始采样值。
* @param[in] 无。
* @param[out] 无。
* @retval uint16_t 返回 VREFINT 通道原始值。
*/
uint16_t Adc::readVrefRaw() { return readRaw(CONFIG_ADC_VREFINT_CHANNEL); }
/**
* @brief 读取内部温度通道原始采样值。
* @param[in] 无。
* @param[out] 无。
* @retval uint16_t 返回内部温度通道原始值。
*/
uint16_t Adc::readTempRaw() { return readRaw(CONFIG_ADC_TEMP_CHANNEL); }
/**
* @brief 将 VIN_ADC 原始值换算为 ADC 引脚电压。
* @param[in] vinRaw VIN_ADC 原始采样值。
* @param[in] vdda 当前 ADC 供电电压。
* @param[out] 无。
* @retval float 返回 ADC 引脚电压,单位 V。
*/
float Adc::calculateVinAdcVoltage(uint16_t vinRaw, float vdda)
{
return (static_cast<float>(vinRaw) * vdda) / CONFIG_ADC_MAX_VALUE;
}
/**
* @brief 根据内部参考电压原始值换算当前 VDDA。
* @param[in] vrefRaw 内部参考电压通道原始值。
* @param[out] 无。
* @retval float 返回换算得到的 VDDA,单位 V;若原始值为 0,则返回默认值。
*/
float Adc::calculateVdda(uint16_t vrefRaw)
{
if(vrefRaw == 0U) return CONFIG_ADC_DEFAULT_VDDA;
return (CONFIG_ADC_VREFINT_TYPICAL_VOLTAGE * CONFIG_ADC_MAX_VALUE) / static_cast<float>(vrefRaw);
}
/**
* @brief 根据温度通道原始值换算芯片温度。
* @param[in] tempRaw 温度通道原始值。
* @param[in] vdda 当前 ADC 供电电压。
* @param[out] 无。
* @retval float 返回换算得到的芯片温度,单位 ℃。
*/
float Adc::calculateTemperature(uint16_t tempRaw, float vdda)
{
const float sensorVoltage = (static_cast<float>(tempRaw) * vdda) / CONFIG_ADC_MAX_VALUE;
return ((CONFIG_ADC_TEMP_V25 - sensorVoltage) / CONFIG_ADC_TEMP_AVG_SLOPE) + 25.0f;
}
/**
* @brief 收集一组完整 ADC 采样结果。
* @param[in] sample 指向输出采样结构体的指针。
* @param[out] sample 输出原始值与工程值结果;允许为空。
* @retval 无返回值。
* @note 若 `sample == nullptr`,函数直接返回。
*/
void Adc::collectSample(Sample *sample)
{
if(sample == nullptr) return;