手把手教你用STM32F103C8T6自制USB-Blaster,顺便搞定一个JTAG下载器和最小系统板 用STM32F103C8T6打造多功能开发工具从USB-Blaster到最小系统板实战指南在嵌入式开发和FPGA入门领域下载器和调试工具往往是刚需但商业产品的价格常常让爱好者望而却步。如果你手头恰好有一块STM32F103C8T6核心板或者愿意花不到20元自制一块那么本文将带你解锁它的双重身份——既能作为Altera FPGA的USB-Blaster下载器又能当作标准的STM32开发板使用。这种一板两用的方案不仅节省成本更能让你深入理解硬件底层的工作原理。1. 硬件准备与方案设计1.1 核心元件选择与原理STM32F103C8T6之所以能胜任这个双重角色得益于它内置的全速USB接口和充足的GPIO资源。这款基于ARM Cortex-M3内核的微控制器运行频率可达72MHz具有64KB Flash和20KB SRAM性能足以处理USB通信协议和JTAG信号转换。关键硬件需求清单STM32F103C8T6最小系统板或自制PCB4个220Ω电阻用于JTAG信号电平匹配1个10KΩ电阻用于NRST上拉1个100nF电容用于电源滤波1个TYPE-C或Micro USB接口1个4针JTAG接口2.54mm间距排针可选LED和限流电阻用于状态指示1.2 电路连接方案JTAG接口与STM32的对应连接关系如下表所示JTAG信号STM32引脚备注TDIPA15需配置为上拉输入TDOPB3配置为推挽输出TMSPA13需配置为上拉输入TCKPA14配置为推挽输出注意STM32的PA13(TCK)和PA14(TMS)也是SWD调试接口的引脚这意味着即使作为USB-Blaster使用时你仍然可以通过SWD接口对STM32本身进行编程调试。2. 固件烧录与驱动安装2.1 获取开源固件南邮校科协电子部开源的USB-Blaster实现是目前最成熟的方案之一项目托管在Gitee平台git clone https://gitee.com/SAST-E/usb-blaster-stm32.git固件基于裸机开发主要实现了USB全速设备协议栈USB-Blaster命令解析与响应JTAG信号时序生成状态指示灯控制2.2 编译与烧录步骤安装ARM GCC工具链如arm-none-eabi-gcc进入项目目录执行make编译使用ST-Link或串口方式烧录生成的usb_blaster.bin文件连接USB线设备应被识别为USB-Blaster常见问题排查如果设备管理器显示未知设备尝试手动指定驱动路径Quartus II自带的驱动通常位于C:\altera\版本号\quartus\drivers\usb-blasterLinux系统可能需要配置udev规则才能正常访问设备3. JTAG下载功能验证3.1 Quartus II配置在Quartus II中正确识别USB-Blaster是成功下载的关键打开Quartus II编程工具(Programmer)点击Hardware Setup选择USB-Blaster添加FPGA的.sof或.pof文件点击Start开始编程提示如果遇到编程失败首先检查JTAG连接是否牢固TCK频率是否设置过高建议初始使用1MHz。3.2 实际下载测试以一个简单的LED闪烁程序为例将FPGA的I/O引脚连接到LED通过限流电阻编写或获取一个简单的Verilog/VHDL闪烁程序生成编程文件后通过USB-Blaster下载观察LED是否按预期闪烁性能参数对比功能指标商业USB-Blaster本DIY方案最大TCK频率24MHz6MHz供电能力500mA100mA多设备支持是否价格200-500元20元4. 作为STM32开发板使用4.1 开发环境搭建当不需要用作USB-Blaster时这块板子就是一个完整的STM32开发平台安装STM32CubeIDE或Keil MDK选择STM32F103C8T6作为目标设备通过SWD接口PA13/PA14连接调试器开发常规的STM32应用程序4.2 资源复用技巧由于部分引脚被JTAG功能占用开发时需要注意PA13(TMS/SWDIO), PA14(TCK/SWCLK)建议保留为调试接口PA15(TDI), PB3(TDO)使用前需要禁用JTAG功能可通过__HAL_AFIO_REMAP_SWJ_DISABLE()函数释放这些引脚典型应用场景外设驱动开发SPI/I2C/USART实时数据采集系统嵌入式协议栈实现硬件PWM控制5. 进阶优化与功能扩展5.1 性能提升方案虽然基本功能已经实现但仍有优化空间提高JTAG时钟频率修改固件中的延时参数最高可达12MHz添加状态指示灯利用空闲GPIO连接LED显示通信状态实现自动切换通过检测USB枚举决定工作模式Blaster或普通USB设备5.2 硬件改进建议增加电源开关和不同电压选择跳线添加电平转换芯片如74LVC4245兼容3.3V/5V设备设计可插拔的JTAG/SWD接口模块集成USB ESD保护器件提高可靠性在完成基本功能后我发现最实用的改进是添加一个双色LED绿色表示电源正常红色闪烁表示JTAG通信活动。这个小改动让调试过程直观了许多特别是在排查连接问题时能快速判断是硬件连接还是软件配置的问题。