STM32F411标准例程模板:从工程搭建到外设驱动开发实战

简介:面向 STM32F411 开发者的一份标准例程模板,基于 ARM Cortex-M4 内核,涵盖启动代码、HAL 库、系统时钟配置、主函数框架及 LED/串口/定时器等外设示例,适合快速搭建项目并学习片上外设用法。压缩包 5.47MB,共 212 个文件,以 h 头文件、c 源文件、o 目标文件为核心,辅以 uvprojx/uvoptx 工程配置、hex 烧录文件、sct 链接脚本及 lst/map 编译输出,可支撑从编辑、编译到调试的完整流程。已有 2526 人学习浏览,适用于物联网、工业控制、消费电子等嵌入式场景。除基础外设模板外,还附带构建脚本(如 keilkilll.bat)、调试配置(uvguix、scvd)及编译产物(axf、map),便于对比检查或二次开发;开发者可基于该模板快速进入业务逻辑编写,省去繁琐的底层层初始化工作。

1. STM32F411标准例程模板:不重复建轮子,直接开写业务代码

想用 STM32F411 做点什么,第一道坎往往不是外设,而是搭工程。从 CMSIS 头文件、启动文件、链接脚本到时钟树配置,每一步都能拉开半天时间,哪怕只是跑个亮灯,也要先跟分散在各处的官方源码搏斗一番。这份标准例程模板把 F411 工程需要的骨架打包好了,打开就能编译、烧录、单步调试,省掉的是每次新建项目时重复的搬砖工作。适合手里有一块 F411 最小系统板、想快速评估性能或直接写业务逻辑的开发者,也适合在教学实验里省去环境配置环节,让注意力集中在传感器驱动和控制算法上。模板不解决算法问题,但能让你更快地碰到真正的算法问题。

2. 模板工程的内部结构:CMSIS、启动文件与链接脚本

先说清楚这份模板到底给了什么,别拿到手就当黑匣子直接用。标准例程模板的核心是三块:底层硬件抽象层、启动引导部分、以及外设初始化范例。搞清楚这三块的职责,后面换芯片型号、改时钟频率、挂新外设都有迹可循。

2.1 文件骨架:每个目录是干什么的

把模板在本地解压后,第一件事是看整体结构。我一般会打开终端跑tree -L 2,把骨架拉出来再逐个看文件。典型排布长这样:

F411_Template/ ├── Core/ │ ├── Inc/ # 主头文件、中断头文件 │ ├── Src/ # main.c、中断服务函数、系统时钟配置 │ └── Startup/ # 启动文件 startup_stm32f411xx.s ├── Drivers/ │ ├── CMSIS/ # 内核寄存器定义、系统初始化 │ └── STM32F4xx_HAL_Driver/ # HAL 外设库 ├── MDK-ARM/ # Keil 工程文件 ├── Makefile # GCC 编译入口 ├── stm32f411xx_flash.ld # 链接脚本 └── openocd.cfg # 调试烧录配置

Core/Startup里的启动文件是最容易被忽略的部件。它负责三件事:初始化栈指针、设置向量表、在跳转main前把bss段清零。很多“复位后程序跑飞”的玄学问题,根源就是启动文件与芯片型号不匹配。F411 用startup_stm32f411xx.s,如果误用了 F407 的启动文件,向量表偏移量对不上,程序一进中断就乱跳。

Drivers/CMSIS这层是芯片厂商与内核之间的翻译官。它定义的是 Cortex-M4 内核寄存器,不涉及具体外设。比如core_cm4.h里的NVIC_Type、SysTick_Type,操作中断优先级和系统嘀嗒定时器都靠它。HAL 驱动则建立在 CMSIS 之上,封装了 GPIO、USART、TIM 等外设。模板把这两层拆开放,好处是升级或换芯片时能分清改哪里。

2.2 时钟配置:默认跑多快,改哪里

F411 的最高主频是 100 MHz,但这不是上电默认值。芯片复位后默认用 HSI 16 MHz 内部振荡器,系统时钟也是 16 MHz。模板里预置的时钟配置脚本会把时钟树切到外部晶振 HSE 并倍频到 100 MHz。核心代码通常在SystemClock_Config()里,逻辑是:启动 HSE,等待就绪,配置 PLL 锁相环的倍频系数和分频系数,最后把系统时钟切到 PLL。

