一些思路(电表)
## 多通道电流采集系统 — 完整知识点 + 手把手教学
---
# 第一部分:你需要掌握的知识点清单
## 一、C语言(单片机端)
### 1. 基础语法
| 知识点 | 说明 | 代码示例 |
|--------|------|----------|
| **变量类型** | uint8_t(0~255)、uint16_t(0~65535)、uint32_t、float | `uint16_t adc_val = 0;` |
| **数组** | 连续存储多个同类型数据 | `uint16_t buf[300];` |
| **for循环** | 重复执行 | `for(int i=0; i<10; i++){}` |
| **if判断** | 条件分支 | `if(x == 1){}else{}` |
| **switch** | 多分支选择 | `switch(cmd){case 0x01: ...}` |
| **#define宏** | 定义常量 | `#define CH_NUM 6` |
| **static变量** | 函数内变量保持值不丢失 | `static int count = 0;` |
| **extern变量** | 声明其他文件的全局变量 | `extern uint8_t flag;` |
| **指针** | 存储地址的变量 | `uint16_t *p = &buf[0];` |
| **结构体** | 打包多个变量 | `struct{int a; int b;} data;` |
| **typedef** | 给类型起别名 | `typedef struct{} MyStruct;` |
| **位运算** | &、\|、>>、<< | `val >> 8` 取高字节 |
### 2. 单片机专用知识
| 知识点 | 说明 |
|--------|------|
| **GPIO** | 引脚输入/输出控制 |
| **ADC** | 模拟量转数字量(12位=0~4095) |
| **DMA** | 直接内存访问,自动搬运数据,不占CPU |
| **串口/UART** | 异步串行通信 |
| **中断** | 硬件事件触发CPU暂停当前任务去处理 |
| **定时器/SysTick** | 系统滴答定时器,`HAL_GetTick()`返回毫秒数 |
| **HAL库** | ST官方硬件抽象层,封装寄存器操作 |
### 3. 算法知识
| 知识点 | 说明 |
|--------|------|
| **滑动平均滤波** | 保存最近N个值取平均,滤除噪声 |
| **校验和** | 数据累加取低8位,验证传输正确性 |
| **状态机** | 根据当前状态决定下一步行为(串口接收用) |
| **ADC转电压** | V = ADC值 × Vref / 分辨率 |
| **大端序** | 高字节在前,低字节在后(网络序) |
---
## 二、Python(上位机端)
| 知识点 | 说明 | 代码示例 |
|--------|------|----------|
| **class类** | 封装数据和方法 | `class Monitor:` |
| **__init__** | 构造函数,创建对象时自动调用 | `def __init__(self):` |
| **self** | 指向实例本身 | `self.var = 0` |
| **tkinter** | Python自带GUI库 | `tk.Tk()` 创建窗口 |
| **Label/Button** | 标签、按钮控件 | `ttk.Label(root, text="hi")` |
| **pack/grid** | 布局管理器 | `.pack(side=tk.LEFT)` |
| **serial库** | 串口通信 | `serial.Serial('COM3', 115200)` |
| **decode** | 字节转字符串 | `data.decode('utf-8')` |
| **split** | 字符串分割 | `"a b c".split()` → `['a','b','c']` |
| **列表推导式** | 简洁创建列表 | `[x for x in list if condition]` |
| **deque** | 双端队列,自动淘汰旧数据 | `deque(m
