# 蓝芯物联_STM32 Blue Pill 硬件平台 **Repository Path**: WS3269864565/computer-hardware-integration ## Basic Information - **Project Name**: 蓝芯物联_STM32 Blue Pill 硬件平台 - **Description**: STM32单片机综合实验,含交通灯、风扇、智能家居、门禁、车载卫士五个嵌入式项目。 - **Primary Language**: C - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-05-19 - **Last Updated**: 2026-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32 计算机硬件综合实验 STM32F103C8T6 (Cortex-M3 "Blue Pill") 嵌入式项目集合,涵盖 GPIO、定时器 PWM、中断、SPI、UART、Flash 存储等多种片上外设的综合应用。 **课程**: 大学计算机硬件综合实验 **平台**: Keil MDK uVision 5 + ARMCLANG V6.7 + STM32F10x 标准外设库 V3.5.0 --- ## 项目概览 | 序号 | 工程 | 核心功能 | 技术亮点 | |------|------|----------|----------| | HW4_2 | [Traffic](./HW4_2_Traffic/) | 双向交通灯 + 倒计时 | 8 相位状态机,TM1637 位敲击,非阻塞节拍 | | HW4_3 | [Fan](./HW4_3_Fan/) | 桌面风扇控制器 | 双路硬件 PWM,舵机 50Hz,定时关闭 | | HW4_4 | [SmartHome](./HW4_4_SmartHome/) | 智能家居系统 | 多传感器联动,DHT11,4×4 矩阵键盘,OLED | | HW5 | [DoorLock](./HW5_DoorLock/) | 智能门禁安防 | RC522 硬件 SPI,UART 中断,Flash 持久化,RFID | | HW6 | [CarGuardian](./HW6_CarGuardian/) | 智能车载卫士 | 6 传感器优先级仲裁,EXTI 双路径,Python 上位机 | ## 技术栈 - **MCU**: STM32F103C8T6(128KB Flash / 20KB RAM / 72MHz Cortex-M3) - **IDE**: Keil MDK uVision 5 - **编译器**: ARMCLANG V6.7 - **C 标准**: C99 - **库**: STM32F10x Standard Peripherals Library V3.5.0 - **宏定义**: `STM32F10X_MD`, `USE_STDPERIPH_DRIVER` - **调试/烧录**: ST-Link V2 (SWD: PA13 + PA14) ## 工程结构 每个工程遵循统一的目录布局: ``` <工程名>/ code/ — 应用层源代码 (.c/.h) start/ — CMSIS 核心文件 + 启动汇编 Library/ — STM32F10x 标准外设库(各工程完全相同) Objects/ — 编译输出(gitignore) Listings/ — 链接器清单(gitignore) DebugConfig/ — 调试器配置 *.uvprojx — Keil uVision 工程文件 README.md — 项目详细介绍 ``` ## 快速开始 ### 编译与烧录 1. 用 Keil MDK uVision 5 打开目标工程的 `.uvprojx` 文件 2. 确认编译器选择 ARMCLANG V6.7,目标芯片 STM32F103C8 3. 编译宏已预设:`STM32F10X_MD`, `USE_STDPERIPH_DRIVER` 4. 通过 ST-Link V2 连接 SWD 接口(PA13/SWDIO + PA14/SWCLK + GND + 3.3V) 5. 点击 Build (F7) 编译,Download (F8) 烧录 ### 没有命令行构建 本仓库所有工程均依赖 Keil MDK IDE 构建,没有 Makefile 或 CMake。如需命令行构建,可使用 Keil 的 `UV4.exe` 命令行接口。 ## 通用架构模式 ### 裸机超级循环 所有工程均采用 `while(1)` 超级循环架构,无 RTOS。`main()` 中先调用 `SystemInit()` 配置 72MHz 时钟,再逐一初始化各模块,最后进入无限循环。 ### 非阻塞 vs 阻塞 | 模式 | 使用工程 | 定时方式 | |------|---------|----------| | 非阻塞节拍驱动 | HW4_2, HW5, HW6 | TIM 定时器 → 消费标志 → 状态机 | | 阻塞延时 | HW4_3, HW4_4 | `Delay_ms()` 阻塞主循环 | ### 引脚定义集中管理 每个工程在 `hw_config.h`(或 `traffic_hw.h`)中集中定义所有引脚宏,包含对应的端口、RCC 时钟和模式。 ### 位敲击 vs 硬件外设 | 工程 | TM1637 | OLED | DHT11 | SPI | UART | |------|--------|------|-------|-----|------| | HW4_2 | 位敲击 | — | — | — | — | | HW4_3 | 位敲击 | — | — | — | — | | HW4_4 | — | 位敲击 | 位敲击 | — | — | | HW5 | — | 位敲击 | — | **硬件 SPI1** | **中断 USART1** | | HW6 | — | 位敲击 | 位敲击(脉冲计数) | — | **中断 USART1** | ### 中断与 DMA - **USART1 接收**: 使用中断驱动的环形缓冲区(64 字节),以换行符分隔命令 - **EXTI 中断**: HW6 中火焰(EXTI2)和倾斜(EXTI1)使用 GPIO 外部中断双路径检测 - **定时器中断**: TIM2/TIM4 用于系统节拍,TIM2/TIM3 用于硬件 PWM - 无工程使用 DMA ## 技术演进路线 项目按复杂度递进,每一级引入新的外设和软件模式: ``` LED_TEST ──→ HW4_2 ──→ HW4_3 ──→ HW4_4 ──→ HW5 ──→ HW6 GPIO输出 状态机 硬件PWM 多传感器 SPI+UART 多优先级 最小模板 位敲击 多按键 矩阵键盘 Flash存储 双路径检测 TM1637 舵机 DHT11 RFID Python上位机 ``` ## 外接设备清单(全部工程) ### 传感器 - DHT11 温湿度模块、光敏电阻模块 - 震动开关、倾斜开关、火焰检测、声音检测(LM393)、红外避障 ### 显示 - TM1637 四位数码管 - SSD1306 128×64 OLED(I2C 位敲击) ### 执行器 - 直流风扇(PWM 调速)、SG90 舵机(50Hz PWM) - 5V 继电器 + 12V 电磁锁(fail-secure 断电上锁) - 有源蜂鸣器(NPN 驱动 / 直接 GPIO) - 共阴 RGB LED(红绿蓝 7 色) ### 通信 - RC522 RFID 读卡器(13.56MHz SPI) - USB-TTL CH340 模块(115200 8N1) ### 输入 - 轻触按键 / 微动开关(GPIO 内部上拉) - 4×4 矩阵键盘(行列扫描) ## 供电策略 - **3.3V 轨**: 所有传感器 + OLED + TM1637(低功耗数字模块) - **5V 轨**: 蜂鸣器 + 继电器模块(需要更高电压/电流的模块) - **12V 外部**: 电磁锁(通过继电器隔离,不接入 STM32 电源轨) - 模拟和数字部分共用 GND ## 文档 每个子工程目录下有详细的 README.md 和接线说明: - [HW4_2 接线说明](./HW4_2_Traffic/WIRING.md) - [HW6 接线表](./HW6_CarGuardian/接线表.md) - [CLAUDE.md](./CLAUDE.md) — AI 辅助开发指南 ## 相关工具 - [STM32F10x 标准外设库 V3.5.0](https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html) - [Keil MDK uVision](https://www.keil.com/demo/eval/arm.htm) - [STM32CubeProgrammer](https://www.st.com/en/development-tools/stm32cubeprog.html)(备选烧录工具)