void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /* 使能外部晶振 HSE,并等待就绪 */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; /* HSE 8 MHz 分频为 1 MHz */ RCC_OscInitStruct.PLL.PLLN = 200; /* 倍频到 200 MHz */ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; /* 200/2 = 100 MHz */ HAL_RCC_OscConfig(&RCC_OscInitStruct); ... }

这段配置里PLLM = 8把 8 MHz 的 HSE 二分频到 1 MHz,PLLN = 200倍频到 200 MHz,再用PLLP = /2落到 100 MHz。如果你的板子外部晶振是 25 MHz,PLLM要改成 25,否则 PLL 输入频率太高会直接卡在超频范围,系统时钟起不来。这是模板换到其他 F411 板子上最常见的翻车点。

2.3 外设初始化套路:GPIO、中断、DMA 的模板写法

模板封装了一组外设初始化函数,模式统一:定义句柄结构体,填参数,调用初始化函数。以串口引脚为例,它把 GPIO 和 USART 分开配置:

void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); /* 打开 GPIOA 时钟 */ GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; /* TX/RX */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽 */ GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; /* 映射到 USART1 */ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); }

这里最容易漏的是Alternate这一项。F411 的 USART1 可以映射到 PA9/PA10,也可以映射到 PB6/PB7,GPIO_AF7_USART1这个宏决定具体脚位。如果初始化后串口没输出,先查是不是复用编号写错了,这是 HAL 库里最经典的坑之一。模板把每个外设初始化独立成MX_xxx_Init()函数,业务代码里按需调用,保持主函数干净。

3. 从模板到可编译工程:MDK 与 GCC 环境的落地配置

拿到模板不是解压就完事,还得把工具链对上。F411 模板通常同时提供 Keil MDK 和 GCC 两套入口,我用 MDK 做快速验证,用 GCC 做脚本化编译。这一章讲清楚两套环境怎么配,避免在第一步就卡半小时。

3.1 MDK 打开:工程选项里的四件事

用 Keil 打开MDK-ARM目录下的.uvprojx工程文件,编译前先过一遍四个关键选项。

第一是芯片型号。在 Options for Target 里确认 Device 是 STM32F411xx,型号选错会导致外设寄存器地址直接错位,编译能过但运行必崩。第二是 C/C++ 选项卡里的 Define 宏,模板一般默认定义STM32F411xE,这个宏决定 HAL 库编译时包含哪些外设配置。第三是 Debug 标签里的烧录器型号,我用 ST-Link 就选 ST-Link Debugger,用 J-Link 就换 J-Link,选错会报“找不到目标设备”。第四是 Flash Download 里的编程算法,F411 内置 Flash 需要选择 STM32F4xx Flash 512KB 的算法文件。

/* 编译时预定义宏示例 */ #define STM32F411xE #define USE_HAL_DRIVER

USE_HAL_DRIVER这个宏很关键,缺少它 HAL 库的源文件会被预处理器跳过,编译报一堆“未定义类型”之类的基础错误。如果你发现模板编译后报错的都是HAL_StatusTypeDef这类类型,先去查 Define 宏,而不是怀疑库文件没拷全。

3.2 换成 GCC 工具链:Makefile 怎么接

模板自带 Makefile 是给 GCC/arm-none-eabi 用的。在 Linux 或 macOS 环境下,用make命令就能调用工具链完成编译。关键参数在文件顶部的变量区:

