STM32与INA226联手打造高精度电能监测系统
1. 为什么你需要一个高精度电能监测系统在折腾各种电子项目的时候你有没有遇到过这样的困惑给一个设备供电想知道它到底吃了多少“电”是省电小能手还是电老虎用万用表测电压电流吧只能看个瞬时值而且接线麻烦数据也没法记录。特别是当你做电池供电的项目比如一个便携设备、一个太阳能充电器或者一个物联网传感器节点精确知道它的能耗是优化续航、排查问题的关键。这时候一个专用的、高精度的电能监测系统就显得特别有用。它就像给你电路的“胃”装了个智能秤能实时、连续地告诉你电压、电流、功率甚至累计消耗了多少能量。而要实现这个功能STM32微控制器和INA226这颗芯片的组合是我用过的最顺手、性价比最高的方案之一。STM32负责大脑的活儿逻辑控制、数据处理、显示通信INA226则是专业的“电力计量员”天生就是干精密测量电压电流的。把它们俩凑一块就能打造出一个性能强悍、成本可控的电能监测仪。这个系统能干嘛呢应用场景太多了。你可以用它来监测你DIY的3D打印机加热头功耗评估不同固件的省电效果可以把它串在无人机电池和电调之间分析每次飞行的能耗曲线可以给家里的路由器、NAS做个“电表”看看它一天到底用几度电甚至可以用来做简单的电池容量测试仪。说白了任何你想量化其电能消耗的直流设备这个系统都能派上用场。接下来我就手把手带你从硬件连接到软件驱动再到实际调优把这个系统搭建起来。2. 核心器件选型与硬件连接实战工欲善其事必先利其器。我们先来认识一下这次项目的两位主角并搞清楚怎么把它们正确地连接起来。2.1 认识你的“大脑”与“感官”STM32与INA226STM32F103C8T6也就是大家常说的“蓝莓派”或“最小系统板”的核心相信搞嵌入式的小伙伴都不陌生。它基于ARM Cortex-M3内核主频72MHz拥有足够的计算能力和丰富的外设比如我们马上要用到的I2C和USART关键是价格亲民资料海量是入门和快速原型开发的绝佳选择。重点在于INA226。这是一颗TI德州仪器出品的双向电流/功率监测芯片。它的厉害之处在于内部集成了一个高精度的模数转换器ADC能同时测量总线电压和流经一个外部“分流电阻”上的压降从而计算出电流。它自己就能根据测得的电压和电流实时计算出功率大大减轻了单片机的计算负担。其I2C接口使得连接非常简洁精度也很高比如总线电压测量精度在±0.1%左右对于大部分应用绰绰有余。你需要准备的核心材料清单如下STM32F103C8T6最小系统板 1块INA226模块或芯片自制PCB 1个0.1欧姆或0.01欧姆的分流电阻根据你的电流量程选择 1个OLED显示屏I2C接口128x64 1块一些按键、LED、电阻电容等辅助元件杜邦线若干2.2 硬件连接一幅清晰的接线图硬件连接的核心是I2C总线。我们把STM32和INA226、OLED屏都挂在这条总线上。下面我给出一个详细的接线表格你可以对照着你的开发板引脚一一连接。功能模块STM32F103C8T6引脚连接目标说明I2C1时钟 (SCL)PB6INA226模块的SCL引脚OLED的SCL引脚连接时钟线需接上拉电阻通常模块已集成I2C1数据 (SDA)PB7INA226模块的SDA引脚OLED的SDA引脚连接数据线需接上拉电阻INA226电源3.3V / GNDINA226模块的VCC / GND为其提供3.3V工作电压INA226测量端-串联在待测电路中VIN接电源正极输入VIN-接负载正极分流电阻接在VIN-和GND之间OLED电源3.3V / GNDOLED模块的VCC / GND供电调试串口PA9 (TX) / PA10 (RX)USB转TTL模块的RX / TX用于程序打印调试信息用户按键PA0按键一端另一端接地通过下拉电阻配置按下为高电平状态LEDPB0, PB1LED阳极阴极串联电阻后接地低电平点亮或高电平点亮取决于电路设计注意关于INA226的测量连接这是最关键也最容易出错的一步。简单理解你想测哪个设备的用电就把这个设备负载的供电回路“断开”把INA226的**VIN和VIN-**串进去。电源正极接VIN负载正极接VIN-。那个小小的分流电阻Shunt Resistor是接在INA226的VIN-和芯片本身的GND引脚之间的。电流流过这个电阻会产生一个微小的压降INA226就是通过测量这个压降来算电流的。所以整个待测电流实际上流经了“电源正极 - VIN - 芯片内部 - VIN- - 负载 - 电源负极”这个回路。我刚开始玩的时候在这里踩过坑错误地把负载接在了VIN和电源之间导致电流根本没流过采样电阻测出来的电流永远是零。务必对照芯片数据手册的典型应用电路图反复确认。3. 软件驱动开发让INA226“开口说话”硬件连好了接下来就是让STM32通过I2C协议去配置INA226并读取数据。我们使用STM32CubeMX配合HAL库来开发这样效率最高。3.1 I2C外设初始化与基础读写函数首先用STM32CubeMX配置好I2C1为标准模式100kHz或400kHz引脚自动映射到PB6和PB7。生成代码后HAL库已经为我们初始化好了hi2c1这个结构体。INA226的驱动核心就是几个寄存器读写函数。下面是我在实际项目中打磨过的代码比原始文章里的更健壮增加了超时和错误判断。// ina226.h 部分定义 #define INA226_ADDR (0x40 1) // 假设A0A1GND7位地址为0x40HAL库需要左移1位 #define INA226_REG_CONFIG 0x00 #define INA226_REG_SHUNT_VOLTAGE 0x01 #define INA226_REG_BUS_VOLTAGE 0x02 #define INA226_REG_POWER 0x03 #define INA226_REG_CURRENT 0x04 #define INA226_REG_CALIBRATION 0x05 #define INA226_REG_MASK_ENABLE 0x06 #define INA226_REG_ALERT_LIMIT 0x07 #define INA226_REG_MANUFACTURER_ID 0xFE #define INA226_REG_DIE_ID 0xFF // ina226.c /** * brief 向INA226指定寄存器写入一个16位数据 * param reg_addr: 寄存器地址 * param data: 要写入的16位数据 * retval HAL_OK 成功其他 失败 */ HAL_StatusTypeDef INA226_WriteRegister(uint16_t reg_addr, uint16_t data) { uint8_t buf[2] {data 8, data 0xFF}; // 高位在前 return HAL_I2C_Mem_Write(hi2c1, INA226_ADDR, reg_addr, I2C_MEMADD_SIZE_8BIT, buf, 2, 100); } /** * brief 从INA226指定寄存器读取一个16位数据 * param reg_addr: 寄存器地址 * param p_data: 存储读取数据的指针 * retval HAL_OK 成功其他 失败 */ HAL_StatusTypeDef INA226_ReadRegister(uint16_t reg_addr, uint16_t *p_data) { uint8_t buf[2]; HAL_StatusTypeDef status; status HAL_I2C_Mem_Read(hi2c1, INA226_ADDR, reg_addr, I2C_MEMADD_SIZE_8BIT, buf, 2, 100); if (status HAL_OK) { *p_data (buf[0] 8) | buf[1]; // 组合成16位数据 } return status; }3.2 芯片初始化与校准精度从这里开始INA226上电后需要配置工作模式和校准值这是保证测量精度的基石。配置寄存器决定了ADC的采样次数、平均模式等校准寄存器则与你的分流电阻值和期望的电流量程直接相关。/** * brief 初始化并配置INA226 * param shunt_resistor_mohm: 分流电阻值单位毫欧 (例如 10毫欧 0.01欧) * param max_current_a: 期望测量的最大电流单位安培 * retval 无 */ void INA226_Init(float shunt_resistor_mohm, float max_current_a) { uint16_t config 0; uint16_t cal_value 0; // 1. 配置寄存器设置平均次数、转换时间、工作模式 // 这里示例16次平均总线电压转换时间1.1ms分流电压转换时间1.1ms连续测量模式 config (0x04 9) | // 平均次数 16 (0x04 6) | // 总线电压转换时间 1.1ms (0x04 3) | // 分流电压转换时间 1.1ms (0x07); // 模式连续测量分流和总线电压 INA226_WriteRegister(INA226_REG_CONFIG, config); HAL_Delay(10); // 2. 计算并设置校准寄存器值 (这是最关键的一步) // 公式Cal 0.00512 / (Current_LSB * R_shunt) // 其中 Current_LSB Max_Current / 2^15 // 我们通常先确定一个方便的Current_LSB再反推Cal float current_lsb max_current_a / 32768.0; // 2^15 32768 // 为了计算方便我们通常取一个规整的Current_LSB比如1mA, 10uA等 // 例如希望最大测5A则 current_lsb 5 / 32768 ≈ 152.6uA // 我们可以取 current_lsb 152.587890625uA (即 5.0/32768) // 但为了代码简单我们先按公式直接计算Cal cal_value (uint16_t)(0.00512 / (current_lsb * (shunt_resistor_mohm / 1000.0))); INA226_WriteRegister(INA226_REG_CALIBRATION, cal_value); // 3. 验证芯片ID (可选但推荐) uint16_t manu_id 0, die_id 0; INA226_ReadRegister(INA226_REG_MANUFACTURER_ID, manu_id); INA226_ReadRegister(INA226_REG_DIE_ID, die_id); if (manu_id 0x5449) { // TI的厂商ID printf(INA226 Init OK. Manufacturer ID: 0x%04X, Die ID: 0x%04X\r\n, manu_id, die_id); } else { printf(INA226 Init FAILED! Check connection.\r\n); } }校准计算这里可能有点绕。我举个例子如果你用的是0.01欧10毫欧的分流电阻想测最大5A的电流。那么Current_LSB最好设置为5A / 32768 152.59微安。校准值Cal 0.00512 / (0.00015259 * 0.01) ≈ 3355。把这个值写入校准寄存器芯片内部就会用这个基准去计算电流和功率。你不需要自己再去换算直接读出的寄存器值乘以这个Current_LSB就是实际电流了。3.3 数据读取与转换获取实际物理值配置好之后读取数据就很简单了。INA226会自动更新电压、电流、功率寄存器。/** * brief 读取总线电压 * retval 总线电压单位伏特(V) */ float INA226_ReadBusVoltage(void) { uint16_t raw_voltage 0; INA226_ReadRegister(INA226_REG_BUS_VOLTAGE, raw_voltage); return (float)raw_voltage * 0.00125f; // 1.25mV per LSB } /** * brief 读取电流值 (有符号正负代表方向) * retval 电流值单位安培(A) */ float INA226_ReadCurrent(void) { int16_t raw_current 0; // 注意这里用有符号16位整数 uint16_t raw_reg 0; INA226_ReadRegister(INA226_REG_CURRENT, raw_reg); raw_current (int16_t)raw_reg; // 直接转换为有符号数芯片输出为二进制补码 // 假设我们初始化时计算的Current_LSB为152.59uA float current_lsb 5.0f / 32768.0f; // 对应最大5A量程 return (float)raw_current * current_lsb; } /** * brief 读取功率值 * retval 功率值单位瓦特(W) */ float INA226_ReadPower(void) { uint16_t raw_power 0; INA226_ReadRegister(INA226_REG_POWER, raw_power); // 功率LSB 25 * Current_LSB 假设Current_LSB为152.59uA float power_lsb 25.0f * (5.0f / 32768.0f); // 约等于0.0232W/LSB return (float)raw_power * power_lsb; }在实际编程中我更喜欢把Current_LSB和Power_LSB这些换算系数定义为全局常量避免每次读取都重复计算。你也可以把这些读取函数封装到一个任务里定时比如每秒10次执行然后把最新的电压、电流、功率值更新到全局变量中供显示、存储或上传使用。4. 系统集成与性能优化策略驱动调通了读到了数据这只是一个开始。要把这个监测系统做得稳定、好用、数据可信还需要在系统集成和细节优化上下功夫。4.1 多任务管理与数据流设计我们的系统通常不止是读数据还要显示、响应按键、记录数据、通过串口或无线发送。在STM32上我强烈推荐使用一个简单的状态机或者实时操作系统RTOS比如FreeRTOS。即使不用RTOS用一个定时器中断来周期性地触发数据采集在主循环中处理显示和通信也是清晰的做法。// 示例使用FreeRTOS创建两个任务 void Task_Measure(void *pvParameters) { TickType_t xLastWakeTime xTaskGetTickCount(); const TickType_t xFrequency pdMS_TO_TICKS(100); // 每100ms测量一次 while (1) { // 1. 触发一次测量如果配置为连续模式直接读即可 // 2. 读取电压、电流、功率原始值 system_data.bus_voltage INA226_ReadBusVoltage(); system_data.current INA226_ReadCurrent(); system_data.power INA226_ReadPower(); // 3. 累计算能耗瓦时 system_data.energy_wh (system_data.power * 0.1 / 3600.0); // 100ms间隔 // 4. 发送到消息队列通知显示任务更新 xQueueSend(xDataQueue, system_data, 0); vTaskDelayUntil(xLastWakeTime, xFrequency); } } void Task_Display(void *pvParameters) { SystemData_t recv_data; while (1) { if (xQueueReceive(xDataQueue, recv_data, portMAX_DELAY) pdTRUE) { OLED_Clear(); OLED_ShowString(0, 0, V:, 16); OLED_ShowFloat(20, 0, recv_data.bus_voltage, 2, 16); // 显示两位小数 OLED_ShowString(0, 16, I:, 16); OLED_ShowFloat(20, 16, recv_data.current, 3, 16); // 显示三位小数 OLED_ShowString(0, 32, P:, 16); OLED_ShowFloat(20, 32, recv_data.power, 2, 16); OLED_ShowString(0, 48, E:, 16); OLED_ShowFloat(20, 48, recv_data.energy_wh, 4, 16); // 显示累计能量 OLED_Refresh(); } } }这样的设计测量和显示解耦系统响应更流畅。即使显示刷新慢一点也不会丢失测量数据。4.2 精度提升的实战技巧滤波与校准INA226本身精度很高但实际电路中的噪声、温漂会影响读数稳定性。这里分享几个我实测有效的技巧1. 软件滤波最简单的就是多次采样取平均。INA226硬件本身可以配置多次平均我们也可以在软件里做滑动平均滤波。#define FILTER_SIZE 10 float voltage_buffer[FILTER_SIZE] {0}; uint8_t buffer_index 0; float Filter_Voltage(float new_sample) { voltage_buffer[buffer_index] new_sample; buffer_index (buffer_index 1) % FILTER_SIZE; float sum 0; for (int i 0; i FILTER_SIZE; i) { sum voltage_buffer[i]; } return sum / FILTER_SIZE; }对于变化不快的功耗监测这种滤波能有效消除读数跳动让显示的数字看起来更稳。2. 零点校准在系统上电后、没有电流流过时即空载状态读取一次电流值把这个值作为“零点偏移”保存起来。后续所有电流读数都减去这个偏移量。这可以消除分流电阻和INA226自身带来的微小失调误差。float current_offset 0.0f; void Calibrate_Current_Zero(void) { // 确保此时电路处于空载状态 HAL_Delay(100); float sum 0; for (int i 0; i 100; i) { sum INA226_ReadCurrent(); HAL_Delay(10); } current_offset sum / 100.0f; printf(Current zero offset calibrated: %.6f A\r\n, current_offset); } // 读取电流时 float Get_Filtered_Current(void) { return INA226_ReadCurrent() - current_offset; }3. 分流电阻的选择与发热这是硬件上影响精度和量程的关键。电阻值越大同样的电流产生的压降越大测量对小电流越灵敏但电阻自身功耗也越大PI²R发热会引起阻值变化影响精度。我的经验是在满足最大电流压降不超过INA226的输入范围通常±81.92mV的前提下尽量选小的阻值。比如测10A电流用0.001欧1毫欧的电阻压降才10mV功耗0.1W发热可控。同时要选择低温漂系数比如±50ppm/°C的精密采样电阻。4.3 扩展功能让你的监测仪更强大基础功能稳定后可以玩些花样让这个系统价值更大。数据记录与导出给STM32挂上一个SD卡模块或SPI Flash。可以定时将电压、电流、功率、时间戳记录到文件中生成CSV格式。之后把卡插到电脑上用Excel或Python画出漂亮的功耗曲线图分析设备的启动峰值、待机功耗等非常直观。阈值报警与自动控制利用INA226自带的警报功能ALERT引脚。你可以通过编程设置一个功率或电流上限。当功耗超标时INA226的ALERT引脚会输出低电平你可以将这个引脚接到STM32的外部中断引脚上。STM32收到中断后可以立刻切断一个MOSFET开关保护后端设备或者让蜂鸣器鸣叫、LED闪烁。这个反应速度比软件轮询快得多适合做硬件级的保护。无线传输加上一个ESP-01SESP8266或更高级的ESP32模块通过串口将数据发送给它。ESP模块连接Wi-Fi把实时功耗数据上报到物联网平台比如ThingsBoard、Home Assistant或者你自己的服务器。这样你就能在手机APP或网页上远程监控设备的用电情况了这才是物联网电能监测的完全体。我在一个太阳能路灯项目里就用了这个组合。STM32INA226监测电池的充放电电压、电流计算剩余容量并通过ESP32-C3将数据发到云平台。管理员在办公室就能看到全市几百盏路灯的电池健康状况哪盏灯该维护了一目了然。这套方案的稳定性和成本控制都得到了验证。5. 常见问题排查与调试心得做项目不可能一帆风顺尤其是涉及精密测量。我把之前踩过的坑和解决办法总结一下你遇到问题时可以快速对照。问题1I2C通信失败读不到芯片ID。检查接线SDA、SCL是否接反电源和地是否接好I2C总线上必须有两个上拉电阻通常4.7kΩ到10kΩ模块如果自带就不需要。检查地址INA226的I2C地址由A0和A1引脚决定。如果都接地7位地址是0x40。但HAL库的读写函数通常要求传入的是8位地址即7位地址左移1位所以实际传入的写地址是0x40 1 0x80。用逻辑分析仪或示波器抓一下I2C波形是最直接的调试方法。代码排查确保HAL_I2C_Init()成功并且时钟频率配置正确。尝试降低I2C速度比如先设为100kHz。问题2电流测量值始终为0或非常小。检查采样电阻连接这是最常见的原因确保电流确实流过了采样电阻。用万用表电阻档测量VIN-引脚和芯片GND引脚之间的电阻应该等于你选用的采样电阻值如0.01欧。如果开路或阻值不对说明焊接或连接有问题。检查电路串联方式再次确认“电源正 - VIN - 芯片 - VIN- - 负载正”这个回路是否正确。负载必须接在VIN-和电源负极之间。校准值计算核对Calibration寄存器的值是否计算正确。一个快速验证方法让一个已知的稳定电流比如用电子负载设置1A流过系统看看读出的电流值是否接近1A。偏差大的话调整校准值。问题3读数不稳定跳动大。硬件滤波在INA226的VIN和VIN-引脚靠近芯片处并联一个0.1uF和10uF的电容到地可以滤除高频噪声。软件滤波如前所述启用芯片内部的硬件平均配置寄存器和增加软件滑动平均。电源噪声确保给INA226供电的3.3V是干净的。如果是从开关电源比如DCDC模块来的纹波可能较大。可以尝试用线性稳压器LDO单独给INA226供电或者增加LC滤波电路。地线干扰确保采样电阻的地也就是INA226的GND和STM32的GND是“单点共地”避免测量回路的地电流在PCB走线上产生压降影响测量。问题4测量大电流时采样电阻发热严重。计算电阻功耗功耗 P I² * R。对于0.01欧电阻10A电流时功耗为1W必须选择功率足够大的电阻比如2512封装的1W或2W电阻并且考虑散热必要时贴在PCB的铜箔上或加散热片。考虑更小的阻值如果电流真的很大可以考虑使用0.001欧1毫欧的电阻。但要注意压降变小了对INA226的测量分辨率要求更高需要更仔细地校准。调试时善用STM32的串口打印功能把每一步的配置值、读回来的原始寄存器数据都打印出来和INA226数据手册的预期值做对比。很多时候问题就出在一个字节的错误配置上。另外准备一个可靠的基准源比如高精度的可调电源和万用表进行对比测试是验证系统精度的唯一标准。我自己的第一个版本就是通过和六位半台表反复对比才把整体误差优化到了1%以内对于DIY项目来说这已经是非常不错的成绩了。

