STM32F103移植AD7124 24位ADC驱动:从SPI配置到校准全流程
简介AD7124高精度ADC的STM32F103驱动资源面向需要快速集成该芯片的嵌入式开发者与仪表、传感器数据采集项目人员解决官方资料零散、网上索取无人回应等初期调试难题。工程基于Keil5以模拟SPI方式控制AD7124已完成6通道、双极性、全功率采样、外部参考电压的配置并全部调通代码包含初始化、通道配置、数据读取等完整流程采用模块化函数设计层次清晰适合新手逐段学习与二次移植。压缩包共215个文件以C源码、H头文件、uvprojx工程文件为主并附有hex/axf烧录文件、map/lst编译映射、bat清理脚本等总大小6.18MB基本对应开发、编译、烧录、备份等不同环节目录内还保留了部分编译中间文件便于对照检查。目前已有6212人学习/下载对需要稳定驱动或调试样机的工程师而言是一份经过实践验证、可显著减少排错成本的实用代码包。1. 拿到手就能跑的24位ADC驱动AD7124在STM32F103上的完整移植前阵子我在做一个小型称重采集模块主控用了 STM32F103前端传感器接到 AD7124 这颗 24 位高精度 ADC 上。按照数据手册配寄存器折腾了两天始终读不到稳定数据要么寄存器写不进去要么 DRDY 信号像焊死了一样一动不动。后来换到一份已经全部调通的 AD7124 驱动源码整套流程从 SPI 初始化、寄存器配置、数据读取到校准和电压换算都是串联好的直接在工程里编译下载不到半小时就跑出了连续稳定的码值。这份驱动解决的正是“别自己从零肝寄存器配置”的问题适合刚接触 ADC 驱动开发的工程师照着接线跑通也适合做称重、温度、压力采集的老手直接拿去改成自己的通道结构。2. 硬件连接与SPI通信先把引线和时序搞清楚2.1 引脚分配与接线要点AD7124 是一颗 24 位 Σ-Δ 型 ADC对外接口是标准四线 SPI另外还有数据就绪信号 DRDY 和复位信号 RESET。STM32F103 的 SPI 外设可以很方便地和它对接。我调试时用的接线方式如下表AD7124信号STM32F103引脚说明SCLKPA5SPI1 时钟空闲电平为高MOSIPA7主机输出从机输入MISOPA6主机输入从机输出CSPA4软件片选低电平有效DRDYPB0数据就绪拉低后表示可读数据RESETPB1低电平复位正常运行时拉高接线时我给 AD7124 的模拟电源和数字电源各安排了一路 3.3V参考电压 REFIN 单独接了一个 2.5V 基准源。这颗芯片支持 2.7V 到 5V 供电和 F103 的 3.3V 逻辑电平可以直接相连不需要额外加电平转换芯片。但参考电压一定要干净后边读数抖动的时候最先怀疑的往往不是代码而是基准源上的纹波。另一个容易踩的点是 SPI 极性AD7124 要求的是 CPOL1、CPHA1也就是模式 3SCLK 空闲为高第二个边沿采样。如果照抄其他 ADC 工程里的模式 0结果就是寄存器读回一堆 0xFF看起来像通信失败其实是时序不匹配。2.2 SPI初始化与字节收发我先用标准外设库把 SPI1 初始化好重点设置波特率分频、CPOL 和 CPHA。下面这段代码是调试时用的初始化函数注释里标出了关键参数。void AD7124_SPI_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); // SCK: PA5, MOSI: PA7 推挽复用输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // MISO: PA6 浮空输入 GPIO_InitStructure.GPIO_Pin GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); // CS: PA4 普通推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_4); SPI_InitStructure.SPI_Direction SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode SPI_Mode_Master; SPI_InitStructure.SPI_DataSize SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL SPI_CPOL_High; // 模式3SCLK空闲高 SPI_InitStructure.SPI_CPHA SPI_CPHA_2Edge; // 第二个边沿采样 SPI_InitStructure.SPI_NSS SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler SPI_BaudRatePrescaler_16; SPI_InitStructure.SPI_FirstBit SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial 7; SPI_Init(SPI1, SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); }这段代码里SPI1 挂载在 APB2 总线上如果系统时钟是 72MHz经过 16 分频后 SCLK 频率就是 72MHz/164.5MHz。AD7124 的 SCLK 上限通常在十几兆赫兹4.5MHz 足够安全。如果板子上的 F103 跑的是 36MHz那么分频系数还是 16得到 2.25MHz。实际调试时可以再看 SCK 波形别让频率超过芯片手册标称值。底层收发函数是唯一直接操作 SPI 寄存器的入口uint8_t AD7124_WriteReadByte(uint8_t data) { while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) RESET); SPI_I2S_SendData(SPI1, data); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) RESET); return SPI_I2S_ReceiveData(SPI1); }这个函数先等发送数据寄存器空再写入一个字节然后等接收数据寄存器非空取回从 MISO 收到的数据。因为 SPI 是全双工每发送一个字节的同时一定会收到一个字节所以读操作要发送一个哑字节写操作则可以忽略接收到的返回值。如果这个函数卡死大概率是 SPI 外设没有使能或者 GPIO 复用配置有冲突。还有一个很实用的自检方法写一段循环把 0x00 到 0xFF 发出去同时观察 MISO 的回读值配合示波器看 SCLK、MOSI、MISO 三根线上的波形能很快定位到底是硬件没接好还是模式配错。我在第一次调通这套驱动时就是先用示波器确认了 CS 拉低期间 SCLK 确实空闲在高电平才敢放心往下走。3. 寄存器配置与初始化流程从复位到建立测量通道3.1 关键寄存器与初始化序列AD7124 的初始化本质上就是“往通信寄存器写命令再写数据”的循环。我先用宏把几个关键寄存器地址定义出来然后通过一个统一的写寄存器函数向芯片写入配置。这里要注意不同型号的 AD7124-4 和 AD7124-8 寄存器地址会有差异下面的宏是我在某个具体型号上调通时抄来的移植时务必对照数据手册核对一遍。#define AD7124_REG_ADC_CTRL 0x01 #define AD7124_REG_DATA 0x02 #define AD7124_REG_MODE 0x03 #define AD7124_REG_CFG0 0x0F #define AD7124_REG_FILT0 0x10 #define AD7124_REG_CH0 0x20写寄存器函数的核心是“CS 拉低期间先发命令字节再发数据字节”。命令字节的最高位为写标志低 5 位是寄存器地址。如果中途 CS 拉高整次通信会被芯片丢弃所以我把 CS 控制封装在函数内部避免业务代码里到处散落片选操作。void AD7124_WriteRegister(uint8_t reg, uint16_t value) { uint8_t cmd; AD7124_SPI_CS_Low(); cmd (1 7) | (reg 0x1F); // 写命令 AD7124_WriteReadByte(cmd); if ((reg AD7124_REG_CFG0) (reg AD7124_REG_FILT0 7)) { // 16位寄存器先写高字节再写低字节 AD7124_WriteReadByte((value 8) 0xFF); AD7124_WriteReadByte(value 0xFF); } else { // 通道寄存器等只写低字节就够 AD7124_WriteReadByte(value 0xFF); } AD7124_SPI_CS_High(); }这个封装缩短了后续初始化代码的长度也让寄存器写入变得统一。初始化时我按固定顺序做先复位芯片再配置 ADC 控制寄存器、配置通道、配置滤波器最后使能通道。下面是一段典型初始化代码void AD7124_Init(void) { // 1. 复位RESET引脚拉低至少10ms再拉高并等待 GPIO_ResetBits(GPIOB, GPIO_Pin_1); delay_ms(10); GPIO_SetBits(GPIOB, GPIO_Pin_1); delay_ms(20); // 2. 配置ADC控制寄存器开启内部参考关闭省电模式 AD7124_WriteRegister(AD7124_REG_ADC_CTRL, 0x0001); // 3. 配置通道0AIN0/AIN1差分输入PGA增益1不带缓冲 AD7124_WriteRegister(AD7124_REG_CFG0, 0x0001); // 4. 配置滤波器输出速率约50Hz顺便抑制工频干扰 AD7124_WriteRegister(AD7124_REG_FILT0, 0x000080); // 5. 使能通道0 AD7124_WriteRegister(AD7124_REG_CH0, 0x0001); }这里给出的寄存器值是我调通用的配置具体数值需要根据实际输入范围和输出速率调整。我强烈建议在初始化完成后立刻把所有寄存器回读一遍确认写入的东西没有被芯片丢掉。回读函数和写函数对称读命令和写命令的区别只是最高位换成 0。3.2 单通道与连续模式配置差异AD7124 支持单次转换和连续转换两种模式。单次转换是触发一次、读一次适合对功耗敏感的设备连续转换则是芯片按设定好的输出速率持续转换DRDY 周期性拉低适合称重、温度采集这类需要连续采样的场景。void AD7124_SetContinuousMode(void) { // 模式寄存器写0表示连续转换模式 AD7124_WriteRegister(AD7124_REG_MODE, 0x0000); }在连续转换模式下配置完滤波器和通道之后DRDY 引脚会按输出速率周期性地拉低。如果发现 DRDY 的频率明显不对或者读到的数据长时间不变大部分情况下是滤波器寄存器里的采样率没有正确写入。比如我设置的输出速率是 50Hz理论上 20ms 就会拉低一次 DRDY用示波器一量就能验证。多通道采集时切换通道要注意一点不能只改通道寄存器还要重新让芯片开始转换。常见做法是先把新通道的配置寄存器写好再写一次 ADC 控制寄存器触发新的转换周期否则下一次读到的可能还是上一个通道的残余数据。这套驱动源码里把通道配置做了抽象改动通道时只调用一个函数就能完成配置切换这一点在二次开发时非常省事。4. 数据读取与微处理器集成让转换结果真正可用4.1 基于DRDY的数据读取AD7124 转换完成时 DRDY 引脚会从高电平拉低MCU 检测到这个下降沿后再启动 SPI 读取可以保证每次读到的都是最新数据。我用轮询方式等待 DRDY 拉低再读取数据寄存器。代码里加了一个超时保护防止异常情况下程序卡死在等待循环里。int32_t AD7124_ReadData(void) { uint8_t buf[3] {0}; uint8_t cmd; int32_t code 0; uint16_t timeout 0; // 等待DRDY拉低超时则返回错误标志 while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) ! RESET) { timeout; if (timeout 100000) { return 0x7FFFFF; } } AD7124_SPI_CS_Low(); // 读数据寄存器命令字节R/W1寄存器地址0x02 cmd (1 7) | (AD7124_REG_DATA 0x1F); AD7124_WriteReadByte(cmd); buf[0] AD7124_WriteReadByte(0xFF); buf[1] AD7124_WriteReadByte(0xFF); buf[2] AD7124_WriteReadByte(0xFF); AD7124_SPI_CS_High(); // 24位补码转成32位有符号数 code ((int32_t)buf[0] 16) | ((int32_t)buf[1] 8) | buf[2]; if (code 0x800000) { code | 0xFF000000; } return code; }这里的超时返回值 0x7FFFFF 是正满量程附近的数值业务代码里可以用它做异常判断。读数据时命令字节发了之后连续读三个字节芯片会按照寄存器地址自动递增输出不需要每读一个字节都重新发送命令。我已经数不清有多少次在调试时因为漏看了“先拉低 CS 再发命令”这个步骤导致读回来的数据像随机数。采用外部中断触发读取会更高效。把 PB0 配置为下降沿触发中断在中断服务函数里调用 AD7124_ReadData 并缓存结果。但要注意SPI 读取本身需要时间如果在中断里做 SPI 通信中断优先级和临界区保护最好提前设计好。我习惯在主循环里轮询 DRDY用全局变量标记转换完成标志这样逻辑简单也不容易踩中断嵌套的坑。4.2 码值到电压的换算与校准拿到原始码值后还要把它换算成真正的电压值。AD7124 在双极性模式下满量程输出对应 0x7FFFFF负满量程对应 0x800000码值和电压的关系近似为线性。换算函数如下float AD7124_CodeToVoltage(int32_t code, float vref, float pga) { float voltage; if (code 0x7FFFFF) { return 0.0f; } voltage ((float)code / 8388608.0f) * (vref / pga); return voltage; }以 Vref2.5V、PGA1 为例一个 LSB 对应的电压是 2.5V 除以 2^23算下来大约 0.298μV。如果接了传感器还需要结合传感器的灵敏度继续换算到实际物理量这一步就不是 ADC 驱动该负责的事了。校准方面我习惯在初始化后执行一次自校准。AD7124 的自校准使用内部短路输入来校正失调误差但无法完全补偿外部电路引入的偏差。代码里只需要设置 ADC 控制寄存器的校准位然后等待 DRDY 拉低表示校准完成uint8_t AD7124_Calibrate(void) { // 触发自校准写ADC控制寄存器置位校准控制位 AD7124_WriteRegister(AD7124_REG_ADC_CTRL, 0x0001 | (1 4)); // 等待校准完成DRDY拉低表示结束 uint16_t timeout 0; while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) ! RESET) { timeout; if (timeout 100000) { return 1; } } return 0; }如果要做系统校准也就是把传感器整个链路都包括进去就需要在硬件上设计一个可切换的校准信号源先把输入端短接到地得到偏移码值再灌入一个已知标准电压得到增益误差。AD7124 本身支持系统校准命令我在这套驱动里留了接口但没有把模拟开关控制代码写死因为不同应用的前端电路差异太大了。实际项目中我用一个软件层面的两点校准函数配合外部标准源把偏移和增益系数存到 EEPROM 里后续再采集时直接做线性修正比每次都跑系统校准省时间。5. 调试避坑SPI通信失败、数据抖动和寄存器被复位5.1 SPI读取全是0xFF先从CS和时钟极性查起现象回读任何寄存器都是 0xFFDRDY 偶尔有波形但数据完全不对。原因最常见的是 SPI 模式配置错误。AD7124 要求模式 3如果初始化成了模式 0主机在 SCLK 的第一个边沿采样而从机是在第二个边沿输出数据主机采样到的全是高电平。另一个原因是 MISO 引脚被配置成了推挽输出或者 CS 根本没有拉低。解决先用示波器看 SCLK 空闲电平是不是高。如果空闲是低说明 CPOL 配错了再确认 CS 拉低期间 SCLK 没有抖动。然后把 MISO 改成浮空输入。改完这三个点绝大多数 0xFF 问题都能消失。那次我调这个驱动时就是 MISO 复用配置被上一个工程覆盖导致读到的全是高电平。5.2 DRDY一直不拉低配置没生效还是接线错误现象程序跑起来后DRDY 引脚始终维持高电平数据读取函数一直超时。原因大概率是通道没有真正使能或者 ADC 控制寄存器配置错误芯片根本没有进入转换状态。还有一个很多人会忽略的原因RESET 引脚被外部电路拉低芯片一直停在复位状态。DRDY 引脚本身也可能接错或者被外部上拉电阻强行拉高。解决先把 RESET 引脚拉到高电平并延时 20ms确认芯片退出复位然后逐条回读配置寄存器确认通道使能位确实写进去了。用万用表量 DRDY 到 MCU 引脚之间的通断我遇到过 PCB 上 DRDY 网络被一个 10k 上拉电阻拉到 VCC 的情况去掉上拉后立刻恢复。5.3 数据跳动超过几个LSB先怀疑电源和参考电压现象SPI 通信正常也能读到码值但数据在几十个 LSB 甚至几百个 LSB 范围内乱跳完全不像一颗 24 位 ADC 该有的稳定性。原因模拟电源纹波大、参考电压不稳、数字地和模拟地混在一起这些都会直接反映在转换结果里。PGA 增益设得过高也会放大前端噪声比如把增益从 1 改到 128跳动幅度可能增加十几倍。解决给模拟电源单独加一颗 LDO参考电压输出端并 10μF 和 0.1μF 电容PCB 布局上模拟地单独铺一块再单点连接。软件层面可以降低 PGA 增益或者在滤波器寄存器里选择更强的数字滤波。如果只是验证功能把输出速率降到 50Hz 以下也能明显看到跳动变小。5.4 寄存器写不进去片选时序和命令字拼接问题现象往寄存器写入一个值再回读发现还是复位默认值好像写操作根本没有发生。原因命令字拼接错误或者 CS 时序太草率。AD7124 通信寄存器第一个字节的高位是读写标志低 5 位是寄存器地址如果直接把寄存器地址和标志位拼错芯片会拒绝执行。CS 拉低后马上发命令、命令发完又立刻拉高中间时间太短芯片来不及锁存。解决先检查命令字公式写命令是 (17)|(addr0x1F)读命令是 (addr0x1F)。CS 拉低后加一个微秒级延时数据字节发送完毕后再延时几微秒再拉高 CS。调试时用示波器看 CS 和 SCLK 的重叠关系确认时钟不是在 CS 为高电平时跑出来的。我后来把片选时序延时固化到函数里不再依赖主循环的偶然时序。6. 二次开发改造如何把这套驱动搬到自己的电路上6.1 抽象SPI层便于移植这套驱动的底层只依赖一个字节收发函数换到其他 MCU 平台时只需要重写 AD7124_WriteReadByte 和 CS、DRDY、RESET 三组 GPIO 控制函数。其他寄存器操作、数据读取和校准逻辑不用改动。我之前把它从标准外设库工程迁到某个 HAL 库工程时只花了半天时间。6.2 扩展到多通道和DMA采集如果要同时采集多路传感器可以复制通道配置宏把 CH0 扩展到 CH1、CH2并在每个通道配置里绑定不同的配置寄存器和滤波器寄存器。读取时按通道号切换配置读到的数据存入对应数组。如果对吞吐率有更高要求可以把 DRDY 接到 DMA 请求引脚或者用定时器触发片选把 SPI 读取改成 DMA 方式减轻 CPU 负担。6.3 我的一点习惯自从那次被寄存器回读折磨过之后我现在每次改完配置都会强制自己走一遍“写入后立即回读”的校验流程再继续调试业务逻辑。芯片寄存器不像代码变量写错了不会报错只会给你一堆看着合理但实际错误的数据。这套驱动最让我放心的就是它把初始化、回读、校准、读取全链路都打通了拿到手不用猜。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