TARGET = f411_template CPU = -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard CFLAGS = $(CPU) -O2 -DSTM32F411xE -DUSE_HAL_DRIVER LDFLAGS = -T stm32f411xx_flash.ld C_SOURCES = $(wildcard Core/Src/*.c Drivers/STM32F4xx_HAL_Driver/Src/*.c)

-mcpu=cortex-m4指定 CPU 核心,-mfpu=fpv4-sp-d16启用单精度浮点单元,-mfloat-abi=hard让参数传递用浮点寄存器。这三个参数必须成套出现,少一个都会在链接阶段报“undefined reference to __aeabi_fadd”。-T后面的链接脚本决定了代码段、数据段、堆栈在 Flash 和 RAM 里的分布,模板默认把堆设 0x400 字节,栈设 0x800 字节,如果业务代码里用了大数组,要在这里调大栈。

3.3 模板自带脚本:烧录与调试的快捷入口

除了编译,模板一般带了烧录脚本。我习惯用 OpenOCD 做命令行烧录,配置文件里指定了调试器接口和目标芯片:

# 模板自带的 openocd 启动命令 openocd -f interface/stlink.cfg -f target/stm32f4x.cfg -c "program build/f411_template.hex verify reset exit"

这段命令的含义是:加载 ST-Link 接口配置,加载 STM32F4 目标配置,把编译出来的 hex 文件烧录到 Flash,校验后复位运行,然后退出。如果你的调试器不是 ST-Link,把interface/stlink.cfg换成interface/jlink.cfg。烧录失败时先看 openocd 日志里的“JTAG scan returned”还是“Target not found”,前者多半是接线问题,后者多半是供电不足或 BOOT0 脚状态不对。

4. 串口、定时器、ADC 的模板化用法:从标准例程抄到自己的工程

模板最大的价值是外设例程可以直接当脚手架用。不需要从零查寄存器手册,照着模板的函数签名改参数就能接上自己的传感器和通信模块。我拆这份模板时最常用到的是串口、定时器和 ADC,下面逐个过一遍。

4.1 串口收发模板:轮询、中断、DMA 三档选择

模板里的 UART 驱动给了三档收发方式。轮询模式适合调试期打印日志,中断模式适合小数据量实时收发,DMA 模式适合大数据包。三者的选择依据是 CPU 占用率和数据长度。串口波特率默认 115200,8 位数据,1 位停止位,无校验。

/* 中断模式发送字符串 */ void UART_SendString_DMA(UART_HandleTypeDef *huart, char *str) { HAL_UART_Transmit_DMA(huart, (uint8_t*)str, strlen(str)); }

用 DMA 发送时必须注意strlen(str),如果传 0 或者不传长度,DMA 会一直等待传输完成中断。另外 DMA 发送是异步的,函数返回不代表数据已经发完。如果你紧接着修改了str缓冲区的内容,可能出现数据错乱。模板里的做法是维护一个发送完成标志位,在HAL_UART_TxCpltCallback里置位,业务代码等到标志位置位后再复用缓冲区。

4.2 定时器:用 SysTick 搭时间片轮询

F411 的 SysTick 是内核自带的 24 位递减计数器,模板在SysTick_Handler()里维护了一个毫秒计数变量,这个变量是所有延时和调度逻辑的基础。

volatile uint32_t uwTick; void SysTick_Handler(void) { uwTick++; /* 每 1 ms 加一 */ } void HAL_Delay(uint32_t delay) { uint32_t tickstart = uwTick; while ((uwTick - tickstart) < delay); }

HAL_Delay的实现看起来简单,但有个隐蔽行为:它会在循环里导致 CPU 空转,而且中断优先级如果设置不当,在中断服务函数里调用HAL_Delay会死等。模板把SysTick的中断优先级设置为最低,如果是裸机顺序执行的结构足够用。需要多任务并行时,我会用uwTick做非阻塞延时,每个任务记录自己的起始时间戳,在主循环里轮询差值,而不是在任务里空转。

4.3 多通道 ADC 采集:DMA 搬数避免 CPU 干预

F411 的 ADC 是 12 位精度,模板里给了单通道轮询和多通道 DMA 两个版本。项目里用到三路模拟量采集时,我会直接用 DMA 版本,配置循环采样模式,让 ADC 自动把数据搬运到内存数组。

static uint16_t adc_buf[3]; void ADC_Start_DMA(void) { HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buf, 3); } void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { /* 每轮三通道转换结束后进入,此时 adc_buf 已更新 */ }

这里有个必须注意的参数细节:HAL_ADC_Start_DMA的第三个参数是转换次数,不是通道数。如果你配置了 3 个通道按序列扫描,要填 3;如果填 1,DMA 只搬一次就停了。同时转换结果在adc_buf里的顺序和 ADC 通道配置顺序一致,不是按引脚排列,千万别在从机端处理时搞错顺序。模板里建议把adc_buf声明为uint16_t,因为 F411 的 ADC 寄存器是 12 位有效位,用uint32_t的话 DMA 配置要同步改数据宽度,否则数据错位。

5. 调试与避坑:时钟、启动文件、下载失败的常见问题清单

模板资源本身能帮你跳过大部分环境问题,但实际跑板子时还是有几个高频坑。以下这些问题都是我实际踩过的,按“现象 → 原因 → 解决”的格式写,遇到类似情况可以直接对着排查。

5.1 现象:J-Link/ST-Link 连接不上芯片

