✓ 编译通过
📁 Explorer WiFi气象站
📁 Core
main.c edited
stm32f1xx_it.c
system_stm32f1xx.c
📁 Drivers
📁 DHT11
dht11.c
dht11.h
📁 SSD1306
ssd1306.c
ssd1306.h
📁 ESP8266
esp8266.c
esp8266.h
📁 App
app_main.c
sensor_task.c
display_task.c
wifi_task.c
📄 Makefile
📄 cproject.json
main.c ×
dht11.c ×
app_main.c ×
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
/** * @file main.c * @brief WiFi气象站 - 主程序入口 * @note MCU: STM32F103C8T6 | 开发环境: Keil MDK * @author 嵌入式开发平台 自动生成 * @date 2026-07-14 * * @pinout * PA2 → DHT11 DATA (单总线) * PA9 → UART1 TX (调试串口) * PA10 → UART1 RX (调试串口) * PB6 → I2C1 SCL (OLED) * PB7 → I2C1 SDA (OLED) * * @see STM32F103 Datasheet RM0008 Section 8.3 */ #include "stm32f1xx_hal.h" #include "dht11.h" #include "ssd1306.h" #include "esp8266.h" #include "app_main.h" /* 全局句柄 */ UART_HandleTypeDef huart1; I2C_HandleTypeDef hi2c1; /** * @brief 系统时钟配置 * @note HSE 8MHz → PLL × 9 → SYSCLK 72MHz * @ref RM0008 Section 7.3 */ static void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /* 配置 HSE + PLL */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; HAL_RCC_OscConfig(&RCC_OscInitStruct); /* 配置系统时钟 72MHz */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); } /** * @brief 主函数 * @retval int */ int main(void) { /* HAL 初始化 */ HAL_Init(); SystemClock_Config(); /* 外设初始化 */ MX_USART1_UART_Init(); MX_I2C1_Init(); /* 应用初始化 */ DHT11_Init(); SSD1306_Init(&hi2c1); ESP8266_Init(&huart1); /* 启动应用 */ App_Main_Start(); while (1) { App_Main_Loop(); } }
/** * @file main.c * @brief WiFi气象站 - 主程序入口 * @note MCU: STM32F103C8T6 | 开发环境: Keil MDK * @author 嵌入式开发平台 自动生成 * @date 2026-07-14 * * @pinout * PA2 → DHT11 DATA (单总线) * PA9 → UART1 TX (调试串口) * PA10 → UART1 RX (调试串口) * PB6 → I2C1 SCL (OLED) * PB7 → I2C1 SDA (OLED) * * @see STM32F103 Datasheet RM0008 Section 8.3 */ #include "stm32f1xx_hal.h" #include "dht11.h" #include "ssd1306.h" #include "esp8266.h" #include "app_main.h" /* 全局句柄 */ UART_HandleTypeDef huart1; I2C_HandleTypeDef hi2c1; /** * @brief 系统时钟配置 * @note HSE 8MHz → PLL × 9 → SYSCLK 72MHz * @ref RM0008 Section 7.3 */ static void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /* 配置 HSE + PLL */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; HAL_RCC_OscConfig(&RCC_OscInitStruct); /* 配置系统时钟 72MHz */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); } /** * @brief 主函数 * @retval int */ int main(void) { /* HAL 初始化 */ HAL_Init(); SystemClock_Config(); /* 外设初始化 */ MX_USART1_UART_Init(); MX_I2C1_Init(); /* 应用初始化 */ DHT11_Init(); SSD1306_Init(&hi2c1); ESP8266_Init(&huart1); /* 启动应用 */ App_Main_Start(); while (1) { App_Main_Loop(); } }
📌 Trace 3
⚠ Problems 0
■ Output
🔍
SystemClock_Config
HSE 8MHz → PLL × 9 = 72MHz SYSCLK, APB1 = 36MHz
RM0008 §7.3 L30-44
🔍
I2C_HandleTypeDef hi2c1
I2C1: PB6=SCL, PB7=SDA, 400kHz Fast Mode
RM0008 §27.4 L22
🔍
UART_HandleTypeDef huart1
USART1: PA9=TX, PA10=RX, 115200bps
RM0008 §29.5 L21
Build Successful
2.4s ago
Target
芯片 STM32F103C8T6
编译器 arm-gcc 12.2
优化 -Os
耗时 2.4s
19%
Flash
16%
RAM
Flash 12.4 KB / 64 KB
RAM 3.2 KB / 20 KB
■ Build Log
$ arm-none-eabi-gcc -c main.c -o main.o
Compiling main.c... OK
$ arm-none-eabi-gcc -c dht11.c -o dht11.o
Compiling dht11.c... OK
$ arm-none-eabi-gcc -c ssd1306.c -o ssd1306.o
Compiling ssd1306.c... OK
$ arm-none-eabi-gcc -c esp8266.c -o esp8266.o
Compiling esp8266.c... OK
$ arm-none-eabi-gcc -c app_main.c -o app_main.o
Compiling app_main.c... OK
✓ 编译完成: 0 errors, 0 warnings
$ arm-none-eabi-size firmware.elf
text data bss dec hex
12418 128 3120 15666 3d32
✓ 固件生成: WiFi气象站_v1.0.hex