9.9包邮的合宙Air32开发板,如何刷DFU?

描述

 

 

不得不说,合宙推出的9.9元包邮Air32系列MCU开发板太香了,资源全面升级,使用更畅快!

Air32的日常开发中,烧录固件和升级必须要用串口或者调试器。那么,有没有办法可以用Air32自己给自己烧录和升级呢?——答案是肯定可以,我们可以自己编写BootLoad,通过DFU(Device Firmware Upgrade)模式实现用Air32自带的USB进行升级。

接下来,我们一起看看怎么做吧~

 

1

基础准备工作


 

 

1.1 合宙Air32小蓝板:
 

合宙推出的BluePill开发板,封装兼容经典STM32F103核心板,资源和工艺全面升级;兼容主流F103开发方式,提供SDK参考。
 

 

1.2 合宙Air32小黑板:

合宙经典40PIN黑金工业风沉金板,邮票孔设计;支持UART/SPI/I2C/ADC/ DAC/I2S/CAN等接口。

出厂内置DAPLink固件,可直接作为烧录器。

 

1.3 USB Type-C线

开发常用的Type-C线即可,缺线的同学可了解合宙10元10根论斤卖的数据线。

1.4 杜邦线

开发者必备的杜邦线,这里不细说。

1.5 Keil开发环境

合宙Air32系列支持Keil开发,参见Air32F103使用手册

1.6 DFU升级工具

 

 

 

 

 

2

给BluePill开发板烧录DFU固件


 

 

2.1 开发板接线

开发板

 

2.2 烧录DFU固件

将USB线插入Air32小黑板,会在【我的电脑】虚拟出一个DAPLINK盘,将DFU固件(dapboot.bin)拖入即可。

开发板

DFU固件链接:

https://cdn.openluat-luatcommunity.openluat.com/attachment/20230414163518568_dfutools.zip

下载完毕后,点开DAPLINK盘,如果没有FAIL.TXT生成,则表示烧录成功。

开发板

烧录完毕后,把BluePill开发板接到电脑上,如果有DAPBoot DFU Bootloader显示,表示DFU固件烧录成功,此时BluePill开发板就可以通过DFU给自己升级了:

开发板

 

 

 

3

BluePill开发板通过DFU给自己升级


 

 

3.1 选用demo

用Keil打开Air32仓库的GPIO_IOOut demo:
 

 

开发板

3.2 设置参数

点开target,将IROM1的Start设置为0x8002000,Size设置为0x1E000,点击OK:

开发板

3.3 生成升级文件

点开USER,选中After Buile/Rebuild一栏的Run #1 ,内容填入fromelf.exe --bin -o "$L@L.bin" "#L", 点击OK。

此步骤是用于生成升级文件:

 

开发板

3.4 修改代码

BluePill开发板上蓝灯由PC13控制,将原先的代码改为蓝灯闪烁:

 

 

int main(void)

{

    RCC_ClocksTypeDef clocks;

    Delay_Init();               //延时初始化

    UART_Configuration(115200); //默认为串口1,波特率115200

    RCC_GetClocksFreq(&clocks); //获取系统时钟频率

 

    PRINTF_LOG("\n");

    PRINTF_LOG("SYSCLK: %3.1fMhz, HCLK: %3.1fMhz, PCLK1: %3.1fMhz, PCLK2: %3.1fMhz, ADCCLK: %3.1fMhz\n",

               (float)clocks.SYSCLK_Frequency / 1000000, (float)clocks.HCLK_Frequency / 1000000,

               (float)clocks.PCLK1_Frequency / 1000000, (float)clocks.PCLK2_Frequency / 1000000, (float)clocks.ADCCLK_Frequency / 1000000);

    PRINTF_LOG("AIR32F103 GPIO IO Out Tset.\n");

    GPIO_Configuration();

 

    while (1)

    {

        GPIO_SetBits(GPIOC, GPIO_Pin_13);

        Delay_Ms(200);

        GPIO_ResetBits(GPIOC, GPIO_Pin_13);

        Delay_Ms(200);

    }

}

 

void GPIO_Configuration(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

 

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOC时钟

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //输出模式

    GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC.13

}

 

 

 

3.5 编译固件

点击编译即可,然后在OBJ目录下找到GPIO.bin,这就是给自己升级的固件:

开发板

 

3.6 执行命令

将编译出来的GPIO.bin放在dfutools目录中,通过命令行调用dfu-util.exe即可将闪灯固件下载进开发板:

开发板

 

dfu-util.exe -d 1209:DB42 -D GPIO.bin

1209 DB42为设备管理器中DAPBoot DFU Bootloader的VID 与PID:

开发板

开发板

 

接下来就可以看到设备蓝灯闪烁啦:
 

开发板

 

 

3.7 烧录了DFU固件的开发板,如何进入DFU模式:
 

如果0x8002000分区后没有代码,则自动进入DFU模式;

将GPIOB - 2, 也就是boot1接到GND上再上电,进入DFU模式。

 

注意事项:

DFU固件Flash分区为0x8000000 - 0x8002000

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分