连接下载器后报错No target found,或者进度条卡在Connecting to target。原因往往是目标板供电不足,或者 SWD 引脚被复用成了 GPIO。F411 的 PA13/PA14 默认是 SWD 引脚,但如果程序里把它们初始化为普通 GPIO 输出,第二次烧录就会失败。解决方法是按住复位键,在点击烧录后瞬间松开,利用复位期间向量表还没执行的特点抢在程序配置 GPIO 前把连接建立,或者把 BOOT0 拉高进入系统存储器模式,此时芯片不会执行用户程序,SWD 一定可用。

5.2 现象:复位后死在 HardFault_Handler

程序上电后单步调试正常,一运行就跳进硬件错误中断。最常见的原因是栈溢出或者时钟配置超出范围。把调试器停在 HardFault 位置,查看调用栈里的地址,如果地址落在SystemClock_Config附近,重点查 PLL 参数。使用 8 MHz 晶振时PLLM=8没问题,使用 25 MHz 晶振时PLLM必须改成 25,否则 PLL 输入频率等于 25 MHz,远超芯片允许的 2 MHz 输入上限,时钟锁不住,外设访问异常,最终触发硬件错误。

5.3 现象:串口输出乱码

波特率配置明明是 115200,但接收端看到一堆乱码。先查调试器和目标板是否共地,不共地时电平参考点不一致,通信波形是浮动的,接收端采样位置漂移,就会出乱码。再查主频实际值,如果外部晶振虚焊或者用了内部 HSI,实际系统时钟不是 100 MHz,波特率分频计算结果就会偏离,建议先用HAL_RCC_GetSysClockFreq()打印实际频率确认。

5.4 现象:上电后程序不运行,需要按一下复位键

程序烧录成功但上电没有自动运行,手动复位才跑起来。原因是 BOOT0 引脚电平状态不对,BOOT0 拉高时芯片从系统存储器启动,不会执行 Flash 里的用户程序。解决方法是把 BOOT0 用跳线帽接地,也就是选择主 Flash 启动模式。另外注意 F411 的部分开发板上 BOOT0 有下拉电阻,如果默认存在 0 欧电阻焊错位置,也会出现同样现象。

5.5 现象:编译报错 L6406E:No space in execution regions

链接失败,提示 Flash 或 RAM 空间不足。模板默认把工程放在片内 Flash 和 SRAM,F411 有 512KB Flash 和 128KB SRAM,正常例程足够。如果你加了大图片字库或者调试串口缓冲区开得过大,空间就会被吃满。解决方法是查看.map文件里哪个段占用了最多空间,通常是大数组没有限定在 RAM 区域导致的,把只读数据改为const让它进 Flash,能省下不少 RAM。

6. 两个用得上的模板技巧:宏开关切换调试串口与内存布局规划

模板用到后期,我会在两个点上做二次封装。第一个是调试串口的宏开关。项目里串口可能同时连接传感器和调试终端,频繁改引脚或重新编译很费时间。我在模板基础上定义了一个切换宏:

#define DEBUG_UART_INDEX 1 /* 1:USART1 for debug, 2:USART2 */ #if (DEBUG_UART_INDEX == 1) #define DEBUG_HUART huart1 #elif (DEBUG_UART_INDEX == 2) #define DEBUG_HUART huart2 #endif

在main.c里把printf重定向到DEBUG_HUART,换调试口时只改宏的值,不用动业务代码。这种做法在从最小系统板切到带底板的应用板时特别省事,底板上的调试引脚往往和最小系统板不一致。

第二个技巧是内存布局规划。F411 的 128KB SRAM 可以拆成主 SRAM 和 CCM RAM,模板链接脚本默认把数据放主 SRAM。如果你的业务里有一块不允许被 DMA 访问的缓存,比如音频数据的暂存区,放进 CCM RAM 反而合适;相反,如果这块缓存要被 DMA 搬运,必须留在主 SRAM,否则 DMA 读出来全是零。手动改链接脚本时我会在SECTIONS块里新增一段带有对齐约束的区域,然后用属性修饰符把变量放进去。从那以后我每次换模板芯片,都会先看一遍.ld文件确认内存分布,再开始配外设,这个习惯帮我避开过不少数据错乱的暗坑。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

HTTP实战笔记:从协议底层逻辑到线上问题排查的工程指南

HTTP实战笔记:从协议底层逻辑到线上问题排查的工程指南

1. 为什么值得重新聊一聊 HTTP做后端开发或者前端联调时间长了&#xff0c;你会发现一个现象&#xff1a;很多人对 HTTP 的理解停留在“请求-响应”“GET 和 POST 的区别”这个层面&#xff0c;一旦遇到线上问题——比如接口偶发超时、浏览器缓存不生效、跨域预检请求莫名多了一…

