一些思路(电表) ## 多通道电流采集系统 — 完整知识点 + 手把手教学---# 第一部分:你需要掌握的知识点清单## 一、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; i10; 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