feat: 校准电池电压与ADC2充电检测,重构RGB为Bitbang翻转驱动,并修复RTC晶振起振问题
This commit is contained in:
61
Drivers/adc.h
Normal file
61
Drivers/adc.h
Normal file
@@ -0,0 +1,61 @@
|
||||
#ifndef __ADC_H__
|
||||
#define __ADC_H__
|
||||
|
||||
#include "../App/config.h"
|
||||
|
||||
/* ====== ADC 通道与硬件引脚定义 ====== */
|
||||
#define ADC_CHANNEL_KEY_DOWN 11 // KEY_DOWN (P0.3) 对应 STC32G 的 ADC 通道 11
|
||||
#define ADC_CHANNEL_BATTERY 3 // 电池检测 (P1.3) 对应 STC32G 的 ADC 通道 3
|
||||
#define ADC_CHANNEL_CHRG_DET 2 // 充电检测 (P1.2) 对应 STC32G 的 ADC 通道 2
|
||||
|
||||
/* ====== 判定阈值定义 (基于 12 位 ADC, 0~4095) ====== */
|
||||
// KEY_DOWN 2.2V 常态 (ADC~2700), 3.7V 按下 (ADC 饱和 4095)
|
||||
#define KEY_DOWN_ADC_THRESHOLD 3400 // ADC 采样值超过 3400 判定为按键按下
|
||||
|
||||
/**
|
||||
* @brief 初始化 STC32G 硬件 ADC 模块
|
||||
* @details 开启 ADC 电源、设置结果右对齐格式及采样时钟分频,并将 P0.3 和 P1.3 设置为高阻输入模式
|
||||
*/
|
||||
void ADC_Init(void);
|
||||
|
||||
/**
|
||||
* @brief 读取指定 ADC 通道的原始 12 位转换结果
|
||||
* @param channel ADC 通道号 (0~15)
|
||||
* @return u16 12 位 ADC 采样原始值 (0 ~ 4095)
|
||||
*/
|
||||
u16 ADC_ReadRaw(u8 channel);
|
||||
|
||||
/**
|
||||
* @brief 对指定 ADC 通道进行多重采样与中值滤波
|
||||
* @param channel ADC 通道号 (0~15)
|
||||
* @return u16 滤波后的 12 位 ADC 采样值
|
||||
*/
|
||||
u16 ADC_ReadFiltered(u8 channel);
|
||||
|
||||
/**
|
||||
* @brief 判断 KEY_DOWN (P0.3) 当前是否处于按下状态 (ADC 阈值判定)
|
||||
* @return bit 1: 按下 (电压 ~3.7V), 0: 松开/常态 (电压 ~2.0V)
|
||||
*/
|
||||
bit ADC_IsKeyDown(void);
|
||||
|
||||
/**
|
||||
* @brief 获取 P1.3 电池分压测得的实际电压 (毫伏 mV)
|
||||
* @return u16 电池电压,单位 mV (例如 3850 代表 3.85V)
|
||||
*/
|
||||
u16 ADC_GetBatteryVoltage_mV(void);
|
||||
|
||||
/**
|
||||
* @brief 获取电池电量百分比 (0% ~ 100%)
|
||||
* @return u8 电量百分比 (0 ~ 100)
|
||||
*/
|
||||
u8 ADC_GetBatteryPercent(void);
|
||||
|
||||
/**
|
||||
* @brief 检测 USB 充电是否插入
|
||||
* @return bit 0=未充电, 1=充电中
|
||||
* @note TP4054 CHRG 引脚开漏输出,低电平时表示正在充电。
|
||||
* 需要 MCU 内部上拉或外部上拉电阻。
|
||||
*/
|
||||
bit Is_Charging(void);
|
||||
|
||||
#endif // __ADC_H__
|
||||
Reference in New Issue
Block a user