ADC IO写错,分压电压检测可以了

This commit is contained in:
stark1898y 2024-12-09 09:22:59 +08:00
parent cc26414609
commit 79fe76276c
3 changed files with 25 additions and 8 deletions

View File

@ -100,6 +100,7 @@
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.flags.1577723329" name="Linker flags (-Xlinker [option])" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.flags" useByScannerDiscovery="false" valueType="stringList"> <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.flags.1577723329" name="Linker flags (-Xlinker [option])" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.flags" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value="--print-memory-usage"/> <listOptionValue builtIn="false" value="--print-memory-usage"/>
</option> </option>
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.printfloat.1191876922" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.printfloat" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.input.1859223768" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.input"> <inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.input.1859223768" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/> <additionalInput kind="additionalinput" paths="$(LIBS)"/>

View File

@ -163,13 +163,18 @@ int main(void)
// R32_PIN_CONFIG2 // R32_PIN_CONFIG2
// GPIOA_ResetBits(GPIO_Pin_1); // GPIOA_ResetBits(GPIO_Pin_1);
GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeIN_Floating); // GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeIN_Floating);
DelayMs(1000 * 5); DelayMs(1000 * 3);
BSP_ADC_Init(); BSP_ADC_Init();
PRINT("%s\n", VER_LIB); PRINT("%s\n", VER_LIB);
// while (1)
// {
// DelayMs(1000);
// }
CH59x_BLEInit(); CH59x_BLEInit();
HAL_Init(); HAL_Init();
GAPRole_PeripheralInit(); GAPRole_PeripheralInit();

View File

@ -20,6 +20,8 @@ void BSP_ADC_Init(void)
{ {
uint8_t i; uint8_t i;
#if 0
// ±10C没啥参考价值
/* 温度采样并输出 */ /* 温度采样并输出 */
PRINT("\n1.Temperature sampling...\n"); PRINT("\n1.Temperature sampling...\n");
ADC_InterTSSampInit(); ADC_InterTSSampInit();
@ -33,7 +35,9 @@ void BSP_ADC_Init(void)
C25 = (*((PUINT32)ROM_CFG_TMP_25C)); C25 = (*((PUINT32)ROM_CFG_TMP_25C));
PRINT("%d %d %d \n", adc_to_temperature_celsius(adcBuff[i]), adcBuff[i], C25); PRINT("%d %d %d \n", adc_to_temperature_celsius(adcBuff[i]), adcBuff[i], C25);
} }
#endif
#if 1
// VBAT // VBAT
uint32_t CountBat = 0; uint32_t CountBat = 0;
ADC_InterBATSampInit(); ADC_InterBATSampInit();
@ -55,21 +59,27 @@ void BSP_ADC_Init(void)
printf("min_number = %d, max_number = %d\n", min_number, max_number); printf("min_number = %d, max_number = %d\n", min_number, max_number);
CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值 CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值
printf("AverageCountBat = %d\n", CountBat); printf("AverageCountBat = %d\n", CountBat);
#endif
/* 单通道采样选择adc通道3做采样对应 PA13引脚 带数据校准功能 */ /* 单通道采样选择adc通道3做采样对应 PA13引脚 带数据校准功能 */
GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeIN_Floating); GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeIN_Floating);
DelayMs(300);
// 6dB(2倍) (ADC/4096+0.5)*Vref 1.5*Vref 0.525V1.575V 0.6V1.5V // 6dB(2倍) (ADC/4096+0.5)*Vref 1.5*Vref 0.525V1.575V 0.6V1.5V
ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_2); ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_0);
RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差记录到全局变量 RoughCalib_Value中 RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差记录到全局变量 RoughCalib_Value中
PRINT("RoughCalib_Value =%d \n", RoughCalib_Value); PRINT("RoughCalib_Value =%d \n", RoughCalib_Value);
printf("PA13:::::\n"); DelayMs(300);
ADC_ChannelCfg(3);
printf("PA14:::::\n");
ADC_ChannelCfg(4);
for (i = 0; i < 20; i++) for (i = 0; i < 20; i++)
{ {
adcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次 adcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次
// DelayMs(5);
} }
printf("original: "); printf("original: ");
for (i = 0; i < 20; i++) for (i = 0; i < 20; i++)
@ -92,6 +102,7 @@ void BSP_ADC_Init(void)
printf("min=%d, max=%d, diff=%d\n", min_number, max_number, (max_number - min_number)); printf("min=%d, max=%d, diff=%d\n", min_number, max_number, (max_number - min_number));
countadc = (countadc - min_number - max_number) / 18; // 删除最小与最大值 countadc = (countadc - min_number - max_number) / 18; // 删除最小与最大值
printf("countaveradc = %d\n", countadc); printf("countaveradc = %d\n", countadc);
voltage = (double)countadc / 2048 * 1.05; voltage = (double)(countadc) / 2048 * 1.05;
printf("voltage=%1.3lfv\n", voltage); printf("voltage=%1.3lf V\n", voltage);
PRINT("VIN: %1.3lf V\n", voltage * 2);
} }