STM32F103平替实战:用合宙AIR32F103CBT6和DAP-Link玩转双板互烧与虚拟串口调试
STM32F103平替实战合宙AIR32F103CBT6双板互烧与虚拟串口调试全攻略当STM32F103系列芯片价格居高不下时合宙推出的AIR32F103CBT6凭借100%硬件兼容性和1/3的市场价格迅速成为开发者关注的焦点。这块开发板最令人惊喜的特性在于——它出厂时已经内置了DAP-Link调试器功能这意味着你不需要额外购买调试工具就能实现一板两用既作为调试器又作为被调试的目标板。本文将手把手带你玩转这个特性从环境搭建到双板互烧再到虚拟串口调试彻底释放这块开发板的潜力。1. 硬件准备与开发环境搭建1.1 认识你的AIR32F103开发板合宙AIR32F103CBT6开发板布局紧凑但功能齐全我们需要特别关注以下几个关键部分DAP-Link接口板载的USB Type-C接口不仅用于供电还内置了DAP-Link调试功能SWD调试接口位于板子右侧的4Pin排针GND, SWCLK, SWDIO, 3.3V虚拟串口引脚PA9(TX)和PA10(RX)默认用于USB CDC通信PA2(TX)和PA3(RX)可用于额外UART注意当使用板载DAP-Link功能时USB接口会同时提供调试和虚拟串口功能无需额外接线。1.2 开发工具链准备虽然AIR32F103兼容STM32的标准外设库但为了获得最佳开发体验建议配置以下环境# 安装ARM工具链以Ubuntu为例 sudo apt install gcc-arm-none-eabi # 安装OpenOCD建议版本≥0.11.0 sudo apt install openocd对于Windows平台开发者Keil MDK是最常用的选择。安装时需特别注意下载并安装Keil MDK建议v5.36安装ARM CMSIS Pack包含AIR32的Device Family Pack配置DAP-Link调试器驱动Windows会自动识别为CMSIS-DAP设备2. 配置DAP-Link实现双板互烧2.1 硬件连接方案实现双板互烧只需要简单的物理连接主控板调试器目标板被调试连接说明3.3V3.3V电源供应GNDGND共地SWDIOSWDIO数据线SWCLKSWCLK时钟线提示建议使用杜邦线连接时保持线长15cm过长可能导致信号完整性问题。2.2 Keil MDK工程配置关键点在Keil中正确配置是成功的关键以下是必须检查的选项设备选择AIR32F103CBT6不是STM32F103调试器设置选择CMSIS-DAP Debugger勾选SW Device模式时钟频率设置为1MHz初始调试建议保守值Flash下载配置添加AIR32F1xx Flash算法勾选Reset and Run当遇到SWD Communication Failure时可以尝试以下排查步骤检查物理连接是否牢固降低SWD时钟频率尝试100kHz复位目标板同时点击Keil的Load按钮检查目标板供电是否稳定测量3.3V电压// 验证DAP-Link连接的简单测试代码 #include air32f10x.h int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOC, GPIO_InitStructure); while(1) { GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); Delay(500000); GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); Delay(500000); } }3. 虚拟串口调试实战技巧3.1 配置双串口通信AIR32F103的优势在于可以同时使用两个串口USB CDC虚拟串口无需额外硬件即插即用硬件UART1PA2/PA3可连接其他设备或作为调试输出初始化代码示例void USART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // 使能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); // 配置TX(PA2)和RX(PA3) GPIO_InitStructure.GPIO_Pin GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); // 串口参数配置 USART_InitStructure.USART_BaudRate 115200; USART_InitStructure.USART_WordLength USART_WordLength_8b; USART_InitStructure.USART_StopBits USART_StopBits_1; USART_InitStructure.USART_Parity USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, USART_InitStructure); USART_Cmd(USART1, ENABLE); }3.2 高级调试技巧printf重定向结合DAP-Link的虚拟串口我们可以实现方便的调试输出#include stdio.h // 重定向printf到USART1 int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t)ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) RESET); return ch; } // 在代码中使用 printf(系统启动完成当前温度%.1f℃\r\n, read_temp());调试信息输出对比输出方式优点缺点适用场景虚拟串口(CDC)无需额外硬件占用USB接口快速原型开发硬件UART1可与其他设备通信需要电平转换芯片多设备通信系统SWO输出不占用串口资源需要特定调试器支持实时性要求高的系统4. 性能优化与常见问题解决4.1 时钟配置优化AIR32F103虽然兼容STM32F103但其内部时钟树略有不同。推荐的高性能配置void SystemClock_Config(void) { RCC_DeInit(); // 启用外部晶振默认使用内部8MHz RCC_HSEConfig(RCC_HSE_ON); while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) RESET); // PLL配置HSE * 6 48MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) RESET); // 系统时钟切换 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() ! 0x08); // APB1 24MHz, APB2 48MHz RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); }4.2 常见问题速查表以下是开发者最常遇到的5个问题及其解决方案无法识别DAP-Link检查USB线是否支持数据传输尝试不同USB端口更新固件合宙官网提供更新工具程序下载后不运行检查启动模式跳线BOOT0应接地确认Reset and Run选项已启用检查时钟配置是否正确虚拟串口无法识别安装合宙提供的USB驱动在设备管理器中手动指定COM端口检查代码中USB初始化是否正确外设工作不正常确认时钟已使能对应外设检查GPIO模式配置是否正确验证供电电压是否稳定3.3V±5%性能不如预期优化时钟配置如使用外部晶振检查编译器优化等级建议-O2确认Flash等待周期设置正确在实际项目中我发现最实用的技巧是保持DAP-Link固件为最新版本。合宙会定期发布优化后的固件解决了许多早期版本中的兼容性问题。另一个经验是当遇到难以解释的问题时尝试用最简单的点灯程序验证基本功能逐步添加复杂度这种分治法能快速定位问题根源。