2026/10/21 6:06:26 阅读更多 →
C#刷LeetCode完整方法论:从看题就懵到每天AC的实操指南

C#刷LeetCode完整方法论:从看题就懵到每天AC的实操指南

从“看题就懵”到“每天AC”——我用C#刷LeetCode的完整方法论如果你是一个C#开发者&#xff0c;想靠LeetCode提升算法能力&#xff0c;但打开题库就不知道从哪下手&#xff0c;或者刷了几天觉得“C#写算法怎么这么别扭”&#xff0c;那这篇文章就是写给你看的。我本人是.NET方…

2026/10/21 6:06:26 阅读更多 →
工程师的结构化思维:问题拆解、逻辑表达与行动落地

工程师的结构化思维:问题拆解、逻辑表达与行动落地

简介&#xff1a;本资源是一份系统讲解麦肯锡结构化思维方法论的精品PPT课件&#xff0c;面向职场新人、中层管理者、咨询从业者及希望提升逻辑表达与问题解决能力的学习者。内容紧扣“把事情想清楚、说明白、做到位”这一核心目标&#xff0c;深入解析结构化思维的逻辑性、系统…

2026/10/21 6:06:26 阅读更多 →

最新新闻

大语言模型训练全流程解析:从Token到SFT与RLHF的工程实践

大语言模型训练全流程解析:从Token到SFT与RLHF的工程实践

1. 先建立整体坐标系&#xff1a;LLM的四大训练阶段与核心概念地图聊大语言模型之前&#xff0c;我觉得最重要的事不是急着看某个公式或者某个库的API&#xff0c;而是先把整个训练流程的“地图”装进脑子里。很多人一上来就盯着“上下文窗口”“Token”这些名词逐个查&#xf…

2026/10/21 6:59:47 阅读更多 →
知识工作插件化:从设计逻辑到工程落地的完整实践指南

知识工作插件化:从设计逻辑到工程落地的完整实践指南

1. 从"知识工作插件"这个命名说起&#xff1a;它到底在解决什么问题第一次看到 knowledge-work-plugins 这个命名&#xff0c;我的直觉是&#xff1a;这不是一个具体的工具&#xff0c;而是一类架构思路的统称。它指向的是把"知识工作"这件事拆解成可插拔、…

2026/10/21 6:59:47 阅读更多 →
深度学习训练诊断:从梯度消失到激活漂移的排查实践

深度学习训练诊断:从梯度消失到激活漂移的排查实践

一开始接触深度神经网络的时候&#xff0c;我最大的困惑不是“它能不能学”&#xff0c;而是“它到底是怎么学出来的”。前面几篇我们聊了网络结构、损失函数、正则化这些基础零件&#xff0c;但真到了调模型的时候你会发现&#xff0c;真正拉开差距的往往不是模型的骨架&#…

2026/10/21 6:59:47 阅读更多 →
储能与虚拟电厂收益关键:预测系统可信度如何构建

储能与虚拟电厂收益关键:预测系统可信度如何构建

最近这段时间&#xff0c;储能和虚拟电厂几乎成了能源行业最热的两条赛道&#xff0c;各种项目发布会、示范工程、聚合平台路演一个接一个。但圈内人私下聊起来&#xff0c;真正关心的不是谁的电池容量大、谁的界面做得炫&#xff0c;而是同一个问题&#xff1a;项目到底能不能…

2026/10/21 6:59:46 阅读更多 →
告别通用模板:答辩PPT的场景化应用策略拆解

告别通用模板:答辩PPT的场景化应用策略拆解

每到毕业季&#xff0c;答辩现场的“翻车”方式总是千奇百怪&#xff1a;有人PPT做得像产品发布会&#xff0c;评委想看的数据却一页都没有&#xff1b;有人内容明明很扎实&#xff0c;却因为版式太乱、逻辑断层&#xff0c;被误判为“准备不充分”&#xff1b;还有人开场就念稿…

2026/10/21 6:59:46 阅读更多 →
Linux网络学习【传输层协议UDP】

Linux网络学习【传输层协议UDP】

&#x1f525;承渊政道&#xff1a;个人主页 ❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法》 《C知识内容》 《Linux系统与网络知识》 《算法刷题指南》 《测评文章活动推广》 《大模型语言路线学习》 《MySQL数据库学习》 《Python知识内容》 《cpolar知识学习》 ✨…

2026/10/21 6:58:46 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →