STM32F072C8T6裸机开发实战:从寄存器到USB/CAN外设
简介这份资料面向嵌入式初学者与有一定经验的开发者围绕意法半导体STM32F072C8T6ARM Cortex-M0内核、48MHz主频、32KB闪存与2KB RAM学习板展开帮助读者快速掌握该芯片的初始化配置、中断处理、内存管理及驱动编写等核心技能。压缩包共约2000个文件整体168.69MB以C源码、头文件、HTML文档、汇编启动文件、JavaScript及工程配置为主并包含PNG、GIF图片与PDF手册覆盖Keil、IAR、STM32CubeIDE等多套工程环境。例程涵盖GPIO、定时器与PWM、UART、SPI/I2C、ADC/DAC、CAN总线、USB、RTOS及TCP/IP协议栈等21个示例从基础操作延伸到高级功能并配有用户手册与电路图辅助理解硬件设计。目前已有1202人学习下载适合作为嵌入式项目入门与进阶的实践参考。1. 一块 Cortex-M0 学习板为什么值得从寄存器开始啃STM32F072C8T6 学习板在淘宝和电子论坛里属于“老面孔”但真正把它用透的人不多。多数人拿到手先跑一遍点灯例程然后卡在“下一步该学什么”上。这块芯片是 Cortex-M0 内核48 引脚 LQFP 封装64KB Flash、16KB SRAM带 USB 2.0 全速设备控制器、CAN 控制器、12 位 ADC、DAC、比较器、电容触摸感应外设丰富程度在 M0 级别里算相当能打。它适合谁适合已经玩过 51 或 Arduino、想往 ARM 体系迁移但不想一上来就碰 HAL 库黑匣子的开发者也适合需要一颗低成本带 USB 和 CAN 的 MCU 做小批量产品的硬件工程师。学习板资料的核心价值不在“跑通例程”而在于让你能对照参考手册逐位配置寄存器理解时钟树、中断向量表、外设初始化顺序这些真正决定项目成败的东西。我见过太多人用 CubeMX 生成代码后连 SystemInit 里做了什么都不知道换一块芯片就寸步难行。这块板子便宜、资料全、外设典型正好拿来补这一课。2. 从零搭建 STM32F072C8T6 的裸机开发环境2.1 工具链选型为什么我最终留在 ARM GCC MakefileSTM32F072C8T6 的官方生态默认推 Keil MDK 和 IAR但这两个都是商业工具License 问题在团队协作里很烦。我自己的选择是 ARM GNU Toolchain 加 Makefile理由有三第一编译产物可控链接脚本、启动文件、优化等级全部透明第二CI 流水线里跑得动不需要图形界面第三换芯片系列时只需要改启动文件和链接脚本工程结构不用动。烧录工具用 ST-Link V2 配合 OpenOCD或者用 st-flash 命令行工具都比在 IDE 里点按钮更利索。安装 ARM GCC 在 Ubuntu 下一条命令sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi \ libnewlib-arm-none-eabi gdb-arm-none-eabi openocd stlink-toolsWindows 下建议用 MSYS2 或 WSL2不要用那些来路不明的“一键安装包”版本混乱会让你在链接阶段遇到莫名其妙的undefined reference to _sbrk之类问题。安装完用arm-none-eabi-gcc --version确认版本我一般用 10.3 以上的版本对 Cortex-M0 的 Thumb 指令集支持稳定。2.2 启动文件与链接脚本两个必须自己改的地方启动文件startup_stm32f072xb.s可以从 ST 官方固件包里拿但不要直接用里面中断向量表的弱符号定义需要根据你的实际用量裁剪。链接脚本STM32F072C8Tx_FLASH.ld关键在 MEMORY 段MEMORY { FLASH (rx) : ORIGIN 0x08000000, LENGTH 64K RAM (xrw) : ORIGIN 0x20000000, LENGTH 16K }这里有个容易翻车的点STM32F072C8T6 的 RAM 是 16KB但如果你开了 USB 和 CAN 同时用缓冲区分配不当会直接栈溢出。我一般把栈大小设在 0x4001KB堆设 0x200512B剩下的留给全局变量和 USB PMA。PMA 是 USB 外设专用的 1KB 缓冲区地址在 0x40006000 附近不占主 RAM但配置错了 USB 枚举会直接失败。2.3 最小工程结构五个文件跑通点灯一个能编译烧录的最小工程只需要这些文件project/ ├── Makefile ├── startup_stm32f072xb.s ├── STM32F072C8Tx_FLASH.ld ├── main.c └── system_stm32f0xx.cMakefile 核心部分CC arm-none-eabi-gcc CFLAGS -mcpucortex-m0 -mthumb -O2 -Wall -fdata-sections -ffunction-sections LDFLAGS -TSTM32F072C8Tx_FLASH.ld -Wl,--gc-sections -nostartfiles SRCS main.c system_stm32f0xx.c OBJS $(SRCS:.c.o) all: firmware.elf firmware.bin firmware.elf: $(OBJS) startup_stm32f072xb.o $(CC) $(CFLAGS) $(LDFLAGS) -o $ $^ firmware.bin: firmware.elf arm-none-eabi-objcopy -O binary $ $ flash: firmware.bin st-flash write firmware.bin 0x08000000 clean: rm -f *.o *.elf *.bin-mcpucortex-m0和-mthumb必须同时出现否则会生成 ARM 指令集代码M0 不认。--gc-sections配合-ffunction-sections -fdata-sections能砍掉没用的代码64KB Flash 虽然不小但加上 USB 协议栈后能省一点是一点。-nostartfiles是因为我们用自己的启动文件不让 GCC 塞默认的_start。main.c 里点灯不需要 HAL#include stdint.h #define RCC_AHBENR (*(volatile uint32_t *)0x40021014) #define GPIOC_MODER (*(volatile uint32_t *)0x48000800) #define GPIOC_ODR (*(volatile uint32_t *)0x48000814) static void delay(volatile uint32_t count) { while (count--) __asm__(nop); } int main(void) { RCC_AHBENR | (1 19); /* 使能 GPIOC 时钟 */ GPIOC_MODER ~(3 (13 * 2)); /* 清 PC13 模式位 */ GPIOC_MODER | (1 (13 * 2)); /* PC13 推挽输出 */ while (1) { GPIOC_ODR ^ (1 13); /* 翻转 PC13 */ delay(200000); } }这里直接操作寄存器RCC_AHBENR的 bit19 是 GPIOC 时钟使能位参考手册 RM0091 第 7.4.5 节有表。GPIOC_MODER每两位控制一个引脚PC13 对应 bit26-27设成 01 就是通用输出模式。延时用空循环不精确但够用。烧录后如果灯不亮先查三件事时钟有没有使能、模式位有没有配对、板子上 PC13 是不是接了 LED 且极性正确。有些学习板 PC13 接的是共阳 LED输出低电平才亮这个不看原理图会白折腾半天。3. 把 USB 和 CAN 跑起来外设初始化的顺序与参数3.1 USB 设备控制器PMA 分配和端点配置的硬性约束STM32F072 的 USB 是全速设备控制器符合 USB 2.0 规范但不支持 OTG。它的 PMA 是一块 1KB 的专用 SRAM通过 APB 总线访问地址映射在 0x40006000。每个端点需要分配 PMA 中的缓冲区分配规则是端点 0 收发各占一段端点 1-7 可以配置为 IN 或 OUT但 PMA 总大小固定分配多了会重叠。初始化顺序不能乱/* 1. 使能 USB 时钟和 GPIO 时钟 */ RCC_APB1ENR | (1 23); /* USB 时钟 */ RCC_AHBENR | (1 17); /* GPIOA 时钟 */ /* 2. 配置 PA11 (DM) 和 PA12 (DP) 为复用功能 */ GPIOA_MODER ~((3 22) | (3 24)); GPIOA_MODER | ((2 22) | (2 24)); /* AF 模式 */ GPIOA_AFRH ~((0xF 12) | (0xF 16)); GPIOA_AFRH | ((0x0 12) | (0x0 16)); /* AF0 USB */ /* 3. 复位 USB 外设 */ USB_CNTR | (1 0); /* FRES */ delay(100); USB_CNTR ~(1 0); /* 4. 配置 PMA 和端点 */ USB_BTABLE 0; /* BTABLE 在 PMA 中的偏移0 表示从 PMA 起始开始 */ /* 端点 0 发送缓冲区地址 0x40接收缓冲区地址 0x80 */ *(volatile uint16_t *)(USB_PMAADDR 0x00) 0x40; *(volatile uint16_t *)(USB_PMAADDR 0x04) 0x80;USB_BTABLE设为 0 意味着端点缓冲区描述表从 PMA 地址 0 开始每个端点占 8 字节4 个 16 位寄存器ADDR_TX、COUNT_TX、ADDR_RX、COUNT_RX。端点 0 的发送缓冲区我放在 PMA 偏移 0x40接收放在 0x80中间留出空间给其他端点。这个分配不是随便定的PMA 访问以 16 位为单位地址必须 2 字节对齐而且不能跨过 0x200 边界否则硬件行为不确定。USB 枚举失败最常见的原因是时钟配置不对。STM32F072 的 USB 需要 48MHz 时钟来源可以是 HSI48内部 48MHz RC或者 PLL。HSI48 精度够 USB 全速用但出厂校准值有偏差建议在初始化时读一下HSI48CAL寄存器做微调。如果用 PLL需要外部晶振8MHz 晶振经 PLL 倍频到 48MHz配置步骤在参考手册的 RCC 章节有详细流程图。3.2 CAN 控制器波特率计算和过滤器配置CAN 外设在 STM32F072 上是 bxCAN 的简化版支持 CAN 2.0A 和 2.0B。波特率计算依赖 APB1 时钟和位时序寄存器CAN_BTR。假设 APB1 时钟 48MHz要跑 500kbps/* 使能 CAN 时钟和 GPIO */ RCC_APB1ENR | (1 25); /* CAN 时钟 */ RCC_AHBENR | (1 17); /* GPIOA */ /* PA11 CAN_RX, PA12 CAN_TX注意和 USB 冲突 */ GPIOA_MODER ~((3 22) | (3 24)); GPIOA_MODER | ((2 22) | (2 24)); GPIOA_AFRH ~((0xF 12) | (0xF 16)); GPIOA_AFRH | ((0x4 12) | (0x4 16)); /* AF4 CAN */ /* 进入初始化模式 */ CAN_MCR | (1 0); /* INRQ */ while (!(CAN_MSR (1 0))); /* 等待 INAK */ /* 波特率48MHz / (1 BS1 BS2) / PRESC 500k */ /* BS1 13, BS2 2, PRESC 6 48M / 16 / 6 500k */ CAN_BTR (13 16) | (2 20) | (5 0); /* 退出初始化模式 */ CAN_MCR ~(1 0); while (CAN_MSR (1 0));CAN_BTR的位域bit0-9 是 BRP波特率预分频bit16-19 是 TS1bit20-22 是 TS2。采样点位置 (1 TS1) / (1 TS1 TS2)上面配置的采样点是 14/16 87.5%这是 CAN 标准推荐的采样点太高或太低在长线缆上容易出错。过滤器配置更简单STM32F072 有 14 个过滤器组可以配成掩码模式或列表模式。如果只是接收所有帧把过滤器设成掩码全 0 就行CAN_FMR ~(1 0); /* 过滤器 0 不激活 */ CAN_FA1R | (1 0); /* 激活过滤器 0 */ CAN_FS1R ~(1 0); /* 32 位掩码模式 */ CAN_FiR1(0) 0; /* 过滤器 ID 全 0 */ CAN_FiR2(0) 0; /* 掩码全 0接收所有 */注意 PA11 和 PA12 同时被 USB 和 CAN 复用一块板子上不能同时用这两个外设除非你有办法把其中一个重映射到其他引脚。STM32F072 的 CAN 没有重映射选项USB 也没有所以硬件设计时就要决定用哪个。学习板上一般两个接口都留了但实际用的时候只能二选一。3.3 中断优先级M0 的 NVIC 只有 4 级Cortex-M0 的 NVIC 支持 4 个优先级2 位比 M3/M4 的 8 位少得多。这意味着你不能把中断优先级分得太细。我一般这样分USB 和 CAN 给最高级 0SysTick 给 1串口给 2其他外设给 3。配置函数static void nvic_set_priority(IRQn_Type irq, uint8_t prio) { NVIC_SetPriority(irq, prio); NVIC_EnableIRQ(irq); }NVIC_SetPriority在 CMSIS 头文件里是内联函数直接写NVIC_IPR寄存器。M0 的优先级数值越小优先级越高和 M3/M4 相反这个坑我踩过——在 M4 上习惯把高优先级设成大数值换到 M0 上中断响应顺序全反了。4. 避坑与排查学习板上最容易翻车的五个地方4.1 现象程序烧进去不跑复位后没反应原因通常是启动文件的向量表地址不对。STM32F072C8T6 的 Flash 起始地址是 0x08000000但有些启动文件默认写成 0x00000000上电后取指取到错误地址。解决方法是检查startup_stm32f072xb.s里g_pfnVectors段的链接位置确保在.isr_vector段且链接脚本把它放在 Flash 最前面。用arm-none-eabi-objdump -h firmware.elf看.isr_vector的 VMA 是不是 0x08000000。4.2 现象USB 枚举时好时坏主机偶尔认不到原因是 HSI48 时钟精度不够。STM32F072 的 HSI48 出厂校准值在HSI48CAL寄存器里但不同批次的芯片偏差能到 ±3%USB 全速要求 ±0.25%。解决办法是在初始化时读HSI48CAL并写入CR2的HSI48CAL位做微调或者干脆用外部晶振走 PLL。我一般用 8MHz 晶振PLL 配置成 48MHz稳定得多。4.3 现象CAN 发送正常但接收不到任何帧原因是过滤器配置成了列表模式但列表为空。CAN_FS1R的 bit 如果设成 1 是列表模式此时CAN_FiR1和CAN_FiR2是两个期望的 ID如果都设成 0 且没有帧的 ID 是 0就什么都收不到。改成掩码模式CAN_FS1R对应位清 0并把掩码设成全 0就能接收所有帧。这个坑在调试 CAN 总线时特别常见因为发送不需要过滤器接收才需要。4.4 现象ADC 采样值跳动很大读数不稳定原因是采样时间设得太短。STM32F072 的 ADC 最高时钟 14MHz采样时间最短 1.5 个周期但那是给低阻抗信号源用的。如果信号源内阻超过 10kΩ采样电容充不满读数就会跳。解决办法是把采样时间设成 71.5 或 239.5 个周期同时开启 ADC 的硬件平均功能如果芯片支持。另外VDDA 和 VREF 的滤波电容不能省学习板上一般有 100nF 和 1μF 并联如果自己画板子记得加上。4.5 现象程序运行一段时间后死机看门狗复位原因是栈溢出。16KB RAM 看着不少但 USB 和 CAN 的缓冲区加上局部变量很容易把栈撑爆。用arm-none-eabi-size firmware.elf看.bss和.data段大小如果加起来超过 12KB就要警惕了。解决办法是把大数组改成静态分配或放到堆里栈大小在链接脚本里适当调大但不要超过 RAM 的 1/4。另外M0 没有 MPU栈溢出不会触发硬件异常只会默默踩坏其他变量调试时可以用填充模式检查栈的使用深度。5. 用 SysTick 做非阻塞延时一个被低估的调试技巧裸机开发里最常用的delay()是空循环但它有两个问题一是占用 CPU二是不同优化等级下延时时间会变。SysTick 是 Cortex-M0 内置的 24 位递减计数器用它做非阻塞延时既能释放 CPU又能让延时精度和主频解耦。配置 SysTick 只需要三个寄存器#define SYSTICK_LOAD (*(volatile uint32_t *)0xE000E014) #define SYSTICK_VAL (*(volatile uint32_t *)0xE000E018) #define SYSTICK_CTRL (*(volatile uint32_t *)0xE000E010) volatile uint32_t tick_ms 0; void systick_init(uint32_t cpu_freq) { SYSTICK_LOAD (cpu_freq / 1000) - 1; /* 1ms 中断 */ SYSTICK_VAL 0; SYSTICK_CTRL (1 2) | (1 1) | (1 0); /* CLKSOURCE1 (HCLK), TICKINT1, ENABLE1 */ } void SysTick_Handler(void) { tick_ms; } void delay_ms(uint32_t ms) { uint32_t start tick_ms; while ((tick_ms - start) ms) { __asm__(wfi); /* 等待中断省电 */ } }SYSTICK_LOAD设成cpu_freq / 1000 - 1如果 CPU 跑 48MHz就是 47999。SYSTICK_CTRL的 bit2 是时钟源选择1 表示用 HCLK 不分频bit1 是中断使能bit0 是计数器使能。SysTick_Handler里只做一件事递增tick_ms。delay_ms用wfi指令让 CPU 在等待时进入睡眠中断来了自动唤醒比空循环省电得多。这个技巧在调试时特别有用你可以用tick_ms做超时判断比如等待某个标志位置位时设一个 100ms 的超时超时后打印错误信息而不是死等。我一般会在串口里输出tick_ms的时间戳这样看日志时能知道每个操作花了多久比用逻辑分析仪抓波形快得多。还有一个进阶用法用 SysTick 做软件定时器调度。定义一个结构体数组每个元素存超时时间和回调函数在SysTick_Handler里遍历检查。这样你就不需要为每个定时任务占用一个硬件定时器M0 的定时器资源本来就紧张。代码大概长这样typedef struct { uint32_t timeout; uint32_t period; void (*callback)(void); uint8_t active; } soft_timer_t; #define MAX_TIMERS 8 static soft_timer_t timers[MAX_TIMERS]; void soft_timer_tick(void) { for (int i 0; i MAX_TIMERS; i) { if (timers[i].active timers[i].timeout 0) { if (--timers[i].timeout 0) { timers[i].callback(); timers[i].timeout timers[i].period; } } } }在SysTick_Handler里调用soft_timer_tick()每个定时器的timeout以毫秒为单位递减。这个方案在 1ms 的 SysTick 中断里跑 8 个定时器开销大概几十个周期对 48MHz 的 M0 来说完全无感。我拿它做过按键消抖、LED 呼吸灯、串口超时重传比用硬件定时器灵活得多。唯一要注意的是回调函数里不要做耗时操作否则会拖慢其他定时器。最后说一个我自己的习惯每次拿到一块新板子先不急着跑例程而是用万用表把每个电源引脚对地测一遍确认没有短路然后烧一个最简单的 GPIO 翻转程序用示波器看波形频率对不对。这一步花十分钟能省掉后面几小时的“玄学调试”。STM32F072C8T6 学习板资料里那些例程是别人的只有你自己测过的波形才是你的。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

C/C++不同位数数据互转的进制转换实现与避坑指南

C/C++不同位数数据互转的进制转换实现与避坑指南

/* 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 4:27:50 阅读更多 →
NC65销售订单批量导入全攻略:从模板准备到成功入库的避坑指南

NC65销售订单批量导入全攻略:从模板准备到成功入库的避坑指南

/* 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 4:27:50 阅读更多 →
Linux下C/C++动静态库制作与使用实战指南

Linux下C/C++动静态库制作与使用实战指南

长期以来在Linux下做C/C开发,动静态库始终是绕不开的一个核心技能。无论是自己封装模块、分发二进制产物,还是处理第三方依赖,理解库的制作与使用直接决定了你在编译链接这块能不能少掉头发。我见过不少开发者写业务逻辑很熟练,一…

2026/10/15 4:26:50 阅读更多 →

最新新闻

Qt音频EQ曲线绘制重构:滤波器分层、对数采样与性能优化

Qt音频EQ曲线绘制重构:滤波器分层、对数采样与性能优化

做桌面音频工具这行,EQ曲线是个看似简单、实际一碰就头疼的模块。最近我把手头Qt源码里的EQ曲线绘制整体重写了一遍,完成了一次“升级版”重构。这次升级的重点不在样式的花活,而是把所有计算重新分层、把每个公式的来龙去脉整理成详尽注释&a…

2026/10/15 5:21:10 阅读更多 →
Flink SQL on YARN 提交避坑指南:资源、依赖与认证实战

Flink SQL on YARN 提交避坑指南:资源、依赖与认证实战

1. 为什么一个提交命令能折腾我一整天刚接触 Flink SQL on YARN 那会儿,我以为最难的应该是 SQL 语法或者状态管理,结果真正让我在工位上坐到凌晨的,是那个看起来平平无奇的提交命令。flink run敲下去,日志刷了几百行,…

2026/10/15 5:21:10 阅读更多 →
智能驾驶基础理论体系全解析:从感知到控制的分层架构与工程实践

智能驾驶基础理论体系全解析:从感知到控制的分层架构与工程实践

1. 智能驾驶基础理论到底在讲什么1.1 从一次被问懵的经历说起前阵子有个刚入行的朋友找我聊天,说他面试一家做智能驾驶的公司,技术面聊得还行,结果终面被一位老工程师问了一句:“你觉得规划和控制之间,最本质的耦合点在…

2026/10/15 5:21:10 阅读更多 →
电厂本地部署大模型实战:从硬件选型到知识库落地

电厂本地部署大模型实战:从硬件选型到知识库落地

大模型在电力行业的落地速度,比大多数人想象的要慢,也比一些人想象的要值得做。我过去一年深度参与了几个电厂侧的人工智能落地项目,从最初的可行性论证,到硬件选型、模型部署、知识库搭建、业务系统对接,整套流程都实…

2026/10/15 5:21:10 阅读更多 →
SAP语言码转换全指南:从语言包安装到ABAP批量处理

SAP语言码转换全指南:从语言包安装到ABAP批量处理

搞SAP这么多年,语言码转换这件事,我最大的感触是:听起来太简单了,做起来全是细节。不就是把语言字段从“E”改成“1”吗?但真正处理过的人都知道,一个搞不好就会出现界面乱码、登录异常、文本表丢数据、主键…

2026/10/15 5:21:10 阅读更多 →
数据仓库极限存储实战:分层压缩与生命周期管理降本60%

数据仓库极限存储实战:分层压缩与生命周期管理降本60%

1. 数据仓库极限存储的核心思路拆解1.1 为什么“极限存储”是一个绕不开的命题做数据仓库这行的人都有一个共同的痛:数据量涨得永远比预算快。业务方今天要查三年订单明细,明天要拉五年用户行为日志,后天又要把埋点数据从冷备里翻出来做归因分…

2026/10/15 5:20:10 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →