在adc.c中构建ADC值获取函数
uint16_t getadc2(void)
{
uint16_t adc=0;
HAL_ADC_Start(&hadc2);
adc=HAL_ADC_GetValue(&hadc2);
return adc;
}
uint16_t getadc1(void)
{
uint16_t adc=0;
HAL_ADC_Start(&hadc1);
adc=HAL_ADC_GetValue(&hadc1);
return adc;
}
- 首先定义了一个无符号 16 位整数变量
adc
并初始化为 0。 - 调用
HAL_ADC_Start(&hadc1/2)
启动 ADC2 开始转换操作,hadc1/2
应该是一个已经初始化好的 ADC 句柄,代表 ADC2 外设。 - 接着调用
HAL_ADC_GetValue(&hadc1/2)
获取 ADC1/2 转换后的值,并将其赋值给adc
变量。 - 最后返回
adc
的值。
uint16_t
作为返回值类型的原因
对于 getadc1
函数,使用 uint16_t
作为返回值类型,通常是因为该函数的主要目的是获取并返回 ADC(模数转换器)转换得到的结果,而 ADC 转换的结果一般是一个无符号的 16 位整数。
在adc.h声明
/* USER CODE BEGIN Prototypes */
uint16_t getadc2(void);
uint16_t getadc1(void);
/* USER CODE END Prototypes */
在main.c中adc校准
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
这两行代码调用了 HAL_ADCEx_Calibration_Start
函数,分别对 hadc1
和 hadc2
所代表的 ADC(模数转换器)外设进行校准操作。校准操作对于提高 ADC 转换结果的准确性非常重要,特别是在对测量精度要求较高的应用场景中。
函数参数及含义
HAL_ADCEx_Calibration_Start
函数:这是 STM32 HAL 库中用于启动 ADC 校准功能的函数。&hadc1
和&hadc2
:这是传递给函数的参数,分别是指向ADC_HandleTypeDef
类型结构体变量hadc1
和hadc2
的指针。hadc1
和hadc2
代表了不同的 ADC 实例,通过这两个句柄可以对相应的 ADC 外设进行配置和操作。ADC_SINGLE_ENDED
:这也是传递给函数的参数,表示校准模式为单端输入模式。在单端输入模式下,ADC 测量的是输入信号相对于地的电压值。
在main.c中变量声明
double volt_R37;
double volt_R38;
这两行代码声明了两个 double
类型的变量 volt_R37
和 volt_R38
。在 C 语言里,double
是一种用于表示双精度浮点数的数据类型,它能够存储比 float
类型更精确、范围更大的小数数值。volt_R37
和 volt_R38
用于存储与电阻 R37
和 R38
相关的电压值。
在main.c中通过LCD显示
void lcd_proc(void)
{
volt_R37=getadc2()*3.3/4096;
volt_R38=getadc1()*3.3/4096;
sprintf(buf," R37:%.2fv ",volt_R37);
LCD_DisplayStringLine(Line4,(uint8_t*)buf);
sprintf(buf," R38:%.2fv ",volt_R38);
LCD_DisplayStringLine(Line5,(uint8_t*)buf);
}
// 从 ADC2 获取转换值,并将其转换为对应的电压值存储到 volt_R37 中
// 假设 ADC 为 12 位,满量程为 3.3V,所以将 ADC 值乘以 3.3 再除以 4096(2^12)得到电压值
// 从 ADC1 获取转换值,并将其转换为对应的电压值存储到 volt_R38 中
// 使用 sprintf 函数将 volt_R37 的值格式化为字符串,保留两位小数,并存储到 buf 数组中
// 调用 LCD_DisplayStringLine 函数,将格式化后的字符串显示在 LCD 的第 4 行
// 使用 sprintf 函数将 volt_R38 的值格式化为字符串,保留两位小数,并存储到 buf 数组中
// 调用 LCD_DisplayStringLine 函数,将格式化后的字符串显示在 LCD 的第 5 行