相关新闻

解锁暗黑破坏神II角色定制新维度:Diablo Edit2全面指南

解锁暗黑破坏神II角色定制新维度:Diablo Edit2全面指南

解锁暗黑破坏神II角色定制新维度:Diablo Edit2全面指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 从基础操作到高级定制的完整路径 在暗黑破坏神II的冒险旅程中,角色…

2026/7/3 22:46:19 阅读更多 →
如何用3个技巧终结Mac窗口混乱?Topit让多任务效率提升67%的秘密

如何用3个技巧终结Mac窗口混乱?Topit让多任务效率提升67%的秘密

如何用3个技巧终结Mac窗口混乱?Topit让多任务效率提升67%的秘密 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 每天在10个以上窗口间切换的你&…

2026/7/4 1:16:37 阅读更多 →
中文NLP小白必看:StructBERT情感分类入门

中文NLP小白必看:StructBERT情感分类入门

中文NLP小白必看:StructBERT情感分类入门 1. 引言:从零开始理解中文情感分析 你是否曾经想过,电脑是怎么读懂我们文字中的喜怒哀乐?当你在电商平台看到"这个产品太棒了!"的评论时,系统是如何自…

2026/5/17 4:53:36 阅读更多 →

最新新闻

Label Studio预标注数据导入指南与效率优化

Label Studio预标注数据导入指南与效率优化

1. 为什么需要导入预标注数据 在数据标注的实际工作流程中,预标注数据(Pre-annotated Data)已经成为提升标注效率的关键技术手段。想象一下这样的场景:你的团队需要标注10万张医疗影像,如果从零开始手动标注&#xff0…

2026/7/4 16:52:53 阅读更多 →
AI如何提升文献综述效率:智能工具paperxie实战解析

AI如何提升文献综述效率:智能工具paperxie实战解析

1. 文献综述的痛点与AI解决方案写文献综述是每个科研工作者必经的"痛苦仪式"。我至今记得读博时为了完成一篇综述,连续两周泡在图书馆翻纸质期刊的日子。传统文献综述流程通常包括:确定主题→检索文献→阅读筛选→分类整理→撰写成文。这个过程…

2026/7/4 16:48:52 阅读更多 →
基于计算机视觉的水果自动分类系统设计与实现

基于计算机视觉的水果自动分类系统设计与实现

1. 水果分类系统的技术背景与需求分析 水果自动分类系统在现代化农业生产和食品加工领域扮演着越来越重要的角色。传统的人工分类方式不仅效率低下(每小时仅能处理300-500个水果),而且分类结果容易受到工人疲劳、主观判断等因素影响&#xff…

