#include "stm32l0xx_hal.h"
#include <stdio.h>
ADC_HandleTypeDef hadc1;
UART_HandleTypeDef huart2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_USART2_Init(void);
void send_str(char *s);
void send_float(float f);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART2_Init();
while (1) {
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 200);
uint32_t val = HAL_ADC_GetValue(&hadc1);
// 正确转换:STM32L0 12位ADC → PPM
float ppm = (val * 10000.0f) / 4095.0f;
send_str("ADC: ");
char buf[10];
sprintf(buf, "%lu", val);
send_str(buf);
send_str(" | PPM: ");
send_float(ppm);
send_str("\r\n");
HAL_Delay(500);
}
}
// ===================== ADC 初始化(只保留兼容参数) =====================
static void MX_ADC1_Init(void)
{
__HAL_RCC_ADC1_CLK_ENABLE();
hadc1.Instance = ADC1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.ContinuousConvMode = DISABLE;
HAL_ADC_Init(&hadc1);
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
// 关键:删掉不支持的 SamplingTime!
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
// ===================== USART2 初始化 =====================
static void MX_USART2_Init(void)
{
__HAL_RCC_USART2_CLK_ENABLE();
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX;
HAL_UART_Init(&huart2);
}
// ===================== GPIO 初始化(PA0 模拟输入) =====================
static void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef gp = {0};
gp.Pin = GPIO_PIN_0;
gp.Mode = GPIO_MODE_ANALOG;
gp.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &gp);
}
// ===================== 串口工具函数 =====================
void send_str(char *s) {
while (*s) HAL_UART_Transmit(&huart2, (uint8_t*)s++, 1, 100);
}
void send_float(float f) {
char buf[20];
sprintf(buf, "%.1f", f);
send_str(buf);
}
void SystemClock_Config(void){}Loading
st-nucleo-l031k6
st-nucleo-l031k6