迅雷下载速度慢?从设置到网络环境的一站式提速指南

迅雷下载速度慢?从设置到网络环境的一站式提速指南

1. 先搞清楚:你的下载速度到底是“被限”还是“本来就跑不满”很多人一看到迅雷进度条只有几百KB/s,第一反应就是“迅雷限速了”。我在群里见过有人一天之内试了三四个所谓的“破解版”,折腾半天发现问题根本不在软件本身,而在于他…

2026/10/16 7:16:04 阅读更多 →
Win11地址栏拖拽失效:原因排查与替代方案指南

Win11地址栏拖拽失效:原因排查与替代方案指南

这事还得从上周整理文件说起。我在Win11的资源管理器里打开了一串多级目录,类似D盘-素材库-项目A-最终交付,手头有一份改完的压缩包要归位到上级的“项目A”目录。按照以前用Win10的习惯,我直接把文件往地址栏的面包屑路径上一拖就完事了&…

2026/10/16 7:15:04 阅读更多 →
PostgreSQL内核元数据核心:PG_CLASS系统表字段详解与实战排查指南

PostgreSQL内核元数据核心:PG_CLASS系统表字段详解与实战排查指南

维护基于 PostgreSQL 内核的数据库产品时,几乎每天都会和各种系统表打交道,而 PG_CLASS 是其中最绕不开的一张。HIGHGO 这个名字是我对某个基于 PG 内核的数据库项目的代号,它的目录体系和原生 PostgreSQL 保持一致,所以很多排查思…

