ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【大模型 + STM32F103C8T6 实战】CSDN 专栏连载(全 6 篇)

2026/9/8 15:29:53 拓冰建站 浏览量
【大模型 + STM32F103C8T6 实战】CSDN 专栏连载(全 6 篇) 专栏定位从原理到落地手把手打通嵌入式与 AI面向嵌入式初学者、大模型应用开发者 所有硬件参数、协议、代码均有官方文档或工程实践支撑仅大模型效果、实际续航等受环境影响第 1 篇硬件边界与可行性分析 ——8 位机也能玩 AI1. 专栏前言很多嵌入式初学者都有同一个疑问只有 64KB Flash、20KB RAM 的 STM32F103C8T6到底能不能用上大模型能不能实现自然语言交互本专栏以「手机 APP 大模型控制智能小车」为完整项目从硬件选型、公式计算、RTOS 移植、云端对接、APP 开发全链路拆解既讲透原理也给出可直接复用的代码和踩坑经验。2. 先算清楚STM32F103C8T6 的家底到底有多少所有可行性分析都建立在硬件资源边界上以下参数均来自 ST 官方文档。2.1 核心硬件参数资源类型参数备注内核ARM Cortex-M3最高主频 72MHz三级流水线程序存储器Flash64KB存放固件代码起始地址 0x08000000运行内存SRAM20KB程序运行内存起始地址 0x20000000通用 IO 口37 个大部分支持 5V 容忍串口3 路 USART支持异步串口通信定时器7 个含高级定时器可输出 PWM通信接口SPI×2、I2C×2可外接各类外设模块数据来源STMicroelectronics 官方文档《STM32F103x8 Datasheet》文档编号DS5319 Rev 18、RM0008 参考手册2.2 大模型到底需要多少资源我们拿主流轻量化大模型做横向对比TinyLlama-1.1B11 亿参数FP16 精度需 2.2GB 显存4bit 量化后仍需约 550MBQwen2-0.5B5 亿参数4bit 量化后需约 250MB即使是微型 MLP 语义分类模型也需要几十 KB 到上百 KB RAM结论STM32F103C8T6 的硬件资源连最小的大模型都无法装载和运行本地跑完整大模型完全不可行。3. 破局大模型在 STM32 上的正确打开方式本地跑不了不代表用不了嵌入式 AI 落地的主流方案是云端大模型 边缘端轻量处理这也是本项目的核心架构。3.1 三层架构设计终端层STM32F103C8T6负责电机驱动、数据采集、指令执行只做实时控制传输层蓝牙 / WiFi 模块负责 STM32 与手机 / 云端的数据交互云端 / 手机层运行大模型负责自然语言理解、指令拆解、状态回复把自然语言转换成机器指令3.2 能实现自然语言处理吗能实现完整的自然语言交互体验但核心 NLU自然语言理解在云端STM32 本地只做指令收发和执行。 交互流程示例用户在手机 APP 输入“慢慢往前走 2 秒然后右转 90 度报一下电量”手机把文本发给云端大模型大模型解析为结构化指令[{action:forward,duration:2,speed:30},{action:turn_right,angle:90},{action:query_battery:true}]手机通过蓝牙把结构化指令发给 STM32STM32 执行动作完成后把电量数据回传手机大模型把数据组织成自然语言“已完成动作当前电量 78%还能跑约 15 分钟”成熟的物联网 AI 落地方案4. 智能小车项目中大模型的具体价值灵活指令解析替代传统固定指令发 “1” 前进、“2” 后退支持模糊表达用户无需记忆指令智能状态解读把原始电压、转速数据转换成人类易懂的自然语言回答简单任务规划高层目标自动拆解为动作序列比如 “绕正方形走一圈” 自动生成 4 次前进 转向辅助故障排查上报异常现象后大模型给出排查步骤和可能原因具体效果取决于 Prompt 设计和大模型能力5. 疑问解答大模型能直接写 STM32 固件吗可以辅助生成但不能直接产出 “拿来就用” 的完整固件。能做外设初始化代码、功能逻辑函数、代码解释、编译错误定位做不到自动适配硬件接线、保证寄存器 100% 正确、解决复杂时序 / 实时性问题代码示例大模型生成的电机驱动代码HAL 库#include stm32f1xx_hal.h // 引入STM32F1系列HAL库头文件提供寄存器封装 // 电机控制引脚定义需根据实际接线修改 #define IN1_PIN GPIO_PIN_0 // 驱动芯片IN1引脚连接PA0 #define IN1_PORT GPIOA // IN1对应的GPIO端口 #define IN2_PIN GPIO_PIN_1 // 驱动芯片IN2引脚连接PA1 #define IN2_PORT GPIOA // IN2对应的GPIO端口 #define PWM_PIN GPIO_PIN_2 // PWM调速引脚连接PA2TIM2通道3 #define PWM_PORT GPIOA // PWM对应的GPIO端口 TIM_HandleTypeDef htim2; // 定时器2句柄用于生成PWM波控制电机转速 /** brief 电机GPIO初始化函数 retval 无 note 配置方向引脚为推挽输出PWM引脚为复用推挽输出 */ void Motor_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct {0}; // 定义GPIO初始化配置结构体 __HAL_RCC_GPIOA_CLK_ENABLE(); // 开启GPIOA外设时钟否则引脚无法工作 // 配置IN1、IN2方向引脚 GPIO_InitStruct.Pin IN1_PIN | IN2_PIN; // 选中两个方向引脚 GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; // 推挽输出模式可输出高低电平 GPIO_InitStruct.Pull GPIO_NOPULL; // 不上拉不下拉 GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW; // 低速满足电机控制需求 HAL_GPIO_Init(GPIOA, GPIO_InitStruct); // 写入寄存器完成初始化 // 配置PWM调速引脚复用定时器功能 GPIO_InitStruct.Pin PWM_PIN; GPIO_InitStruct.Mode GPIO_MODE_AF_PP; // 复用推挽输出由定时器控制电平 GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH; // 高速保证PWM波形质量 HAL_GPIO_Init(PWM_PORT, GPIO_InitStruct); } /** brief 电机正转前进函数 param speed: 速度百分比范围0-100 retval 无 note IN1高、IN2低电机正转通过PWM占空比调节转速 / void Motor_Forward(uint8_t speed) { HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); // IN1置高 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2置低 // 设置PWM比较值定时器自动重装载值ARR1000因此speed10对应百分比占空比 __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_3, speed * 10); } /** brief 电机停止函数 retval 无 note 两个方向引脚都置低电机滑行停止 */ void Motor_Stop(void) { HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); // IN1置低 HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); // IN2置低 __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_3, 0); // PWM占空比设为0 }代码功能基于 HAL 库的单路直流电机驱动框架包含 GPIO 初始化、前进、停止功能支持 PWM 调速逻辑正确实际使用需匹配硬件接线和定时器配置6. 本篇小结STM32F103C8T6 本地无法运行完整大模型资源差距达数百倍正确落地路径是「云端大模型 边缘端执行」可实现完整自然语言交互大模型可辅助生成固件代码但需人工调试适配硬件智能小车项目中大模型核心价值是自然指令解析和智能数据解读第 2 篇硬件选型与公式计算 —— 从零搭出智能小车硬件1. 前言上一篇确定了整体架构本篇落地硬件做这个小车需要哪些元器件怎么选不踩坑电机、驱动、电源怎么算参数所有选型均给出计算公式和计算过程。2. 基础版元器件清单序号元器件名称推荐型号数量作用1主控板STM32F103C8T6 最小系统板1核心控制执行固件逻辑2电机驱动TB6612FNG 模块1驱动两路直流电机效率高于 L298N3减速电机6V 200 转 / 分 直流减速电机2驱动车轮转动4底盘套件亚克力两轮差速底盘含轮子、万向轮1 套机械结构载体5无线模块HC-05 蓝牙模块1与手机 APP 通信6电源7.4V 2S 18650 锂电池带保护板1 组整机供电7下载器ST-Link V2 / USB-TTL1烧录程序、串口调试8配件杜邦线、开关、热缩管、螺丝若干接线与固定进阶可扩展HC-SR04 超声波模块、0.96 寸 OLED 显示屏、语音采集模块均为嵌入式小车成熟通用器件3. 核心器件选型公式与计算过程3.1 电机选型转速与扭矩计算核心公式小车速度与电机转速关系v小车前进速度单位 m/sn电机空载转速单位 rpm转 / 分D车轮直径单位 mi电机减速比电机扭矩与载重关系T电机输出扭矩单位 N・mm小车总质量含电池、电路板单位 kgg重力加速度取 9.8 m/s²r车轮半径单位 mi减速比机械传动效率一般取 0.7~0.8实例计算桌面级小车参数总质量 0.5kg车轮直径 65mm目标最高速度 0.5m/s减速比 30机械效率 0.7。所需空载转速对应输出转速约 147rpm市面常见 200 转 / 分减速电机完全满足所需输出扭矩普通 6V 减速电机扭矩均在 10mN・m 以上留足余量公式来源《电机与拖动基础》顾绳谷 主编经典工程计算方法 对应内容理论计算实际受摩擦力、地面平整度影响建议留 1.5~2 倍余量3.2 电机驱动选型选型核心原则驱动芯片最大输出电流 ≥ 2 倍电机堵转电流留 2 倍余量。两款主流驱动对比驱动芯片单通道峰值电流转换效率发热情况适用场景L298N2A~60%大需散热片大电流电机TB6612FNG1.2A~90%极小无需散热小型低功耗小车本项目小电机堵转电流约 1ATB6612FNG 完全满足且效率高、省电更适合电池供电场景。数据来源东芝 TB6612FNG 官方数据手册、意法半导体 L298N 数据手册3.3 电源选型续航计算续航计算公式t续航时间单位 hC电池容量单位 Ah安时U电池额定电压单位 V电池放电效率一般取 0.8~0.9整机总功率单位 W实例计算整机总功率估算STM32 约 0.1W 蓝牙约 0.1W 双电机全速约 2W 总计约 2.2W。采用 7.4V 2000mAh2Ah锂电池实际使用电机不会一直全速续航更长。注意STM32 和蓝牙为 3.3V 供电需通过 AMS1117-3.3 稳压最小系统板一般已集成功率为估算值实际续航与使用场景强相关4. 本篇小结基础版小车共 8 类核心元器件新手可直接照单采购电机选型看转速和扭矩给出两个核心公式和完整计算过程低功耗小车优先选 TB6612FNG 驱动效率高发热小2000mAh 锂电池可满足数小时续航需求第 3 篇操作系统选型与 FreeRTOS 移植 —— 让单片机 “同时干多件事”1. 前言裸机大循环在多任务场景下实时性差、代码混乱RTOS实时操作系统是嵌入式进阶的必经之路。本篇解答 STM32F103C8T6 能跑什么系统、为什么选 FreeRTOS、怎么快速移植。2. 支持的操作系统清单结论FreeRTOS 可以流畅运行且是最优选择。轻量级 RTOS 对比操作系统内核 RAM 占用内核 Flash 占用特点FreeRTOS~4KB~6KB生态最完善、资料最多、完全免费商用RT-Thread Nano~3KB~5KB国产 RTOS中文资料丰富易用性好uCOS-II~3KB~10KB经典 RTOS商业需授权学习用途无限制LiteOS-M~3KB~6KB华为轻量物联网 OS低功耗优化好以上系统内核均远小于芯片资源上限剩余空间足够运行业务代码。Linux、Android 等大系统无法运行仅适用于 Cortex-A 系列高性能芯片。数据来源各 RTOS 官方文档最小资源占用统计均有大量实际移植案例3. 5 分钟快速移植STM32CubeMX 生成 FreeRTOS 工程ST 官方工具支持一键生成移植好的工程无需手动修改启动文件。核心配置步骤新建工程选择 STM32F103C8T6配置外部 8MHz 晶振、主频 72MHz配置 USART1蓝牙通信、TIM2电机 PWM等外设左侧 Middleware → FREERTOS → 选择 CMSIS_V1 接口配置默认任务栈大小 128 字512 字节满足基础任务需求生成 Keil/STM32CubeIDE 工程多任务框架代码解析#include FreeRTOS.h // FreeRTOS核心头文件 #include task.h // 任务管理API头文件 #include cmsis_os.h // ST官方CMSIS-RTOS封装层 #include main.h // 任务句柄用于操控任务删除、挂起等 osThreadId defaultTaskHandle; osThreadId MotorTaskHandle; // 电机控制任务句柄 osThreadId UartTaskHandle; // 串口通信任务句柄 /** brief 电机控制任务函数 param argument: 任务传入参数 retval 无 note 所有RTOS任务都是死循环不能返回专门处理电机运动逻辑 */ void Motor_Task(void const * argument) { for(;;) // 任务死循环 { // 从指令队列取出指令执行对应电机动作 osDelay(10); // 10ms执行一次保证控制实时性同时释放CPU } } /** brief 串口通信任务函数 param argument: 任务传入参数 retval 无 note 高优先级任务专门处理蓝牙数据接收与解析 */ void Uart_Task(void const * argument) { for(;;) { // 检查串口缓冲区解析指令后写入电机任务队列 osDelay(20); // 20ms处理一次串口数据 } } /** brief FreeRTOS初始化函数 retval 无 note 在main函数中调用启动调度器前创建所有任务 */ void MX_FREERTOS_Init(void) { // 创建电机控制任务优先级normal osThreadDef(MotorTask, Motor_Task, osPriorityNormal, 0, 128); MotorTaskHandle osThreadCreate(osThread(MotorTask), NULL); // 创建串口任务优先级aboveNormal保证指令及时响应 osThreadDef(UartTask, Uart_Task, osPriorityAboveNormal, 0, 128); UartTaskHandle osThreadCreate(osThread(UartTask), NULL); }代码功能标准 FreeRTOS 多任务框架拆分电机控制和串口通信两个独立任务通过队列传递数据 标准框架业务逻辑需自行填充4. 裸机 vs RTOS 对比场景裸机大循环FreeRTOS 多任务并发能力伪并发代码互相阻塞真并发任务独立运行实时性无优先级高耗时代码会阻塞所有逻辑优先级调度高优先级任务优先响应延时精度死循环延时不准易被打断系统定时器调度延时精确可维护性复杂项目代码混乱耦合度高模块化设计每个任务职责单一5. 本篇小结STM32F103C8T6 可运行多款轻量级 RTOS无法运行 Linux 等大系统推荐 FreeRTOS生态最好且支持 STM32CubeMX 一键移植多任务架构提升系统实时性和代码可维护性给出了可直接复用的双任务框架代码第 4 篇全栈软件与云端大模型对接 —— 让小车听懂人话1. 前言硬件和系统搞定后本篇讲软件栈需要哪些开发工具手机 APP 怎么选怎么调用大模型 API怎么把自然语言转换成 STM32 能识别的指令2. 完整软件工具清单2.1 嵌入式开发端软件名称作用是否免费STM32CubeMX图形化外设配置生成初始化代码和 RTOS 工程是ST 官方STM32CubeIDE代码编写、编译、调试官方免费 IDE是Keil MDK5行业主流 IDE个人学习版免费个人免费 / 商业收费XCOM 串口助手串口调试、蓝牙通信测试是推荐新手用 STM32CubeMX STM32CubeIDE全套免费且官方兼容性最好方案难度特点App Inventor极低图形化拖拽编程零基础快速出原型微信小程序中等无需安装扫码即用原生支持网络请求Android Studio高原生 APP性能最强功能最完整本项目推荐微信小程序无需安装、原生支持 HTTP 调用大模型 API、蓝牙 API 完善。部分安卓机型蓝牙兼容性存在小差异2.3 云端大模型国内主流大模型均提供 HTTP API均可接入豆包大模型、通义千问、文心一言等核心是调用聊天补全接口通过 Prompt 约束输出格式。3. 核心技术大模型指令解析 Prompt 设计这是项目的灵魂让大模型把自然语言转换成固定格式的结构化指令STM32 只需要执行简单指令。Prompt 示例你是智能小车指令解析器用户输入自然语言控制指令你必须转换成标准JSON格式输出。 支持的指令类型 forward前进参数duration秒可选、speed0-100可选默认50 backward后退参数同上 turn_left左转参数angle角度可选默认45 turn_right右转参数angle角度可选默认45 stop停止无参数 query_battery查询电量无参数 要求 只输出JSON不要任何解释、多余文字 多条指令按顺序放在数组中 无法识别返回{error: 无法识别的指令} 用户输入慢慢往前走3秒然后右转90度停下报一下电量大模型输出示例[ {action: forward, duration: 3, speed: 30}, {action: turn_right, angle: 90}, {action: stop}, {action: query_battery} ]手机 APP 解析 JSON 后通过蓝牙逐条发给 STM32 执行即可。大模型偶尔会输出格式错误内容需加异常处理4. 串口通信协议与解析代码蓝牙传输字节流需要定义简单协议保证 STM32 正确识别指令。极简协议格式指令码十六进制功能参数格式0x01前进1 字节速度 2 字节时长毫秒大端0x02后退同上0x03左转2 字节角度大端0x04右转同上0x05停止无参数0x06查询电量无参数返回 1 字节电量百分比STM32 串口解析核心代码#include stm32f1xx_hal.h #include string.h extern UART_HandleTypeDef huart1; // 串口1句柄连接蓝牙模块 uint8_t uart_rx_buf[32]; // 串口接收缓冲区 uint8_t rx_index 0; // 缓冲区写入索引 /** brief 串口接收中断回调函数 param huart: 串口句柄 retval 无 note 每收到1字节触发一次中断存入缓冲区不做解析避免阻塞 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart-Instance USART1) // 判断是串口1 { if(rx_index 31) // 防止缓冲区溢出 { rx_index; } else { rx_index 0; // 溢出则清空缓冲区 } // 开启下一次接收中断持续接收数据 HAL_UART_Receive_IT(huart1, uart_rx_buf[rx_index], 1); } } /** brief 指令解析函数在串口任务中周期调用 retval 无 note 解析缓冲区指令调用电机函数执行动作 */ void Uart_Parse_Command(void) { if(rx_index 0) return; // 无数据直接返回 switch(uart_rx_buf[0]) // 首字节为指令码 { case 0x01: // 前进指令 if(rx_index 4) // 校验参数长度1指令1速度2时长 { uint8_t speed uart_rx_buf[1]; // 大端字节序转换为16位整数 uint16_t duration (uart_rx_buf[2] 8) | uart_rx_buf[3]; Motor_Forward(speed); // 执行前进 osDelay(duration); // 持续指定时长 Motor_Stop(); // 到时停止 } break; case 0x05: // 停止指令 Motor_Stop(); break; // 其他指令逻辑同理... default: break; } rx_index 0; // 解析完成清空缓冲区 }代码功能中断接收 任务解析的标准架构中断只存数据任务做解析兼顾实时性和稳定性实际项目建议加帧头、校验和进一步提升可靠性5. 本篇小结软件开发分为嵌入式固件、手机端、云端 API 三部分推荐 STM32CubeIDE 开发固件、微信小程序做手机端核心是 Prompt 工程让大模型输出结构化 JSON 指令定义了串口通信协议给出了可复用的解析代码第 5 篇避坑指南与进阶思考 —— 新手容易忽略的问题1. 前言前面讲了正向实现流程本篇讲实战踩坑做这个项目会遇到哪些常见问题有什么注意事项涉及哪些跨学科知识2. 十大核心注意事项资源余量永远留 20% 以上的 RAM 和 Flash 余量避免大数组、滥用 sprintf 导致内存溢出死机实时性边界大模型推理有几百毫秒到几秒延迟实时控制避障、调速必须本地实现大模型只做高层规划电机电磁干扰电机电刷会产生强干扰导致串口乱码。解决方法电源分区、电机两端并滤波电容、强弱电分开走线离线降级无网络时大模型不可用必须保留本地固定指令作为降级方案失控保护通信丢包可能导致小车失控必须加超时自动停车机制和物理急停按键API 成本调试阶段频繁调用 API 会产生费用建议用免费额度加本地缓存减少重复调用电平匹配STM32 和蓝牙都是 3.3V禁止直接接 5V否则烧模块看门狗复位开启独立看门狗程序跑飞后自动复位提升稳定性功耗优化关闭不用的外设时钟、空闲时进入低功耗模式提升续航数据隐私上传云端的指令数据注意脱敏避免泄露个人信息3. 容易忽略的进阶问题多轮对话上下文维护用户说 “再快点”大模型需要结合历史指令理解语音识别准确率口音、环境噪音会影响语音转文字效果跨平台蓝牙兼容性iOS 和安卓蓝牙栈存在差异OTA 固件升级是否支持无线升级避免每次拆壳接下载器环境适应性灰尘、地面摩擦对小车运行的影响4. 涉及的交叉学科这是一个典型的多学科交叉项目不止是写代码电子信息单片机原理、模拟电路电源 / 滤波、数字电路、通信原理计算机科学嵌入式软件工程、自然语言处理、移动端开发、网络编程自动控制电机控制、PID 调速、实时系统调度机械工程底盘结构、传动受力、材料强度电源电子电池管理、充放电、功耗优化电磁兼容干扰抑制、布线规范5. 进阶升级方向加超声波传感器实现本地避障大模型只做路径规划加编码器实现速度闭环提升运动精度更换 ESP32 主控本地跑量化微型模型实现离线语音识别增加摄像头结合大模型实现视觉理解多车协同单个大模型调度多台小车6. 本篇小结总结了 10 个新手最容易踩的坑和对应解决方法梳理了项目容易忽略的进阶问题拆解了项目涉及的 6 大类交叉学科知识给出了 5 个进阶升级方向第 6 篇项目复盘与拓展 —— 从 Demo 到产品的距离1. 前言专栏最后一篇我们做整体复盘从 Demo 到可落地的产品还差什么以及如何把这套方案复用在其他嵌入式项目上。2. 项目完整复盘核心结论回顾STM32F103C8T6 本地无法运行大模型云端协同是唯一可行路径大模型的核心价值是提升交互体验不替代嵌入式实时控制完整项目需要硬件、固件、APP、云端全栈能力成本估算基础版总物料成本约 80-120 元是非常低成本的 AI 嵌入式练手项目。3. 方案复用大模型 嵌入式的通用范式这套「云端大脑 边缘执行」的架构可以复用在几乎所有嵌入式项目中智能家电自然语言控制空调、台灯工业设备自然语言查询设备状态、故障诊断智能家居语音控制窗帘、门锁机器人高层任务规划底层运动控制本地执行4. 从 Demo 到产品的差距学习 Demo 和商用产品之间还有很长的路稳定性7×24 小时运行不死机、抗干扰能力量产性硬件成本优化、生产工艺、测试标准合规性无线认证、隐私合规、安全标准体验响应速度、容错能力、用户界面5. 专栏结语本专栏从最基础的 “能不能跑” 出发一步步拆解了硬件、系统、软件、云端全链路希望帮你建立完整的技术认知。嵌入式 AI 是未来的大趋势STM32 虽然资源有限但选对架构一样能用上大模型的能力。