ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

AI辅助STM32开发实战:从CubeMX到代码生成的完整流程

AI辅助STM32开发实战:从CubeMX到代码生成的完整流程 这两年AI编程话题在嵌入式圈里其实是有点微妙的。一边是互联网方向的同学已经让Agent批量生成Web接口了一边是不少搞MCU的工程师还抱着“AI写不了寄存器配置”的想法观望。我自己是从2023年底开始认真把AI编程工具接进STM32开发流程里的从最开始只是让AI跑通一段点灯代码到后来整个项目的初始化、驱动框架、应用逻辑都在AI辅助下推进踩过不少坑也沉淀出一套稳定可复用的流程。今天这篇就把这套流程彻底拆开讲清楚包括环境搭配、提示词设计、代码整合、调试排错以及哪些环节AI真的能扛哪些环节它一定会翻车。这个做法适合三类人一是刚入门的嵌入式新手用AI加速学习曲线少走弯路二是做毕设、DIY项目的学生想快速把硬件功能跑起来三是有经验的工程师想把自己从重复的寄存器配置和样板代码里解放出来。无论你属于哪一种这套流程的核心都是一样的——用AI帮你写代码、读懂手册、排查问题但永远不要用AI替代你对硬件的理解和验证。1. AI编程在嵌入式软件里的真实边界先泼一盆冷水。网上很多AI编程的演示视频拿个空工程直接让AI写一个“STM32温控系统”AI一口气吐了两百行代码看起来像模像样但你把它丢进Keil里编译十有八九是红了一片。不是AI不行是很多人用错了场景。在STM32开发里AI编程的价值是有明确边界的我按自己用下来的体感排序如下。1.1 AI真正擅长的四个环节第一个是应用层逻辑代码生成。比如按键扫描、状态机、数据滤波、菜单界面、通信协议打包解包这些属于“逻辑密集型”代码不依赖具体芯片引脚AI写得又快又规范。你只要在提示词里描述清楚输入输出、状态转换条件和边界处理生成结果基本可以直接用。第二个是数据手册和寄存器解释。ST的Reference Manual动辄上千页新手找某个定时器寄存器的说明往往要翻半小时。AI对这种结构化知识的理解比我见过的绝大多数人强你可以直接问“STM32F103的TIM2_CH1在复用功能下对应哪个引脚AFIO需要如何配置”它给出的答案准确率非常高。第三个是编译报错和调试辅助。Keil的MDK报错信息向来晦涩什么L6218E: Undefined symbol新手看了直接懵。把报错全文扔给AI它能很快定位到是缺了源文件、声名未定义、还是重复包含了头文件同时给出修复方案。第四个是生成模板代码和单元测试。STM32开发里大批模板代码是高度重复的ADC单次采集、UART收发环形队列、I2C读写寄存器、SPI命令封装你让AI先生成一版然后自己按项目需要微调效率至少翻一倍。1.2 哪些方面AI不靠谱甚至很坑第一坑是AI对具体板级环境的幻觉。你问它“STM32F407ZGT6的引脚PA6能不能作为TIM3_CH1输出”它可能信誓旦旦说可以实际一查F407默认复用功能表PA6是TIM3_CH1没错但映射到的是AF2。这类细节它偶尔会记错必须以ST官方手册或者CubeMX显示为准。第二坑是库版本混乱。你问AI生成一段代码它默认输出的是标准外设库SPL写法而你的工程是HAL库函数名完全不兼容。如果提示词里没有强制约束库类型AI生成的东西经常没法用。第三坑是硬实时与上下文环境不敏感。AI生成的中断处理函数不会主动考虑你在中断里是否调用了可重入函数也不会关心某段代码执行的时钟周期。它写出来的逻辑是“对的”但在嵌入式里“对”和“能用”中间隔着一层时序约束。第四坑是新芯片型号知识落后。AI模型训练有截止时间对比较新的STM32U5、H7RS系列的一些细节功能往往了解不全甚至会给出不存在的寄存器名。所以我总结下来嵌入式软件AI编程的定位应该是“结对编程搭子”而不是“自动编程机器”。AI负责把代码骨架、逻辑细节、文档解读这部分脏活累活接过去工程师负责所有与硬件、时序、可靠性相关的判断。2. 开发工具链与AI编程工具选型聊完边界进入实操第一步怎么搭一套好用的AI辅助STM32开发环境。这一节我把自己正在用的组合和替换方案都整理出来你照着抄就行。2.1 传统STM32开发环境部分STM32开发环境虽然网上各种说法但主流就三板斧。第一是STM32CubeMX用于芯片选型、引脚复用配置、时钟树配置、中间件和初始化代码生成。这一步我从不放过哪怕明知道用哪个引脚我一样先过一遍CubeMX因为这样AI拿到的上下文是真实的初始化代码而不是它自己脑补的配置。这个习惯后续能规避大量引脚冲突和时钟配置错误。第二是IDE的选择三选一Keil MDK老项目最多网上资料最全但IDE本身比较老旧。STM32CubeIDE官方免费GCC编译链调试集成好新项目我基本用它。CLion GCC OpenOCD插件丰富适合习惯JetBrains系的人配置成本偏高。个人建议如果你的项目要从零起步直接上STM32CubeIDE同一个软件里完成CubeMX、编译、下载和调试省去一堆环境折腾。如果你后面主要用VS Code插件的AI编程工具那就CubeMX生成CMake或Makefile工程再用VS Code打开也能顺畅衔接。第三是调试硬件ST-Link V2或V3都行V2够用V3下载速度快一些价格也贵一些。做嵌入式开发没有调试器就像开车没有仪表盘必须配。2.2 AI编程工具怎么选哪些更适合嵌入式AI编程工具现在遍地开花但它们适合的场景差异很大。我按“嵌入式开发”这个特定场景重新排了一下优先级。首选VS Code Continue 或 Cline 插件Continue的好处是支持本地模型和云端模型双路切换可以把你常用的代码片段作为参考上下文上传也可以自由切换Claude、GPT、本地运行的量化模型来做联网受限时的补充。Cline偏Agent模式可以自主读文件、改代码、执行指令在STM32工程里用起来比纯对话式工具省心很多但也需要盯着它改过头了你要及时发现。次选CursorCursor本质是魔改版VS Code内置了强大的AI能力用起来确实聪明很多代码补全的上下文理解都做得很好。唯一的痛点是它加载大型嵌入式工程时索引需要时间而且订阅费用不便宜。如果你的机器配置不错、愿意付费Cursor体验很流畅。网页版对话工具网页版ChatGPT、Claude、Kimi等都是搞不定问题时才开最适合做代码解释、设计方案对比、生成完整模块。好处是不占IDE内存坏处是上下文不连续你得手动把报错粘贴过去。我个人的使用习惯是IDE插件处理工程内部代码网页版处理跨模块复杂问题。国内模型要不要用国内的大模型工具如豆包、通义千问、DeepSeek的代码能力这两年已经追得很紧而且针对中文技术文档的理解反而有时更占优。如果你的项目代码涉密、不能出内网那就得考虑私有化部署的模型或者干脆只用本地的小模型做补全。这块没有绝对最优按你的公司合规要求来。2.3 嵌入式场景下AI工具的配置技巧我第一次用Continue的时候它给我的代码补全完全无视我的工程环境后来才研究明白IDE插件类工具的能力上限很大程度上取决于你喂给它的上下文。配置上有几个实操心得第一工程文件尽量让AI“看见”。在VS Code里设置插件读取文件时不要把整个工程的所有源文件都让它读进去它会算爆上下文。你可以手动指定让AI优先读取CubeMX生成的main.c和stm32f1xx_hal_conf.h这两个文件几乎包含所有初始化信息有了它们AI生成的代码匹配度会突飞猛进。第二通过.aiignore或者工程白名单机制把不需要的库目录排除掉比如STM32的HAL库源码有几MBAI每次都读一遍既浪费token又容易干扰判断。让它专注在你自己写的文件上就好。第三对话式AI的正确打开方式是把整个工程中某个源文件全文贴进去再提问。别只贴报错片段或问一句“UART转串口打印怎么配置”你要把CubeMX生成的MX_USART2_UART_Init()函数体贴进去然后告诉AI“这个UART2已经初始化了帮我写printf重定向代码”。这比让它从零配置要稳太多。3. 一套可直接复制的AI辅助STM32开发流程这一节是全文最核心的实操部分。我会带一个最简单的实战案例在STM32F103C8T6蓝板Blue Pill上用按键控制LED的亮度等级切换三档同时把每次状态变化通过串口打印出来。这个案例麻雀虽小但覆盖了GPIO、外部中断、PWM、串口重定向四个STM32高频知识点且全程会演示AI如何参与每个环节。3.1 第一步用CubeMX初始化工程不要直接让AI写全部代码先把工程的“地基”用CubeMX打好。打开STM32CubeMX新建工程选择芯片STM32F103C8Tx然后做以下配置PinoutPA1 → 设置为GPIO_Output作为LED控制引脚。PA0 → 设置为GPIO_EXTI0作为按键输入内部开启上拉Pull-up因为按键另一端接GND按下时为低电平。PA2 → 设置为USART2_TX用于串口打印。PA3 → 设置为USART2_RX可选留作以后接收数据。Clock ConfigurationHSE设为8MHz外部晶振Blue Pill板载8MHz晶振HCLK拉高到72MHz。注意这里用内部HSI也行但串口波特率会有误差要串口通信稳定必须外部晶振。Project Manager工具链选SW4STM32或者Makefile取决于你后面用CubeIDE还是VS Code打开。生成独立的.c/.h文件方便整合到VS Code里让AI读取。点击GENERATE CODE把初始工程拷到一个叫stm32_ai_demo的文件夹里。这个过程我强调一个关键点CubeMX生成的初始化代码不要删、不要改。你后续手写和AI写的所有逻辑代码都应当添加在CubeMX保留区/* USER CODE BEGIN */和/* USER CODE END */之间。这样以后你改了引脚配置再重新生成代码时AI帮你写的逻辑不会丢。3.2 第二步用AI生成PWM输出和LED调光代码打开VS Code把stm32_ai_demo工作区加进去启动Continue/Cline插件新建一个对话。我给AI的提示词是这样的这一套格式我用了很久基本不会翻车请基于以下工程上下文在STM32CubeMX生成的main.c中添加PWM初始化功能 当前环境 - 芯片型号STM32F103C8T6 - 开发库STM32 HAL库 - 时钟72MHz - 目标引脚PA1已设置为GPIO_Output - 需求把PA1配置为复用推挽输出映射到TIM2_CH2输出频率20kHz的PWM信号通过改变占空比控制LED亮度 要求 - 代码嵌入在 USER CODE BEGIN 区域内 - 使用HAL库函数不要使用标准外设库 - PWM设置三档亮度占空比10%、50%、90% - 给出 main.c 中需要添加的完整代码片段把这段提示词扔给AI后它大概率会给出类似这样的输出/* USER CODE BEGIN PV */ TIM_HandleTypeDef htim2; /* USER CODE END PV */ /* USER CODE BEGIN 0 */ void MX_TIM2_Init(void) { TIM_OC_InitTypeDef sConfigOC {0}; htim2.Instance TIM2; htim2.Init.Prescaler 72 - 1; // 72MHz/72 1MHz htim2.Init.CounterMode TIM_COUNTERMODE_UP; htim2.Init.Period 50 - 1; // 1MHz/50 20kHz htim2.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(htim2); sConfigOC.OCMode TIM_OCMODE_PWM1; sConfigOC.Pulse 5; // 10% duty sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(htim2, sConfigOC, TIM_CHANNEL_2); HAL_TIM_PWM_Start(htim2, TIM_CHANNEL_2); } /* USER CODE END 0 */这里我要给AI加一层保险它生成的TImer2初始化里只调用了HAL_TIM_PWM_Init但它没有把TIM2的时钟在HAL_TIM_PWM_Init之前开启。真实项目中这个功能通常由CubeMX生成的MX_TIM2_Init负责而且必须在main()里先调用。所以我实际做的时候会额外要求AI确认“是否需要开启TIM2时钟”__HAL_RCC_TIM2_CLK_ENABLE(); // 使能TIM2时钟AI经常漏掉这一句把这条加到MX_TIM2_Init函数开头编译就稳了。3.3 第三步AI生成串口重定向代码STM32F103使用HAL库时标准库的printf默认输出到调试器不会自动走串口。你需要重定向fputc到USART2。把提示词简化成这样在STM32 HAL库工程中USART2已经初始化完毕波特率115200写出printf重定向的完整实现包含以下要点 - 重定向fputc到HAL_UART_Transmit使用等待发送完成模式 - 在STM32CubeIDE/GCC工程中要包含#include stdio.h - 添加对\n自动转换成\r\n的处理避免串口终端只换行不回车 - 代码放在USER CODE区域AI给出的代码一般是/* USER CODE BEGIN 4 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(huart2, (uint8_t *)ch, 1, HAL_MAX_DELAY); return ch; } /* USER CODE END 4 */这个写法在CubeIDE GCC环境下没问题但如果你用Keil MDK则需要勾选Target页面里的Use MicroLIB否则fputc重定向不生效编译器还会报FILE未定义。这个差异AI不一定知道你的工具链所以在提示词里必须说明编译器环境或者你自己手工补上这个坑。我在用AI生成这类跨工具链代码时通常会加一句“同时告诉我如果使用Keil MDK需要额外做什么配置”能省掉很多摸索时间。3.4 第四步AI生成按键中断和状态机逻辑按键检测有两种常见做法轮询和外部中断。我的经验是轮询简单可靠但为了展示AI处理中断逻辑的能力这里用外部中断EXTI方式而且正好可以展示一个很常见的细节坑。给AI的提示词PA0配置为EXIT0下降沿触发按键按下触发中断。请实现 - 使用HAL_GPIO_EXTI_Callback回调函数 - 每次按键触发时把当前亮度等级加1三档循环 - 根据档位通过__HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_2, pulse)修改PWM占空比 - 调用printf输出当前亮度等级 - 请注意不要修改CubeMX生成的HAL_GPIO_EXTI_IRQHandler函数只补充回调部分AI输出的回调函数void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin GPIO_PIN_0) { static uint8_t level 0; level; if (level 2) level 0; uint16_t pulse_value 0; switch (level) { case 0: pulse_value 5; break; // 约10%占空比 case 1: pulse_value 25; break; // 约50%占空比 case 2: pulse_value 45; break; // 约90%占空比 } __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_2, pulse_value); printf(LED brightness level: %d, pulse: %d\r\n, level, pulse_value); } }这里AI犯了一个常见错误它没有做按键消抖。真实硬件中机械按键按下和松开的瞬间会产生几十毫秒的抖动如果直接进中断一次按键很可能会连续触发3到5次中断亮度直接跳好几档。为了消抖有几种办法在回调里加HAL_Delay(20)做简单延时中断里用HAL_Delay不优雅但简单学学够用。更好的做法在回调里只把标志位置1回到主循环后再延时确认状态。我让AI完善一版它补了一个计时器防抖方案void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { static uint32_t last_time 0; uint32_t now HAL_GetTick(); if (GPIO_Pin GPIO_PIN_0 (now - last_time) 50) { last_time now; // 真正处理按键逻辑 } }这个方案在大多数场景下够用了。不过我的建议是按键消抖这种事你最好自己心里有数AI写出来也好没写出来也好你要能在评审时一眼看出这个问题。3.5 第五步编译、烧录、验证把AI生成的代码整合进main.c后完整主循环的雏形如下int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); MX_TIM2_Init(); // AI生成的PWM初始化 // 开启PWM输出也可以在MX_TIM2_Init里调用 while (1) { // 可以放一些后台任务比如闪烁LED指示系统运行状态 HAL_Delay(10); } }编译过程中遇到问题直接按我第5章里的排错方法找AI。成功烧录后现象应该是上电默认亮度为10%按一下按键亮度跳到50%串口输出LED brightness level: 1, pulse: 25再按一下跳到90%再按回到10%全程串口无乱码波特率115200。把你手里的开发板跑通一次这个流程你就对“AI辅助STM32开发”有了完整的体感。4. 提示词设计和上下文管理AI生成代码的关键很多人在AI编程上“翻车”根本原因不是AI能力差而是他不会问问题。尤其是嵌入式软件跟Web开发不一样工程的硬件状态、引脚配置、库版本这些信息如果不给AI它只能靠猜猜就必然出偏差。我把自己在STM32项目中反复验证过的一套提示词模板拆解给你你可以直接复制改一改。4.1 一个稳定的嵌入式AI提问模板【角色】你是一名有10年经验的嵌入式软件工程师精通STM32系列单片机开发熟悉HAL库、LL库和标准外设库。 【环境】 - 芯片型号STM32F103C8T6 - 开发库STM32 HAL库 v1.8.0 - 编译器ARM GCC 10.3 - IDESTM32CubeIDE - 主频72MHz - 已有初始化USART2已初始化波特率115200TIM2已配置为PWM输出通道2接PA1 【任务】实现某个具体功能…… 【要求】 1. 使用HAL库函数不推荐使用寄存器直接操作。 2. 代码放在USER CODE BEGIN/END之间。 3. 给出完整的代码并解释关键函数的作用。 4. 提示可能踩到的坑比如时钟问题、引脚复用冲突、编译优化问题。这个模板和网上流行的“简单问法”差别很大。最大的区别是我把环境信息前置然后让AI在回答问题之外主动给出避坑提示。实测下来同一个功能用这个模板生成的代码编译通过率能提高不少代码质量也可控得多。4.2 给AI喂上下文的三板斧第一板斧把CubeMX生成的初始化代码直接粘贴给AI。不要只给一句“我初始化了UART”而是要贴完整的MX_USART2_UART_Init()函数甚至把main()函数里调用初始化的顺序也贴过去。AI看到确切的句柄名huart2就能生成真正匹配的代码。很多人AI写得代码报“huart2未定义”就是因为没贴上下文AI用了一个它想象出来的名称。第二板斧把硬件连接关系描述清楚。嵌入式项目里很多bug是软件和硬件没有对齐。提示词里要说清楚“按键一端接PA0另一端接GND按下为低电平”否则AI会默认高有效。这个信息你如果不给它就会按通用写法配成上拉还是下拉都有可能实际板子跑起来就反了。第三板斧明确要求AI使用“增量修改”而不要“重写全文件”。如果你让它“帮我加一个PWM输出功能”它可能会给你一个全新的main.c把你的其他配置全冲掉。要在提示词里强调“只输出需要新增的代码片段不要重复输出已经存在的代码”这样集成起来才省心。4.3 场景化技巧让AI当你的一线面试官除了写代码AI在嵌入式开发里还有一个被低估的用途帮你Review代码。你把写好的代码发给AI问它“这段代码在实时性、可维护性、资源占用上有什么问题”。如果是STM32工程你还可以让它补充“这段代码如果放在中断里执行有什么风险”“如何减少阻塞”等建议。我的体会是AI当Reviewer的水平高于大多数半年经验的工程师它能发现你忽略的边界条件。但它给出的建议需要人工筛选比如它可能会建议你上RTOS这个在简单裸机工程里可能就是过度设计。5. 常见编译与调试问题以及AI怎么帮你排雷这一节写实操中最常遇到、也最劝退新手的几类问题。我会把现象、原因、和AI协助排查的过程都列出来你可以直接当成速查表用。5.1 编译链接报错现象1Undefined symbol HAL_UART_Transmit原因分析没有把stm32f1xx_hal_uart.c编译进工程或者没有使能UART模块。 AI排查方法把报错信息发给AI它会告诉你CubeMX生成的工程里缺失了对应的HAL模块源文件或者CubeMX初始化代码里根本没有调用MX_USART2_UART_Init。解决在CubeMX里打开USART2重新生成代码。现象2L6406E: No space in execution regions with .ANY selector matching原因分析FLASH或RAM溢出了一般是芯片容量太小而你的代码和全局变量太多。 AI排查方法问AI“如何优化STM32F103C8T6的编译内存占用”它会给出减少数组大小、把常量放Flash、使用-Os优化选项等建议。但要注意这个报错更多是资源规划问题AI的建议只能缓解如果模块太大换更大内存的芯片才是正道。5.2 运行时的硬件行为不对现象3LED死活不亮用万用表量引脚电压正常。 原因分析GPIO配置成推挽输出了但板载LED的限流电阻或者极性接法跟你写的不一致。不少开发板LED是低电平点亮阴极接GPIO阳极接VCC你要输出低电平而不是高电平。 排查方法直接把你的原理图描述给AI问“PA1高电平电路LED阴极接PA1阳极接VCC那输出什么电平能点亮”AI能帮你从原理图推出应设置GPIO_PIN_RESET远比你自己翻代码快。现象4串口打印乱码偶尔能出字但不稳定。 原因分析最常见是波特率配错或者是系统时钟配置成HSI而不是HSE。STM32F103的HSI只有±1%的精度如果8MHz倍频到64MHz而不是72MHz波特率就会偏差串口就会乱码。如果用了CubeMX自动生成的时钟配置还乱码检查一下芯片实际外部晶振是不是8MHz换了12MHz的板子要改时钟树配置。 排查方法让AI算一遍“当系统时钟64MHz、USART2分频系数为x时实际波特率是多少”它能立刻告诉你偏差有多大帮你确定是不是时钟问题。现象5系统进HardFault_Handler。 原因分析指针越界、数组访问越界、栈溢出、非法中断调用等。这是嵌入式里排查成本最高的问题。 AI排查方法在代码关键路径加调试打印或者利用调试器看PC值把PC值和反汇编结果喂给AI。AI能根据崩溃地址大致判断是哪个函数出了问题。但真正定位还需要你自己用断点、Watch窗口、Call Stack慢慢缩小范围。这里必须提醒一句AI给的分析方向可以借鉴但不要偏听偏信它没法验证你的硬件现场。5.3 AI参与调试的标准姿势我的调试原则是三句话只描述现象不把AI当上帝粘贴真实数据不让AI脑补让它给排查路径而不是直接判定。举个例子不要这样问“我的串口乱码了为什么”而应该这样问我在STM32F103C8T6上使用USART2配置如下CubeMX时钟HSE8MHzHCLK72MHzUSART2波特率115200。实际测试输出乱码使用逻辑分析仪抓到的波形显示波特率约为96100。请帮我分析可能是什么原因并给出排查步骤。AI看到具体的配置和测试数据就能定位到波特率寄存器分频计算或者时钟树的问题而不是泛泛地说“检查接线检查波特率”。把数据喂给它它才有用武之地。6. 实操心得和最后的小建议文章写到这里其实该讲的流程、工具、代码模板都覆盖了。最后聊聊我在这个实操里积累的几个个人体会可能比前面的方法论更值钱。第一个体会是AI编程在嵌入式里不是用来“省写代码”的而是用来“省查资料”的。STM32开发真正耗时的是反复翻数据手册、查CubeMX的引脚定义、看别人工程对某个外设的配置。AI把这些结构化知识整合、解释、适配的能力才是它最大的价值。第二个体会是对AI生成的代码要保留一颗审慎的心。我吃过最大的亏是信了AI的寄存器地址直接操作一个不存在的位域结果行为诡异了半个下午。从那以后我给自己立了一条规矩AI生成的代码涉及寄存器配置、引脚复用、时钟分频、外设基地址这些硬件相关细节我必须对照CubeMX生成的代码或官方手册核对一遍。逻辑代码可以放宽硬件代码必须严卡。第三个体会是这套流程建议从一个小Demo开始练手别一上来就拿真实项目让AI写。先跑通按键控制LED、串口打印、ADC采集闭环这几个用例培养出“你负责审核、AI负责输出”的协作手感后再放到实际项目里放大产能。这样你踩坑的成本低建立起来的流程也会更稳健。最后分享一个我在几次项目里养成的习惯每一次和AI的协作对话如果它给出了一段好用的代码或一个关键的分析思路我会把这段对话整理成一个Markdown笔记按外设分类存档。比如“UART_printf重定向.md”“TIM_PWM调光.md”“按键消抖方案.md”。下次做类似功能时直接翻笔记比重新和AI对话快得多。AI编程不光是一个工具它其实在重塑我们整理知识的方式你要顺着它的脾气把它变成自己的第二大脑。希望这套流程能帮你把手上的STM32项目往前推进一大截。如果你在用AI辅助嵌入式开发时踩到什么新的坑也欢迎交流毕竟这个领域大家都在摸索经验交换永远是划算的买卖。
返回列表