赞
踩
作者:Bronson,整理:晓宇
微信公众号:芯片之家(ID:chiphome-dy)
前几天,芯片之家18群的一位群友在微信群开源了一个自制的项目,一个带OLED屏,非常Mini的SWD离线烧写器,晓宇姐姐在这里给大家开源介绍出来,供大家参考学习,这里再次感谢詹工。
GitHub开源地址:
https://github.com/MBronsom/OfflineSWD/
本项目使用STM32F103RET6作为主控,基于ST官方CMSIS-DAP项目进行修改,实现STM32F103系列可脱机、可去读保护烧写(因项目暂时只有103系列脱机烧写需求,所以暂时只添加了103的烧写算法)。
外观:
部分代码展示:
- #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(); //绘制LOGO
- Draw_Menu(); //绘制菜单
- while(1);
- }
-
-
- /***********************初始化设备************************/
- void Init_device()
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //优先级调整
- delay_init(); //初始化延时
- Key_Init(); //按键初始化
- W25QXX_Init(); //初始化Flash芯片
- f_mount(0,&fs); //初始化文件系统
- OLED_Init(); //初始化OLED
- OLED_Clear(); //清空OLED屏幕
- LED_Init();
- if(Scan_Key() == 1 ){ //按住SELTCT开机进入CMSIS-DAP模式
- Draw_Logo(); //绘制LOGO
- OLED_DrawBMP(0,0,34,34,USBLogo); //绘制图标
- OLED_ShowString(38,1,"DAP Connect",1,0); //绘制提示词
- Init_DAPUSB(); //初始化DAP
- Do_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(); //进入主菜单
- }
- }
PCB:
项目功能:
1、使用8M FLASH,可使用虚拟U盘向FLASH放置HEX文件或BIN文件进行烧写(BIN较快)
2、可去除目标板的读保护,直接烧写(烧写后可能需要手动重启)
3、支持手动切换模式,使离线烧写器支持DAP仿真
4、安装驱动后可支持虚拟USB转TTL
5、可离线使用串口调试功能(仅支持英文及常用数字符号)
使用教程:
DAP仿真
虚拟串口以及U盘模拟
离线文件烧写:
离线串口调试功能:
项目意见:
下载:
「创作不易」
希望大家随手点「赞」+「在看」
这是对我最大的支持和鼓励
你们的支持就是我继续创作的动力
推荐阅读
▼
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。