stm32 dfu 驱动下载更新程序有没有大小限制

查看: 6767|回复: 14
IAP升级程序中Bootloader和APP程序中断复用的解决办法
主题帖子精华
在线时间107 小时
菜鸟级别(像我这样的),高手可以给予我们菜鸟一族指点指点或者点击叉叉离开
相信大家在实现了的升级程序,因为程序中用到了的相关中断,在程序中同样也用到了相同的中断,这时是不是就乱套了呢?
的确是乱套了,不过还是有解决办法的。下面为大家演示一下:(可以用我这个DFU功能或者原子战舰光盘的例程:实验48 串口IAP实验)
使用的资源:
1、官方库函数
2、两个灯,一个红色,一个蓝色:
红色指示的是进入模式的中断唤醒点亮,
蓝色指示的是进入读卡器模式的唤醒点亮
3、前面的程序,读卡器程序
第一、在正常的移植的时候做法在程序中的函数开头加入修改中断向量表地址的语句
& & &&SCB-&VTOR&=&FLASH_BASE&|&0X30000;(偏移值视情况而定,不一定按这个参数)
第二、假设程序中没有用到和中的中断服务函数的时候,一切运行正常,当用上的时候 & & & & & & 呢???
第三、通过前面的方法,在读卡器实验程序中的函数开头增加
语句,编译后下载到板子上复位运行,这时可以进入板子 & & & 可以进入读卡器模式。
& & &&但是,当你插上线连接电脑的时候,问题来了,电脑弹出提示框提示无法识别的设备。是不是 & & & 意味着就不能这样用了呢??
fe9bc8dc_134.jpg (0 Bytes, 下载次数: 0)
22:54 上传
第四、这时我们就看看程序执行的流程怎么走的(参考原子的《开发指南库函数版 & & & & & & & & 本&》中的程序执行图)
05ea34c1bb794ce24ee3a_524.jpg (0 Bytes, 下载次数: 0)
22:54 上传
& & & 具体解说这个流程图请参考原子《开发指南库函数版本&》第页开头的解说。
& & & 图中知道这么一个消息,在执行程序中发生了中断请求,程序仍然跳转到了这个中断向 & & & 量表地址去提取相关的中断服务函数执行,问题就来了,在这个地址存放的是的中断服 & & & 务函数,读取了,枚举的时候就来了,因为的枚举参数和读卡器枚举的参数不一样, & & & 所以就发生了电脑无法识别的设备的错误提示框。是不是蒙了呢???【具体可以对照代 & & & & & & 码中的字符串描述内容等】
第五、不用怕,看到图中的第⑤步跳转,下面编辑代码验证一下。
A、USB读卡器中也用到了的相关中断,有两个还是和中的中断服务函数一样的调用。
& &具体可以参考我这个帖子或者原子战舰光盘里面的例 & &程:实验50 USB读卡器实验
& &都用到的函数是:USB_LP_CAN1_RX0_IRQHandler()和USBWakeUp_IRQHandler()
B、在程序中,唤醒中断服务函数增加LED0红色指示(试过想在上显示字符来的,加 & 了显示字符语句电脑识别设备失败,具体原因可能显示字符时间太长了)
c5ff5eb5f8_473.jpg (0 Bytes, 下载次数: 0)
22:54 上传
C、编译成功后下载到板子上,按住程序中设定的按键后复位开发板,显示模式界面时插 & & & & &上连接电脑。
ec928b3dafbfccdbb0fedc_736.jpg (0 Bytes, 下载次数: 0)
22:54 上传
& & & 图中红色框框中显示的是进入了模式
& & &&图中蓝色框框的红色点亮,说明进入的是中的唤醒中断服务函数。
第六、在读卡器程序中,唤醒中断服务函数增加LED1蓝色指示
60b3cd22ed95fe4cb7b44f_200.jpg (0 Bytes, 下载次数: 0)
22:54 上传
第七、这时我不在函数开头处加写中断向量表地址重设代码,我直接修改“”文件 & & & 中“”函数末尾的代码,修改如下
4c00faad46a033ba513dab_231.jpg (0 Bytes, 下载次数: 0)
22:54 上传
第八、编译成功后通过下载到板子上,复位进入如下界面
d8b4d7dfe6_627.jpg (0 Bytes, 下载次数: 0)
22:54 上传
& & & 图中红色框框显示了读卡器实验
& & &&图中蓝色框框是读取到了卡(我用的)的容量信息
第九、这时插上线连接电脑,板子上显示如下界面
da48affa73bc4dc74a38_936.jpg (0 Bytes, 下载次数: 0)
22:54 上传
& & & 图中红色框框显示读卡器模式,已经连接上电脑
& & & 图中蓝色框框显示的蓝色点亮,说明已经进入读卡器的唤醒中断服务函数了。(前面我 & & & 的Bootloader程序中的USB唤醒中断也点了灯的,红色不亮)
第十、电脑上已经正常识别到了开发板上的读卡器了,电脑进去,双击打开可移动磁盘,里面内容
73bcebfa94_677.jpg (0 Bytes, 下载次数: 0)
22:54 上传
第十一、看到的内容了,说明已经成功了,可以进行读、写、删除等操作尝试。
第十二、不相信的话可以用读卡器将你开发板上的卡在电脑上看下里面的内容
9b93a9c1c6336aec8a0406afb3ec54f6_570.jpg (0 Bytes, 下载次数: 0)
22:54 上传
最后,至于为什么这样改就可以了呢?打开我们程序中的启动文件代码看下,有这么一段
464aa1bc517f83d98b1bb184b35cd020_258.jpg (0 Bytes, 下载次数: 0)
22:54 上传
然后再看下面的代码
a25dedf6ba0fefe3c6ae2_940.jpg (0 Bytes, 下载次数: 0)
22:54 上传
完全汇编,是不是看不懂呢???结合前面的图来看下就知道什么意思了,呵呵,自己琢磨一下吧。
至于寄存器操作的没试过,大家自己依葫芦画瓢吧。。。
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
在线时间11 小时
顶,谢谢分享
站在巨人的肩膀上不断的前进。。。
主题帖子精华
在线时间107 小时
回复【2楼】xiaoyan:
---------------------------------
谢谢版主!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
要不要这么厉害!楼主膜拜呀!
我也要开始搞DFU啦!
主题帖子精华
中级会员, 积分 267, 距离下一级还需 233 积分
在线时间3 小时
LZ,我在搞nec的v850也遇到此类型的问题。
串口中断进入了bootloader的中断服务函数,导致app功能失常。
看了你最后的原因说明,没搞明白,可否指教一下,谢谢了。
主题帖子精华
在线时间107 小时
回复【5楼】ilikerome:
---------------------------------
仔细看下那个加入APP之后的运行流程图
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
中级会员, 积分 267, 距离下一级还需 233 积分
在线时间3 小时
回复【6楼】八度空间:
---------------------------------
真心没看懂,大侠。
我在bootloader中把串口发送干掉,app里面的中断就可以正常执行了。不知道咋回事。
主题帖子精华
在线时间107 小时
回复【7楼】ilikerome:
---------------------------------
记得我的例程里两边有有串口初始化的,你的BOOTLOADER中串口用到中断吧,如果你的APP中断偏移了,两者都有中断是不影响的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 146, 距离下一级还需 54 积分
在线时间3 小时
大神,一路追随着你到这里,如果直接使用原子哥的寄存器源码通过DFU下载的话,可以修改sys.c中的参数
[C] 纯文本查看 复制代码void MYRCC_DeInit(void)
RCC-&APB1RSTR = 0x;//?????á??
RCC-&APB2RSTR = 0x;
RCC-&AHBENR = 0x;
//??????????????SRAM?±??????.??????±?.
RCC-&APB2ENR = 0x; //???è?±????±?.
RCC-&APB1ENR = 0x;
RCC-&CR |= 0x;
//?????????????±??HSION
RCC-&CFGR &= 0xF8FF0000;
//????SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]
RCC-&CR &= 0xFEF6FFFF;
//????HSEON,CSSON,PLLON
RCC-&CR &= 0xFFFBFFFF;
//????HSEBYP
RCC-&CFGR &= 0xFF80FFFF;
//????PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
RCC-&CIR = 0x;
//??±??ù??????
//?????ò??±í
VECT_TAB_RAM
MY_NVIC_SetVectorTable(0xx0);
MY_NVIC_SetVectorTable(0xx0);
和你修改的异曲同工,只要把最后一行的0x0改成偏移地址就行了。这里不得不佩服原子哥的强大,已经帮我们想到了这个,之前头疼的问题一下就解决了
主题帖子精华
在线时间107 小时
回复【9楼】兜兜里缺钱:
---------------------------------
原子哥大牛不得不佩服,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 157, 距离下一级还需 43 积分
在线时间8 小时
八度大神,我还是不懂。在main开头设置中断表偏移量和在systemInit里面设置有什么区别?Reset_Handler会先后调用systemInit和mian,只是时间先后的问题,为什么会有影响呢?
持续而安静地投入
主题帖子精华
在线时间107 小时
回复【11楼】磨剑:
---------------------------------
这个没怎么研究,都没时间搞这些了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
新手上路, 积分 22, 距离下一级还需 28 积分
在线时间0 小时
把中断偏移放在main函数和SystemInit函数中理论上是没有区别的,我觉得楼主出现这种问题可能是在main函数中设置偏移量后又调用了一遍SystemInit(),结果把偏移量设回去了。
主题帖子精华
在线时间107 小时
回复【13楼】转身落在清明上:
---------------------------------
systeminit函数是启动代码中调用的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间2 小时
感谢分享!!!!!!!!!!!!!!
Powered by21ic官方微信
后使用快捷导航没有帐号?
查看: 3394|回复: 3
关于STM32的USB-IAP(DFU)无法跳转至应用程序
&&已结帖(0)
主题帖子积分
实习生, 积分 48, 距离下一级还需 2 积分
实习生, 积分 48, 距离下一级还需 2 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 48, 距离下一级还需 2 积分
实习生, 积分 48, 距离下一级还需 2 积分
本人根据stm32的USB固件,利用DFU已经将应用程序下载到自己的板子中去了,但程序运行后,虽然已经执行跳转到应用程序地址,但实际上并没有执行相应的程序,好像跳到了USB的中断里去了,哪位高手能够指点一下!万分感激!
主题帖子积分
初级工程师, 积分 2521, 距离下一级还需 479 积分
初级工程师, 积分 2521, 距离下一级还需 479 积分
主题帖子积分
专家等级:结帖率:25%
主题帖子积分
初级工程师, 积分 2521, 距离下一级还需 479 积分
初级工程师, 积分 2521, 距离下一级还需 479 积分
到底有没有跳到应用程序?到底有没有跳到USB中断?
中断向量表地址有没有重新设过?
跳转之前有没有屏蔽中断?跳转之后有没有打开中断?
主题帖子积分
实习生, 积分 48, 距离下一级还需 2 积分
实习生, 积分 48, 距离下一级还需 2 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 48, 距离下一级还需 2 积分
实习生, 积分 48, 距离下一级还需 2 积分
1、我也不确定到底有没有跳到应用程序,以下是代码,反应我单步调试时,程序执行到“Jump_To_Application();“语句后,就跑到USB中断里面去了。
2、程序中“USER_FLASH_START”是我的应用程序首地址。
另外中断向量表地址没有重新设,我看网上别人用的时候好像也没有重新设。
3、跳转之前在哪里屏蔽中断?跳转之后又在哪里设呢?
if (DFU_Button_Read() != 0x00)
&&{ /* Test if user code is programmed starting from address 0x8003000 */
if (((*(vu32*)USER_FLASH_START) & 0x2FFF0000 ) == 0x)
& & { /* Jump to user application */
& && &JumpAddress = *(vu32*) (ApplicationAddress + 4);
& && &Jump_To_Application = (pFunction) JumpA
& && &/* Initialize user application's Stack Pointer */
& && &__MSR_MSP(*(vu32*) ApplicationAddress);
& && &Jump_To_Application();
&&} /* Otherwise enters DFU mode to allow user to program his application */
主题帖子积分
初级工程师, 积分 2521, 距离下一级还需 479 积分
初级工程师, 积分 2521, 距离下一级还需 479 积分
主题帖子积分
专家等级:结帖率:25%
主题帖子积分
初级工程师, 积分 2521, 距离下一级还需 479 积分
初级工程师, 积分 2521, 距离下一级还需 479 积分
LZ我觉得你需要补充些基本知识
比如中断向量表的作用
你在运行DFU程序的时候,有没有中断?这些中断处理程序在什么地址的?产生中断了,内核怎么知道要跳转到哪里执行中断处理程序?
你又去运行应用程序了了,你的应用程序有没有中断的?如果产生了中断,内核又应该跳到哪里去执行中断程序?
你没有屏蔽中断,那么在跳转过程中产生了中断,内核应该去哪里找相应的中断处理程序?
请考虑一下
时间类勋章
技术高手奖章
人才类勋章
精华达人奖章
等级类勋章
湍急之河流
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章查看: 1908|回复: 44
STM32通过USB实现Bootloader/IAP功能
帖子主题金币
本帖最后由 飞鸿踏雪 于
11:40 编辑
最近在做STM32的USB Bootlader/IAP功能,也就是通过USB实现固件升级,本文介绍下实现的基本思路,希望对实现IAP的同学一个参考,改方法已经在产品中得到实际应用并验证是比较合理,稳定可靠的。
程序空间划分:
在单片机的程序Flash中分两个区,分别存储Bootloader代码和App代码,Bootloader放到代码起始地址,也就是0x,App放到0x8020000地址,中间预留了很多的地址空间,主要是为了用来存储一些需要掉电保存的数据,比如我在0x地址就存放了App程序运行后写入该地址的标志数据。
启动流程:
上电后自然是运行Bootloader程序,Bootloader运行后,做的第一件事情如下所示
[C] 纯文本查看 复制代码
if((*((uint32_t *)EXE_FLAG_ADDR))==0x){
JumpToApplication(APP_START_ADDR);
也就是判断App运行标志是否有效,这个标志是存放到EXE_FLAG_ADDR地址的,若有效就直接跳转到App程序运行,这个时间很短,所以用户看不到有Bootloader执行的效果,感觉就是直接运行的App程序,进入App程序后,App程序第一件事情如下
[C] 纯文本查看 复制代码
if((*((uint32_t *)EXE_FLAG_ADDR))==0xFFFFFFFF){
uint32_t ExeFlag = 0x;
__set_PRIMASK(1);//禁止全局中断
FLASH_Unlock();
ProgramDatatoFlash(EXE_FLAG_ADDR,(uint8_t*)(&ExeFlag),4);
FLASH_Lock();
也就是判断App标志是否有效,若有效则直接执行后面的程序,若无效则需要在EXE_FLAG_ADDR地址写入执行标志。
Bootloader程序判断App标志若无效,那么Bootloader就不会直接跳转到App,因为这个时候是需要进行升级App的操作,所以程序就进入Bootloader的正常工作流程,也就是等待升级App的各种命令,比如擦出固件,烧写固件,校验固件等。当固件成功写入并校验通过之后,PC端就可以发送一个程序跳转命令跳转到App执行。
PC端操作流程:
PC端和单片机是通过USB进行数据交换的,当然用其他方式也可以,基本流程都是差不多的。
PC程序首先当然是扫描设备,打开设备,然后调用获取固件信息的函数,调用该函数后可以得知当前固件的名称,版本号,固件类型(Bootloader还是App),若发现当前固件不是Bootloader,那么就得通过USB给固件发送一个程序跳转命令,也就是跳转到Bootloader代码执行,当然App在跳转到Bootloader的时候必须把EXE_FLAG_ADDR地址的标志数据擦出掉,这样Bootloader才能进入正常的升级流程。
控制固件程序进入Bootloader之后,PC端程序将打开App固件程序文件,然后根据文件大小,发送擦出App代码存储区域Flash的数据,然后再分包将固件发送给单片机,单片机端Bootlader程序接收到数据后将数据写入App的Flash区域,数据写完之后再进行校验,我是通过计算CRC16的方式进行校验的,校验通过之后就可以发送跳转命令控制程序跳转到App运行了,到此升级流程完毕。
PC端程序代码:
[C] 纯文本查看 复制代码// USB2XXXTest.cpp : Defines the entry point for the console application.
#include &stdafx.h&
#include &stdlib.h&
#include &../../USB2XXX/source/bootloader.h&
int _tmain(int argc, _TCHAR* argv[])
int PackSize = 1024*10;
int TimeOut = 0;
int ApplicationAddress = 0x;
int BootAddress = 0x;
FW_INFO FwI
//扫描查找设备
ret = BT_ScanDevice(true);
if(ret &= 0){
printf(&No device connected!\n&);
//打开设备
state = BT_OpenDevice(0);
if(!state){
printf(&Open device error!\n&);
//获取固件信息
BT_GetFirmwareInfo(0,&FwInfo);
printf(&Firmware Name:%s\n&,FwInfo.FirmwareName);
printf(&Firmware Functions:%08X\n&,FwInfo.Functions);
//判断当前固件是否为Bootloader固件
while(!(FwInfo.Functions&FUNCTION_BOOTLOADER)){
//控制程序跳转到Bootloader
state = BT_ExcuteFirmware(0,BootAddress);
printf(&BT_ExcuteFirmware state = %d\n&,state);
BT_CloseDevice(0);
Sleep(100);
ret = BT_ScanDevice(true);//扫描查找设备
if((ret &= 0)&&(TimeOut & 50)){
printf(&No device connected!\n&);
}else if(ret & 0){
TimeOut++;
}while(ret&=0);
TimeOut = 0;
Sleep(100);
state = BT_OpenDevice(0);//打开设备
if((!state)&&(TimeOut & 50)){
printf(&Open device error!\n&);
}else if(state){
TimeOut++;
}while(!state);
//获取固件信息
BT_GetFirmwareInfo(0,&FwInfo);
printf(&Firmware Name:%s\n&,FwInfo.FirmwareName);
printf(&Firmware Functions:%08X\n&,FwInfo.Functions);
//打开固件文件
FILE *pFile=fopen(&Project.bin&,&rb&); //获取文件的指针
fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度
int FileLen=ftell(pFile); //获取文件长度
static char *pBuf = (char *)malloc(FileLen);
//定义文件指针
if(pBuf == NULL){
printf(&malloc error\n&);
rewind(pFile); //把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
fread(pBuf,1,FileLen,pFile); //读文件
fclose(pFile); // 关闭文件
//擦除之前的固件
state = BT_EraseSectors(0,ApplicationAddress,ApplicationAddress+FileLen);
if(!state){
printf(&BT_EraseSectors error!\n&);
printf(&BT_EraseSectors success\n&);
//循环写入固件数据到芯片Flash
int PackIndex = 0;
for(PackIndex=0;PackIndex&FileLen/PackSPackIndex++){
state = BT_WriteData(0,ApplicationAddress+PackIndex*PackSize,(unsigned char *)(&pBuf[PackIndex*PackSize]),PackSize,0);
if(!state){
printf(&BT_WriteData Error\n&);
if(FileLen%PackSize){
state = BT_WriteData(0,ApplicationAddress+PackIndex*PackSize,(unsigned char *)(&pBuf[PackIndex*PackSize]),FileLen%PackSize,0);
if(!state){
printf(&BT_WriteData Error\n&);
printf(&BT_WriteData Success\n&);
//循环校验数据是否写成功
for(PackIndex=0;PackIndex&FileLen/PackSPackIndex++){
state = BT_VerifyData(0,ApplicationAddress+PackIndex*PackSize,(unsigned char *)(&pBuf[PackIndex*PackSize]),PackSize);
if(!state){
printf(&BT_VerifyData Error\n&);
if(FileLen%PackSize){
state = BT_VerifyData(0,ApplicationAddress+PackIndex*PackSize,(unsigned char *)(&pBuf[PackIndex*PackSize]),FileLen%PackSize);
if(!state){
printf(&BT_VerifyData Error\n&);
printf(&BT_VerifyData Success\n&);
//执行固件
state = BT_ExcuteFirmware(0,ApplicationAddress);
printf(&BT_ExcuteFirmware state = %d\n&,state);
//关闭设备
BT_CloseDevice(0);
PC端程序运行效果如下所示:
1.png (21.21 KB, 下载次数: 4)
10:24 上传
我是用STM32F4+USB3300高速USB实现IAP功能的,12K的App代码几乎瞬间下载完毕,整个程序测试了很多次,没一次出问题...
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 9, 距离下一级还需 41 积分
新手上路, 积分 9, 距离下一级还需 41 积分
感觉好厉害
帖子主题金币
注册会员, 积分 167, 距离下一级还需 33 积分
注册会员, 积分 167, 距离下一级还需 33 积分
不知道USB和网口法师IAP程序,哪个更快点;
帖子主题金币
不知道USB和网口法师IAP程序,哪个更快点;
高速USB应该会快一点,如果是全速USB,网口可能会快点
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
注册会员, 积分 73, 距离下一级还需 127 积分
注册会员, 积分 73, 距离下一级还需 127 积分
我只能说,楼主厉害
帖子主题金币
注册会员, 积分 57, 距离下一级还需 143 积分
注册会员, 积分 57, 距离下一级还需 143 积分
如果是串口升级,怎么调到BOOT中呢?
帖子主题金币
注册会员, 积分 167, 距离下一级还需 33 积分
注册会员, 积分 167, 距离下一级还需 33 积分
高速USB应该会快一点,如果是全速USB,网口可能会快点
版主研究过官网STM32F407/STM32F207的LwIP+SSL范例吗?
帖子主题金币
注册会员, 积分 167, 距离下一级还需 33 积分
注册会员, 积分 167, 距离下一级还需 33 积分
如果是串口升级,怎么调到BOOT中呢?
这个还不简单,串口接收到指令在EEPROM内设个标志位置1,然后看门狗方式复位,读取EEPROM标志位是否为1,来判断是否运行BOOT程序还是直接跳到APP程序区;
帖子主题金币
版主研究过官网STM32F407/STM32F207的LwIP+SSL范例吗?
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
注册会员, 积分 57, 距离下一级还需 143 积分
注册会员, 积分 57, 距离下一级还需 143 积分
把你的源码公开撒
帖子主题金币
注册会员, 积分 57, 距离下一级还需 143 积分
注册会员, 积分 57, 距离下一级还需 143 积分
你好!& &你的APP程序带系统吗??& && & 我的程序带UCOS,boot调到APP后就死了,没有UCOS的没有问题
帖子主题金币
你好!& &你的APP程序带系统吗??& && & 我的程序带UCOS,boot调到APP后就死了,没有UCOS的没有问题
没用过带系统的,估计是启动文件或者其他什么地方需要修改吧
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 43, 距离下一级还需 7 积分
新手上路, 积分 43, 距离下一级还需 7 积分
感觉好厉害
帖子主题金币
注册会员, 积分 57, 距离下一级还需 143 积分
注册会员, 积分 57, 距离下一级还需 143 积分
升级软件用什么啊?
帖子主题金币
升级软件用什么啊?
就是用我帖子里面的程序噻
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
注册会员, 积分 57, 距离下一级还需 143 积分
注册会员, 积分 57, 距离下一级还需 143 积分
PC软件也是自己写的?& & 你的USB升级也是DFU协议??
帖子主题金币
自己写的程序,自己定的协议,不是dfu
帖子主题金币
自己写的程序,自己定的协议,不是dfu
帖子主题金币
注册会员, 积分 57, 距离下一级还需 143 积分
注册会员, 积分 57, 距离下一级还需 143 积分
把一下公开下撒,让我们也学习下
帖子主题金币
把一下公开下撒,让我们也学习下
学习的话可以按照我这个思路自己折腾,这个是产品里面用到的代码,不是很方便,若有需求可以私聊我
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
注册会员, 积分 74, 距离下一级还需 126 积分
注册会员, 积分 74, 距离下一级还需 126 积分
过于强大啊
帖子主题金币
新手上路, 积分 37, 距离下一级还需 13 积分
新手上路, 积分 37, 距离下一级还需 13 积分
感谢共享!!!!!!!!!!
帖子主题金币
中级会员, 积分 265, 距离下一级还需 235 积分
中级会员, 积分 265, 距离下一级还需 235 积分
这个貌似蛮复杂的啊,真是牛人
帖子主题金币
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
感谢共享!!!!!!!!!!
帖子主题金币
新手上路, 积分 45, 距离下一级还需 5 积分
新手上路, 积分 45, 距离下一级还需 5 积分
不错不错,真是牛人
帖子主题金币
新手上路, 积分 21, 距离下一级还需 29 积分
新手上路, 积分 21, 距离下一级还需 29 积分
好厉害,谢谢
帖子主题金币
新手上路, 积分 21, 距离下一级还需 29 积分
新手上路, 积分 21, 距离下一级还需 29 积分
回复不了?& &
帖子主题金币
注册会员, 积分 124, 距离下一级还需 76 积分
注册会员, 积分 124, 距离下一级还需 76 积分
不错不错,真是牛人
帖子主题金币
注册会员, 积分 50, 距离下一级还需 150 积分
注册会员, 积分 50, 距离下一级还需 150 积分
感觉好厉害
帖子主题金币
中级会员, 积分 356, 距离下一级还需 144 积分
中级会员, 积分 356, 距离下一级还需 144 积分
楼主,STM32F bootloader最近想学学,能否提供源码,谢谢!
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
挣个金币,顺便感谢一下楼主
帖子主题金币
中级会员, 积分 232, 距离下一级还需 268 积分
中级会员, 积分 232, 距离下一级还需 268 积分
挣个金币,顺便感谢一下楼主!!!!!!!!!!!!
帖子主题金币
新手上路, 积分 27, 距离下一级还需 23 积分
新手上路, 积分 27, 距离下一级还需 23 积分
楼主威武,我也是类似这么做的
帖子主题金币
注册会员, 积分 51, 距离下一级还需 149 积分
注册会员, 积分 51, 距离下一级还需 149 积分
xue xi xue xi
帖子主题金币
注册会员, 积分 61, 距离下一级还需 139 积分
注册会员, 积分 61, 距离下一级还需 139 积分
这个思路可以借鉴,敬佩。
帖子主题金币
中级会员, 积分 267, 距离下一级还需 233 积分
中级会员, 积分 267, 距离下一级还需 233 积分
版主的帖子好有技术含量。
帖子主题金币
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
值得学习!
帖子主题金币
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
不错的分享
帖子主题金币
新手上路, 积分 32, 距离下一级还需 18 积分
新手上路, 积分 32, 距离下一级还需 18 积分
输必须由主机发起是什么意思?
帖子主题金币
新手上路, 积分 12, 距离下一级还需 38 积分
新手上路, 积分 12, 距离下一级还需 38 积分
通过物联网平台实现对大量固件的远程OTA,不知道楼主有没有什么好的方案呢?使用MQTT传输可以么。
帖子主题金币
通过物联网平台实现对大量固件的远程OTA,不知道楼主有没有什么好的方案呢?使用MQTT传输可以么。
MQTT速度是问题,可以使用TFTP协议
人生到处知何似,应似飞鸿踏雪泥。
帖子主题金币
新手上路, 积分 35, 距离下一级还需 15 积分
新手上路, 积分 35, 距离下一级还需 15 积分
很强大,学习了,感谢分享
帖子主题金币
注册会员, 积分 103, 距离下一级还需 97 积分
注册会员, 积分 103, 距离下一级还需 97 积分
版主好厉害,必须赞,源码能公开让大家学一下最好了
帖子主题金币
注册会员, 积分 103, 距离下一级还需 97 积分
注册会员, 积分 103, 距离下一级还需 97 积分
版主好厉害,必须赞,源码能公开让大家学一下最好了
Powered by

我要回帖

更多关于 stm32 dfu模式怎么进 的文章

 

随机推荐