2026/7/4 16:44:51 阅读更多 →
终极指南:如何用VRRTest免费检测显示器可变刷新率功能

终极指南:如何用VRRTest免费检测显示器可变刷新率功能

终极指南:如何用VRRTest免费检测显示器可变刷新率功能 【免费下载链接】VRRTest A small utility I wrote to test variable refresh rate on Linux. Should work on all major OSes. 项目地址: https://gitcode.com/gh_mirrors/vr/VRRTest 想要确认你的显示…

2026/7/4 16:42:51 阅读更多 →
AI辅助文献综述写作:Paperxie系统架构与实操指南

AI辅助文献综述写作:Paperxie系统架构与实操指南

1. 项目背景与核心价值作为一名在学术写作领域深耕多年的研究者,我深刻理解本科阶段学生在撰写文献综述时面临的困境。每次看到学生面对海量文献手足无措的样子,就让我想起自己当年熬夜整理参考文献的狼狈经历。这正是Paperxie诞生的初衷——用AI技术降低…

2026/7/4 16:40:50 阅读更多 →
大模型指纹识别技术:原理、攻防与实战应用

大模型指纹识别技术:原理、攻防与实战应用

1. 项目概述:当大模型学会“签名”,我们如何识别与应对? 最近在跟几个做AI安全的朋友聊天,大家不约而同地提到了一个词:“LLM指纹识别”。这听起来有点玄乎,指纹不是人的生物特征吗,怎么大语言模…

2026/7/4 16:38:50 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