作者:Bronson,整理:晓宇
https://github.com/MBronsom/OfflineSWD/

部分代码展示:
#include "main.h"/***********************文件系统使用定义************************/FIL fnew; /* file objects */FILINFO FileInfo;DIR DirInfo;FATFS fs; /* Work area (file system object) for logical drives */FRESULT Res;UINT br, bw; /* File R/W count *//***********************变量定义************************/char rData[1024] = "";u8 readflag = 1;u32 addr = 0;u32 i = 0;u32 select = 0;u8 breakDebug = 0;u8 debugMode = 0;uint16_t bytesread;u8 Logo[] = "BRONSON";/***********************主函数************************/int main(void){Init_device(); //初始化设备Draw_Logo(); //绘制LOGODraw_Menu(); //绘制菜单while(1);}/***********************初始化设备************************/void Init_device(){NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //优先级调整delay_init(); //初始化延时Key_Init(); //按键初始化W25QXX_Init(); //初始化Flash芯片f_mount(0,&fs); //初始化文件系统OLED_Init(); //初始化OLEDOLED_Clear(); //清空OLED屏幕LED_Init();if(Scan_Key() == 1 ){ //按住SELTCT开机进入CMSIS-DAP模式Draw_Logo(); //绘制LOGOOLED_DrawBMP(0,0,34,34,USBLogo); //绘制图标OLED_ShowString(38,1,"DAP Connect",1,0); //绘制提示词Init_DAPUSB(); //初始化DAPDo_DAPUSB(); //DAP循环}else{Set_System(); //设置USB系统Set_USBClock(); //设置USB时钟USB_Interrupts_Config(); //设置USB中断USB_Init(); //初始化USB}}/***********************绘制LOGO************************/void Draw_Logo(){u8 i;for(i=0;i<7;i++){OLED_ShowChar(34+i*8,1,Logo[i],1);delay_ms(15);}delay_ms(1000);OLED_Clear();}/***********************绘制菜单************************/void Draw_Menu(){if(bDeviceState != UNCONNECTED){OLED_DrawBMP(0,0,34,34,USBLogo);OLED_ShowString(38,1,"USB Connect",1,0);}else{OLED_DrawBMP(0,0,33,33,FlashLogo);//自动烧写模式(将命名为AUTO.bin的文件放入根目录)if(f_open(&fnew, (const TCHAR*)"AUTO.bin",FA_READ ) == FR_OK){OLED_ShowString(45,-1,"AUTO FLASH",1,0);while(!FLASH_SWD("AUTO.bin")){u8 WaitTips[] = "...";OLED_ShowString(45,1," ",1,0);OLED_ShowString(45,2,"WAIT",1,1);for(i=0;i<3;i++){OLED_ShowChar(69+i*6,2,WaitTips[i],1);delay_ms(200);}OLED_ShowString(45,2," ",1,1);}OLED_ShowString(98,2,"BACK",1,1);select = 0;while(1){if(Scan_Key() == 1){select ++;if(select == 1) {OLED_ShowString(98,2," ",1,1);OLED_ShowString(98,2,"BACK",0,1);}else{OLED_ShowString(98,2," ",1,1);OLED_ShowString(98,2,"BACK",1,1);}if(select == 2) select = 0;}if(Scan_Key() == 2){if(select == 1) break;}}OLED_Clear();OLED_DrawBMP(0,0,33,33,FlashLogo);}Draw_Main(); //进入主菜单}}

1、使用8M FLASH,可使用虚拟U盘向FLASH放置HEX文件或BIN文件进行烧写(BIN较快)
2、可去除目标板的读保护,直接烧写(烧写后可能需要手动重启)
3、支持手动切换模式,使离线烧写器支持DAP仿真
4、安装驱动后可支持虚拟USB转TTL
5、可离线使用串口调试功能(仅支持英文及常用数字符号)
使用教程:
1、长按SELECT键开机可进入DAP仿真模式,屏幕上显示DAP-CONNECT
2、直接插入电脑USB端口可向离线烧写器放入相关烧写文件,并可使用虚拟串口功能
3、连接目标板开机,选择文件后选择FLASH后即可进行烧写
4、选择“>>”,进入DEBUG MODE后选择ENTER即可进行离线串口调试
DAP仿真
虚拟串口以及U盘模拟
离线文件烧写:


离线串口调试功能:
项目意见:
如果项目有问题或者有新功能需求,欢迎向作者提交意见!
下载:
大家可以Fork并Star作者的GitHub项目,或者公众号后台 回复 迷你SWD离线烧写器获取项目文件百度网盘链接!
「创作不易」
希望大家随手点「赞」+「在看」
这是对我最大的支持和鼓励
你们的支持就是我继续创作的动力
重磅开源:带屏幕LCD脱机下载器离线下载器!
【开源方案】2.4G遥控器,接收器全套详细设计资料
【全开源功放】美国NS公司的经典芯片,LM3886!
【全开源功放】意法微电子的经典芯片,TDA7294!




