/* 读取 ADC1 通道 8 的原始值(12 位) */
uint16_t ADC1_ReadChannel8(void)
{
uint16_t adc_value = 0;
/* 1. 启动 ADC 转换 */
HAL_ADC_Start(&hadc1);
/* 2. 等待转换完成(超时 100ms) */
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
/* 3. 读取转换结果 */
adc_value = HAL_ADC_GetValue(&hadc1);
}
/* 4. 停止 ADC(单次模式,可选,下次启动前会重新校准) */
HAL_ADC_Stop(&hadc1);
return adc_value;
}
/* 读取电压值(单位:mV) */
float ADC1_GetVoltage(void)
{
uint16_t raw = ADC1_ReadChannel8();
float voltage = (raw * 3300.0f) / 4095.0f; // 参考电压 3.3V,12 位分辨率
return voltage;
}
int main(void)
{
HAL_Init();
SystemClock_Config(); // 系统时钟配置
MX_GPIO_Init();
MX_ADC1_Init();
uint16_t adc_raw;
float adc_v;
while (1)
{
adc_raw = ADC1_ReadChannel8();
adc_v = (adc_raw * 3.3f) / 4095.0f;
// 打印或使用 adc_v ...
HAL_Delay(500);
}
}
通道映射:不同 STM32 系列 ADC1 通道 8 的引脚不同:
F1 系列 → PB0
F4 系列 → PB0 或 PC2(取决于型号)
G0 系列 → 请查阅数据手册。
校准:首次上电建议调用 HAL_ADCEx_Calibration_Start(&hadc1) 进行校准。
多通道:若需要扫描多个通道,需配置扫描模式和 DMA。
————————————————
版权声明:本文为CSDN博主「Miko-one」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42949957/article/details/160283673
|
|