2026/10/16 7:15:04 阅读更多 →

最新新闻

2025罗湖房屋漏水抢修服务商权威榜单:如何选对靠谱团队?

2025罗湖房屋漏水抢修服务商权威榜单:如何选对靠谱团队?

每年一到雨季或者台风过境,罗湖这边关于房屋漏水的咨询量就成倍往上翻。尤其是一些房龄超过二十年的小区,卫生间渗水、外墙开裂、阳台倒灌,各种问题扎堆冒出来。很多业主第一反应是随便找个补漏师傅先堵住再说,结果往往是修了又漏…

2026/10/16 7:55:15 阅读更多 →
VisualSVN Server + TortoiseSVN:Windows下SVN版本控制环境搭建与实战

VisualSVN Server + TortoiseSVN:Windows下SVN版本控制环境搭建与实战

前阵子帮一个项目组搭版本控制环境,对方第一句话就是:能不能别整Git?我愣了一下,后来看了他们的仓库才明白——项目里有大量设计稿、编译产物和二进制资源,Git仓库动辄几个GB,clone一次能喝完一杯咖啡。这种…

2026/10/16 7:55:15 阅读更多 →
老品牌第二曲线:识别拐点、迁移资产与避开组织陷阱的系统指南

老品牌第二曲线:识别拐点、迁移资产与避开组织陷阱的系统指南

