背景
身边很多同学、朋友每天都被AI焦虑着,本来上个帖子已经说的很清楚了,下了结论,AI无法替代软、硬件工程师。
上篇帖子演示了”使用Deepseek完成一个简单嵌入式开发“,并做了分析,帖子地址如下:
https://blog.youkuaiyun.com/li171049/article/details/146237807
帖子结尾说了
使用Altium Designer工程,最后是生成gerber文件和bom表,使用keil工程,主要是生成hex文件,我下次可以直接试试让DeepSeek直接生成gerber文件和bom表、hex文件,看看DeepSeek如何接招。
本文分析一下看看DeepSeek 能否直接输出软、硬件工程师想要的核心交付文件。
DeepSeek 生成gerber文件
请帮我生成一个gerber文件;要求:使用stm32F103RCT6为主控芯片,控制3个流水灯。
生成Gerber文件需要完整的PCB设计流程,以下是分步骤指导。若您不熟悉电路设计,建议先完成原理图设计和PCB布局后再生成Gerber文件。
第一步:设计原理图(关键基础)
1. 核心元件清单
- 主控芯片:STM32F103RCT6(LQFP64封装)
- LED:3个普通LED(如0805封装)
- 电阻:3个限流电阻(220Ω-1kΩ,0805封装)
- 晶振:8MHz主晶振 + 32.768kHz RTC晶振(可选)
- 电源:3.3V LDO稳压芯片(如AMS1117)
- 调试接口:SWD接口(10pin 1.27mm间距)
- 按键:复位按键
2. 关键电路设计
STM32F103RCT6
├── PA0-PA2 → 通过220Ω电阻连接LED阳极(LED阴极接地)
├── VDD → 3.3V电源
├── VDDA → 接10nF电容滤波
├── NRST → 10k上拉电阻 + 100nF电容
├── 8MHz晶振 → OSC_IN/OSC_OUT
└── BOOT0 → 10k下拉电阻
第二步:PCB布局建议
- 层堆叠:双面板即可(顶层信号+电源,底层地平面)
- 布局顺序:
- 先放置STM32芯片,靠近板子中心
- 晶振尽量靠近芯片(<15mm),下方避免走线
- 电源电路靠近板边,注意输入输出电容布局
- LED和电阻放置在板边便于观察的位置
- 关键间距:
- 晶振周围预留1mm禁布区
- SWD接口靠近板边便于调试
- 电源走线宽度≥0.3mm(1oz铜厚)
第三步:生成Gerber文件(以KiCad为例)
- 完成PCB设计后,进入 文件 → 制造输出 → Gerber文件
- 设置参数:
- 格式:RS-274X
- 层:选择所有铜层(F.Cu/B.Cu)
- 包含:边缘切割层(Edge.Cuts)、钻孔文件
- 生成文件列表:
- .gbr:各层Gerber文件
- .drl:钻孔文件
- .gml:板框文件
第四步:设计验证
- 使用 Gerber查看器(如KiCad GerbView或在线工具)检查:
- 焊盘是否正确
- 丝印是否清晰
- 钻孔对齐情况
- 进行 电气规则检查(ERC) 和 设计规则检查(DRC)
- 推荐免费验证工具:https://www.pcbway.com/project/OnlineGerberViewer.html
资源提供
由于直接发送文件受限,您可以通过以下途径获取参考设计:
- GitHub开源项目(搜索 “STM32F103 LED PCB”)
- 立创EDA官方STM32模板库
- 参考设计文件(伪代码示例):
// PCB连接伪代码
module stm32_leds(
output LED1, // PA0
output LED2, // PA1
output LED3 // PA2
);
// 电源网络
wire VCC3V3 = AMS1113-3.3V(VIN);
// 复位电路
assign NRST = RC(10k, 100nF);
endmodule
注意事项
- 量产前务必打样测试
- 建议添加电源指示灯和测试点
- 若需编程,确保SWD接口(PA13/PA14)已引出
- 3个LED电流总和应小于MCU GPIO总驱动能力(STM32单个引脚最大25mA)
建议先用开发板验证代码,再制作PCB。需要进一步帮助可提供具体设计文件截图。
DeepSeek 生成hex文件
请帮我生成一个hex文件;要求:使用stm32F103RCT6为主控芯片,控制3个流水灯。
以下是基于STM32F103RCT6的流水灯控制代码和生成HEX文件的步骤:
1. 硬件连接
假设3个LED连接方式:
- LED1 -> PC13(低电平点亮)
- LED2 -> PC14
- LED3 -> PC15
(请根据实际电路修改引脚和电平逻辑)
2. 软件代码(基于HAL库)
#include "stm32f1xx_hal.h"
#define LED1_PIN GPIO_PIN_13
#define LED2_PIN GPIO_PIN_14
#define LED3_PIN GPIO_PIN_15
#define LED_PORT GPIOC
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
// LED1亮,其他灭
HAL_GPIO_WritePin(LED_PORT, LED1_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT, LED2_PIN|LED3_PIN, GPIO_PIN_SET);
HAL_Delay(500);
// LED2亮,其他灭
HAL_GPIO_WritePin(LED_PORT, LED2_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT, LED1_PIN|LED3_PIN, GPIO_PIN_SET);
HAL_Delay(500);
// LED3亮,其他灭
HAL_GPIO_WritePin(LED_PORT, LED3_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT, LED1_PIN|LED2_PIN, GPIO_PIN_SET);
HAL_Delay(500);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStruct.Pin = LED1_PIN|LED2_PIN|LED3_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
// 初始化所有LED灭
HAL_GPIO_WritePin(LED_PORT, LED1_PIN|LED2_PIN|LED3_PIN, GPIO_PIN_SET);
}
3. 生成HEX文件步骤(以STM32CubeIDE为例)
- 新建STM32项目
- 选择芯片型号:STM32F103RCTx
- 将上述代码复制到main.c
- 配置项目属性:
- 打开"Project Properties" -> C/C++ Build -> Settings
- 在"Tool Settings"标签页中:
- MCU Post build outputs -> 勾选"Convert to Intel Hex file"
- 点击"Build"按钮编译项目
- 生成的HEX文件位于:Debug或Release目录下(后缀.hex)
4. 程序功能说明
- 三个LED依次点亮,每个LED点亮0.5秒
- 流水灯循环模式:LED1 → LED2 → LED3 → LED1…
- 使用HAL库实现,系统时钟配置为72MHz
5. 烧录说明
- 使用ST-Link或J-Link等调试器连接开发板
- 使用STM32CubeProgrammer或其他烧录工具
- 选择生成的HEX文件进行烧录
注意事项:
- 实际LED连接引脚可能需要根据开发板原理图修改
- 如果LED是共阳接法,需要将输出电平逻辑反转
- 延时时间可通过修改HAL_Delay()参数调整
- 需要正确配置系统时钟(本代码已配置为72MHz)
如果需要预编译的HEX文件,请提供具体开发板型号或硬件连接细节,我可协助生成特定版本。
结论
上述两个问题代表目前硬件工程师、软件工程师在一个实际的项目中需要交付的关键文件。
DeepSeek没有给出关键文件,只是提供了一种获取关键文件的思路。如下图所示,DeepSeek还是无法代替人来使用EDA(Altium designer、PADS、Cadence、Eagle)、开发软件Keil/iar/stm32cube/stm32cubeide等,最终交付的关键文件还是需要人来完成。
从gerber文件的生成效果来看,DeepSeek甚至都没有给出来一张参考图纸,而软件方便给出来参考代码。这说明DeepSeek针对图的处理能力还很欠缺,用AI替代硬件工程师比替代软件工程师更难。
AI直接输出结果,还需要替代
Altium designer、PADS、Cadence、Eagle、Keil/iar/stm32cube/stm32cubeide等开发软件,这些专业开发软件是看着复杂,实际上也复杂,想要替代这些软件,估计AI再发展50年都难。