# SJU_EKB_STM32_LEGO **Repository Path**: sparkstudiosju/sju_ekb_stm32_lego ## Basic Information - **Project Name**: SJU_EKB_STM32_LEGO - **Description**: 积件式单片机学习套件--基于stm32F103单片机 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-14 - **Last Updated**: 2025-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SJUDEMO_HAL - STM32F103 板级测试程序 ## 项目概述 SJUDEMO_HAL 是一个基于 STM32CubeMX 开发的 STM32F103C8T6 微控制器板级测试程序。该项目实现了完整的外设演示系统,包含 LED 控制、数码管显示、蜂鸣器控制、按键检测、ADC 采样和串口通信等功能,为 STM32F103 学习提供了全面的参考实现。 ## 硬件配置 ### 核心配置 - **处理器**: STM32F103C8T6 - **主频**: 72MHz - **Flash**: 64KB - **RAM**: 20KB - **开发环境**: STM32CubeMX + HAL库 ### 外设配置 - **LED**: 4个(LED1-LED4,支持不同驱动方式) - **数码管**: 1个7段数码管(通过74HC595控制) - **蜂鸣器**: 1个(PB7) - **按键**: 3个(KEY1-PA5, KEY2-PA4, KEY_MICRO-PA1) - **串口**: USART1 (PA9/PA10, 115200,8,N,1) - **ADC**: ADC1 通道0-1 (PA0/PA1) ## 项目结构 ``` SJUDEMO_HAL/ ├── Core/ │ ├── Inc/ # 头文件目录 │ │ ├── main.h # 主头文件 │ │ ├── led.h # LED控制库 │ │ ├── seg7.h # 数码管驱动库 │ │ ├── buzzer.h # 蜂鸣器控制库 │ │ ├── key.h # 按键检测库 │ │ ├── adc.h # ADC采样库 │ │ ├── uart_comm.h # 串口通信库 │ │ ├── README_*.md # 各模块详细说明文档 │ │ └── stm32f1xx_hal_conf.h │ └── Src/ # 源文件目录 │ ├── main.c # 主程序 │ ├── led.c # LED控制实现 │ ├── seg7.c # 数码管驱动实现 │ ├── buzzer.c # 蜂鸣器控制实现 │ ├── key.c # 按键检测实现 │ ├── adc.c # ADC采样实现 │ ├── uart_comm.c # 串口通信实现 │ └── stm32f1xx_it.c # 中断处理 ├── Drivers/ # STM32 HAL驱动库 ├── MDK-ARM/ # Keil MDK项目文件 ├── platformio.ini # PlatformIO配置文件 ├── Makefile # Make编译文件 ├── SJUDEMO_HAL.ioc # STM32CubeMX配置文件 └── README.md # 本文件 ``` ## 主要功能 ### 1. 开机信息显示系统 - **完整版启动流程**: 7阶段硬件自检和系统信息展示 - **快速启动模式**: 约1秒完成启动过程 - **多外设协同**: LED、数码管、蜂鸣器、串口同时工作 - **详细状态反馈**: 每个阶段都有明确的状态指示 ### 2. LED控制系统 - **智能驱动**: 自动处理不同LED的驱动方式差异 - **简洁API**: 提供 `LED1_ON()` / `LED1_OFF()` 等直观接口 - **转圈圈效果**: 实现美观的LED循环显示效果 - **状态指示**: 用于系统状态和测试进度指示 ### 3. 数码管显示系统 - **74HC595控制**: 通过移位寄存器实现稳定控制 - **数字字母显示**: 支持0-9数字和A-F字母显示 - **自定义段码**: 支持任意段码组合显示 - **循环显示**: 实现数字循环显示效果 ### 4. 串口通信系统 - **中断接收**: 使用环形缓冲区实现非阻塞接收 - **阻塞发送**: 支持字符串和数据发送 - **命令处理**: 支持串口命令控制外设 - **超时机制**: 所有接收函数支持超时设置 ### 5. 按键检测系统 - **多按键支持**: 支持3个独立按键检测 - **状态机处理**: 实现按键按下/释放状态检测 - **防抖处理**: 内置软件防抖功能 ### 6. ADC采样系统 - **多通道采样**: 支持ADC1通道0-1采样 - **定时采样**: 定期读取ADC值并通过串口输出 - **数据格式化**: 提供格式化的ADC数据输出 ## 快速开始 ### 环境要求 - STM32CubeMX 6.x - Keil MDK-ARM 5.x(windows系统) 或 PlatformIO(MACOS系统) - STM32F103C8T6 单片机学习套件 - DAP-LINK下载仿真器 ### 编译和烧录 ####windows系统 使用 Keil MDK-ARM 1. 打开 `MDK-ARM/SJUDEMO_HAL.uvprojx` 2. 编译项目 (F7) 3. 连接DAP-Link调试器 4. 烧录程序到STM32F103C8T6 ####MACOS 使用 PlatformIO ```bash # 安装PlatformIO pip install platformio # 编译项目 pio run # 烧录程序 pio run --target upload ``` #### 使用 Makefile ```bash # 编译项目 make clean && make # 烧录程序(需要配置烧录工具) make flash ``` ### 硬件连接 | 功能 | 引脚 | 说明 | |------|------|------| | LED1 | PC15 | 高电平点亮 | | LED2 | PC14 | 高电平点亮 | | LED3 | PC13 | 低电平点亮 | | LED4 | PB6 | 高电平点亮 | | 蜂鸣器 | PB7 | 高电平开启 | | 数码管 | PB13-15 | 74HC595控制 | | 按键1 | PA5 | 按下为低电平 | | 按键2 | PA4 | 按下为低电平 | | 微动开关 | PA1 | 按下为低电平 | | UART_TX | PA9 | 串口发送 | | UART_RX | PA10 | 串口接收 | | ADC_CH0 | PA0 | ADC通道0 | | ADC_CH1 | PA1 | ADC通道1 | ## 使用说明 ### 串口连接 - **波特率**: 115200 - **数据位**: 8 - **停止位**: 1 - **校验位**: 无 - **流控制**: 无 ### 开机流程 1. 系统上电后自动执行开机信息显示 2. 完成硬件自检后进入正常工作模式 3. 可以通过串口发送命令控制外设 ### 串口命令(数据发送带回车换行) - `LED_ON` - 点亮LED1 - `LED_OFF` - 熄灭LED1 - `BUZZER_ON` - 开启蜂鸣器 - `BUZZER_OFF` - 关闭蜂鸣器 - `HELP` - 显示帮助信息 ### 演示功能 - **LED转圈圈**: 按键未按下时,LED循环显示转圈效果 - **数码管循环**: 按键未按下时,数码管循环显示0-9 - **蜂鸣器提示声**:LED转一定圈数,发出“嘀”一声提示 - **ADC采样**: 定期读取ADC值并通过串口输出 - **按键响应**: 按键按下时切换到串口通信演示模式 ## 详细文档 项目包含详细的技术文档,位于 `Core/Inc/` 目录: - [README_BOOT_INFO.md](SJUDEMO_HAL/Core/Inc/README_BOOT_INFO.md) - 开机信息显示功能说明 - [README_UART.md](SJUDEMO_HAL/Core/Inc/README_UART.md) - 串口通信库使用说明 - [README_LED.md](SJUDEMO_HAL/Core/Inc/README_LED.md) - LED控制系统设计说明 - [README_SEG7.md](SJUDEMO_HAL/Core/Inc/README_SEG7.md) - 数码管驱动说明文档 ## 技术特点 ### 1. 模块化设计 - 每个外设都有独立的驱动库 - 清晰的接口设计和文档说明 - 易于扩展和维护 ### 2. 代码质量 - 遵循STM32 HAL库编程规范 - 完整的注释和文档 - 良好的错误处理机制 ### 3. 实用性强 - 提供完整的板级测试功能 - 适合学习和开发参考 - 支持多种开发环境 ### 4. 扩展性好 - 预留扩展接口 - 支持添加新外设 - 易于定制和修改 ## 故障排除 ### 常见问题 1. **串口无输出** - 检查波特率设置和串口连接 - 确认USB转串口驱动安装正确 2. **LED不亮** - 检查GPIO配置和硬件连接 - 确认LED驱动方式设置 3. **数码管显示异常** - 检查74HC595连接和段码映射 - 确认电源电压是否正常 4. **编译错误** - 确保工具链正确安装 - 检查项目配置是否正确 5. **烧录失败** - 检查烧录器连接和配置 - 确认目标板电源供应 ### 调试方法 1. **串口调试**: 通过串口输出调试信息 2. **LED指示**: 使用LED指示程序运行状态 3. **数码管显示**: 显示关键数据或状态码 4. **蜂鸣器提示**: 通过声音提示重要事件 ## 扩展功能 ### 可能的扩展方向 1. **传感器集成**: 添加温湿度、加速度计等传感器 2. **存储功能**: 添加Flash、EEPROM数据存储 3. **通信扩展**: 添加SPI、I2C、CAN等通信接口 4. **网络功能**: 添加WiFi、蓝牙等网络功能 5. **显示扩展**: 添加LCD、OLED等显示设备 ### 代码优化建议 1. **中断优化**: 优化中断处理函数,减少中断时间 2. **内存管理**: 实现动态内存分配和管理 3. **错误处理**: 增强错误检测和处理机制 4. **功耗管理**: 实现低功耗模式和电源管理 ## 许可证 本项目基于 STMicroelectronics 的 HAL 库开发,遵循相应的开源许可证。 ## 贡献 欢迎提交 Issue 和 Pull Request 来改进这个项目。 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交 GitHub Issue - 发送邮件至项目维护者 --- **注意**: 本项目仅用于学习和参考目的,请根据实际硬件配置调整相关参数。