# PowerMonitior **Repository Path**: YOUNGQI-LYQ/power-monitior ## Basic Information - **Project Name**: PowerMonitior - **Description**: 基于STM32F103C8T6的功率计,嵌入式软件完整源码 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-05-21 - **Last Updated**: 2025-06-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: stm32f103c8t6, stm32, ina226, ST7735 ## README # PowerMonitor 项目文档 ## 项目概述 本项目基于 STM32F103C8T6 微控制器,实现了一个电源监控系统,具备电压、电流和功率的实时采集与显示功能。系统通过 INA226 传感器进行高精度电量检测,采用 LCD 屏幕进行数据可视化,并利用定时器中断实现周期性采样。 --- ## 功能特性 - **电量监测**:通过 INA226 实现 ±0.1% 精度的电压(V)、电流(A)和功率(W)检测 - **动态显示**:使用 ST7735 类型 LCD 实时刷新波形和数值 - **定时采样**:1ms 精密定时中断实现数据采集同步 - **异常处理**:包含完整 Cortex-M3 异常向量表处理机制 - **硬件抽象**:提供标准外设驱动接口(SPI/I2C/GPIO) --- ## 目录结构 ```bash project/ ├── app/ # 应用层代码 │ └── main.c # 系统入口 ├── board/ # 硬件驱动模块 │ ├── bsp_ina226.c/h # INA226 传感器驱动 │ ├── bsp_iic.c/h # I2C 总线驱动 │ └── timer.c/h # 定时器管理 ├── bsp/ # 外设驱动 │ ├── LCD/ # LCD 显示模块 │ │ ├── lcd.c/h # 显示核心驱动 │ │ └── pic.h # 图片资源 │ └── uart/ # 串口通信 ├── libraries/ # 第三方库 │ ├── CMSIS/ # ARM 核心支持 │ └── STM32F10x_StdPeriph_Driver/ # ST 标准外设库 ├── module/ # 系统配置 │ ├── stm32f10x_it.c/h # 中断处理 │ └── stm32f10x_conf.h # 外设配置头文件 └── project/MDK/ # Keil MDK 项目文件 ``` --- ## 开发环境 ### 硬件需求 - STM32F103C8T6 核心板(最小系统) - INA226 传感器模块 - ST7735/SSD1306 类型 LCD 屏幕 - USB 转 TTL 下载器 ### 软件依赖 - Keil MDK-ARM v5.34+ - STM32F1xx_DFP 设备支持包 - STM32CubeMX(可选配置工具) - Python 3.x(用于数据可视化脚本) --- ## 快速启动 ### 1. 编译构建 ```bash # 打开项目文件 双击 project/MDK/Project.uvprojx # 配置选项 Target 设置:STM32F103C8, Cortex-M3, 12MHz 晶振 Output:启用 HEX 文件生成 Debug:选择 ST-Link Debugger # 编译 点击 Build 按钮 (F7) ``` ### 2. 烧录程序 ```bash 1. 连接 ST-Link 到 SWD 接口 2. 点击 Download 按钮 (F8) 3. 重置设备运行 ``` ### 3. 运行效果 - LCD 显示实时电压/电流/功率数值 - 每秒更新一次数据波形 - 异常情况触发红色警告提示 --- ## 核心代码解析 ### 1. 定时器配置 (`board/timer.c`) ```c void TIM2_Getsample_Int(u16 arr, u16 psc) { // 配置 1ms 周期中断 TIM_TimeBaseStructure.TIM_Period = arr; // 自动重载值 TIM_TimeBaseStructure.TIM_Prescaler = psc; // 预分频系数 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 使能更新中断 } ``` ### 2. LCD 显示 (`bsp/LCD/lcd.c`) ```c void LCD_ShowChinese16x16(u16 x, u16 y, u8 *s, u16 fc, u16 bc, u8 sizey, u8 mode) { // 支持中英文混合显示 // 支持点阵/块写入两种模式 // 字体库支持 GB2312 编码 } ``` ### 3. 中断处理 (`module/stm32f10x_it.c`) ```c void TIM2_IRQHandler(void) { if(TIM_GetITStatus(TIM2, TIM_IT_Update)==SET) { get_power(); // 获取电量数据 update_display(); // 刷新显示 TIM_ClearITPendingBit(TIM2, TIM_IT_Update); } } ``` --- ## 系统架构 ```mermaid graph TD A[STM32F103C8T6] --> B(INA226 电量检测) A --> C(LCD 显示) A --> D(定时器中断) D --> E[数据采集] E --> F[数据转换] F --> G[UI 刷新] H[异常处理] --> I[HardFault/BUSFault] J[标准外设库] --> K[CMSIS 核心] ``` --- ## 贡献指南 1. Fork 项目仓库 2. 创建 feature 分支 3. 提交 PR 并附带详细说明 4. 通过 CI 检查后合并 --- ## 许可证 本项目采用 GPL 3.0 开源协议 --- ## 常见问题 **Q1: LCD 显示异常?** A: 检查 `lcd_init.h` 中的引脚定义与硬件连接,确认 SPI 时序配置 **Q2: 无法识别 INA226?** A: 使用逻辑分析仪检查 I2C 总线,确认地址 0x40 是否应答 **Q3: 数据波动过大?** A: 检查供电稳定性,建议在 VCC 引脚添加 10uF 滤波电容 --- 文档版本:v1.0 最后更新:2025-05-21