1. 先别急着谈第二曲线:判断老品牌是否真的到了拐点我做企业经营和品牌咨询这些年,见过太多"为创新而创新"的企业。一听到第二曲线这个概念,立刻精神亢奋,觉得老业务没希望了,要赶紧开一条新路。但结果往往是…

2026/10/16 7:55:15 阅读更多 →
第64章 未济•未济 没有终点

第64章 未济•未济 没有终点

那本日记是在2048年底开始写的。封面是深蓝色的,纸张偏厚,页边没有横线。悦儿在扉页上只写了一个年份——"2048"——没有写更具体的日期,因为她不确定这会是一本持续多久的日记,也不确定它最终会是什么样的形态。她在写…

2026/10/16 7:55:15 阅读更多 →
《穿针:一部挂谷猜想的64重奏》顺利完结,感谢读者厚爱。悦儿和墨子也结束休假,继续本站《弦光代码》。望读者继续关注《弦光代码》,谢谢!

《穿针:一部挂谷猜想的64重奏》顺利完结,感谢读者厚爱。悦儿和墨子也结束休假,继续本站《弦光代码》。望读者继续关注《弦光代码》,谢谢!

《穿针:一部挂谷猜想的64重奏》顺利完结,感谢读者厚爱。悦儿和墨子也结束休假,继续本站《弦光代码》。望读者继续关注《弦光代码》,谢谢!

2026/10/16 7:55:15 阅读更多 →
AgentScope多智能体协作框架:消息驱动与分布式编排实战

AgentScope多智能体协作框架:消息驱动与分布式编排实战

1. 从一次深夜调试说起:AgentScope 到底解决什么问题第一次接触 AgentScope 是在一个多智能体协作的模拟项目里。当时我需要让三个不同角色的智能体——一个负责信息检索、一个负责逻辑推理、一个负责结果校验——在同一个任务流里协同工作。最初的想法很朴素&#…

2026/10/16 7:54:14 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →