stm32 的Flash Loader Demonstrator改写

发布者:HarmonyInLife最新更新时间:2020-01-18 来源: eefocus关键字:stm32  Flash  Loader  Demonstrator  改写 手机看文章 扫描二维码
随时随地手机看文章

本来是写在了baidu的blog上的,不知触犯了什么规矩,居然发布失败,只能改在这里了,我觉得我的一些想法,一些工作中的闪光的发现,能告诉大家,挺好的。


因为让设备Boot0 = 1后,设备一直狂发00,所以,st的那个Flash Loader demo无法Next成功。


实际上,这个ISP的协议早已经公开了,大家可以自己编写下载工具的。


首先先说一下,我使用的是V2.6.0的版本,其它的应该类似吧。或者以后的版本,ST自己会改正这部分。


在安装目录里有一个Src


之后打开STMicroelectronics Flash  Loader project.sln


查找STUARTBLLIB.cpp


里面的这个函数


STUARTBLLIB_API BYTE STBL_Init_BL()


因为它每次发送完报文头0x7F后只接受1个字节,造成无法正确识别到单片机的应答0x79。


我把开头部分改为


if (!Cur_COM.isConnected)  return NO_CON_AVAILABLE;



LPBYTE RQ_Buffer = (LPBYTE) malloc(10000);


    RQ_Buffer[0] = INIT_CON; 

//if (Cur_COM.setTxd(FALSE)) _sleep(100);


    int iReLen;

iReLen = Cur_COM.sendData(1, RQ_Buffer);


if (iReLen == -1)

  return SEND_FAIL; 


iReLen = Cur_COM.receiveData(10000, RQ_Buffer);

if (iReLen ==  -1)

  return READ_FAIL;


if (iReLen > 0)

{

  RQ_Buffer[0] = RQ_Buffer[iReLen-1];

  

}

else

{

  return READ_FAIL;

}



//Work-Around : in case of the device send a 0x00 value 

//after system reset , we reveive  again the real ack


if( !((RQ_Buffer[0] == ST75) || (RQ_Buffer[0] == ST79)) )

  if (Cur_COM.receiveData(1, RQ_Buffer) != 1)

   return READ_FAIL;


//if (Cur_COM.setTxd(FALSE)) 

//_sleep(100);


我是按Release编译的,编译后,到SrcBINRelease找到STUARTBLLIB.dll


拷贝到STMicroelectronics flash loader.exe所在目录,即可应对那些狂发00的串口了。


不上传dll文件了,把这些文字留给有心人吧,也许你们看到这些文字时,那个工具已经修正了这个bug,


也许工业界已经不再流行stm32了,


也许我已经老了。

关键字:stm32  Flash  Loader  Demonstrator  改写 引用地址:stm32 的Flash Loader Demonstrator改写

上一篇:STM32烧写程序口注意问题
下一篇:stm32_015_stm32工程设置程序下载到flash中

推荐阅读最新更新时间:2024-11-13 06:58

STM32的5个时钟源知识
  众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实他只有四个,因为从上图中可以看到PLL都是由HSI或HSE提供的。   其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。   内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用内部高速时钟。而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号.   高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16
[单片机]
STM32开发笔记43: 使用CMSIS-RTOS建立任务
单片机型号:STM32F070F6P6 昨天,将FreeRTOS移植到STM32现有的工程后,今天希望使用RTOS进行工程设计,遇到的第1个问题,就是工程中的函数在FreeRTOS的帮助文档中全部都检索不到。在网上仔细学习后,才发现,ST公司给的FreeRTOS例程,又进行了一层封装,这层就是CMSIS-RTOS。CMSIS-RTOS是keil公司对不同RTOS的一种封装结构,可以使不同的RTOS具有相同的调用接口,以方便今后程序的移植。本文,详细介绍使用CMSIS-RTOS建立任务的方法。 使用CMSIS-RTOS建立任务需要用到两个API,分别是osThreadDef和GprsTaskHandle,其具体定义如下:
[单片机]
<font color='red'>STM32</font>开发笔记43: 使用CMSIS-RTOS建立任务
keil+stm32+jlink利用swd方式进行printf输出
使用ITM机制实现调试stm32单片机,实现printf与scanf。 1. ITM简介 ITM机制是一种调试机制,是新一代调试方式,在这之前,有一种比较出名的调试方式,称为半主机(semihosting)方式。 在pc上编写过C语言的人都知道,printf可以向控制台输出,scanf可以从控制台获取输入,这里的printf/scanf都是标准库函数,利用操作系统的这些函数,我们可以很方便的调试程序。在嵌入式设备上(如stm32单片机平台上)开发工具(如MDK/IAR)也都提供了标准库函,自然也提供了printf/scanf函数,那么这些函数是否可以使用呢? 问题来了,printf向哪里输出呢?并且大部分情况下,也没有键盘,又如何
[单片机]
keil+stm32+jlink利用swd方式进行printf输出
NAND Flash价格年跌28% 产能竞争加速
NAND Flash市场受到移动装置等需求增加带动,出现迅速成长,然而价格滑落的速度也和出货成长同样迅速。要在市场上生存,主要制造厂之间的生产效能竞争将渐趋激烈。 韩联社引用HIS iSuppli资料预估,全球NAND Flash出货量在2013~2018年期间,年平均增加41.8%。 以1GB为基准计算的NAND Flash出货量,2013年为355.07亿颗,2014年增加48.6%至527.51亿颗,2015年预计为766.7亿颗、2016年为1,116.65亿颗、2017年为1,516.6亿颗、2018年为2,036.16亿颗等。 NAND Flash出货量及价格趋势 NAND Flash市场
[嵌入式]
NAND <font color='red'>Flash</font>价格年跌28% 产能竞争加速
第八章 外部中断
第一节原理解读 打算写一下中断,又忍不住想说一下中断的概念,去书上翻一翻,或者自己在搜索引擎上搜一下,都可以找到一大堆,包括本文写的这个外部中断也不例外。如果要写光是中断就可以单独写一篇了,所以本文直入主题,对于STM32的外部中断进行详细的剖析。下图来自《STM32参考手册》,从整个架构图可以知道,外部中断的功能可以配置六个寄存器。 GPIO的映射关系图如下所示: 第二节配置环境1,打开STM32CubeMX并选择芯片,下载器配置如下图。 2,选择按键的引脚,配置成外部中断。如下图: 3,配置PC15引脚(也就是开发板上LD5的引脚)为输出模式。 4,选中GPIO,选择PC14,并且将GPIO的模式配置为外部中断下
[单片机]
第八章 外部中断
STM32学习笔记--EXTI
1、PA0 ... PF0 共用一个中断标志 EXT0 PA1 ... PF1 共用一个中断标志 EXT1 . . . . PA15... PF15共用一个中断标志 EXT15 2、EXT5-9 共用一个中断源 EXT10-15 共用一个中断源 3、启用中断前,需ENABLE IO口的复用功能(AFIO) 4、设置中断IO口 5、将IO口注册到中断线(将IO口映射到中断线N) 例:GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3); 将GPIOD.3注册至                          
[单片机]
STM32库函数USART_SendData的缺陷和解决方法
2.1 问题及现象 使用USART_SendData()函数非连续发送单个字符是没有问题的;当连续发送字符时(两个字符间没有延时),就会发现发送缓冲区有溢出现象。若发送的数据量很小时,此时串口发送的只是最后一个字符,当发送数据量大时,就会导致发送的数据莫名其妙的丢失。 如: for(TxCounter = 0;TxCounter RxCounter; TxCounter++) USART_SendData(USART1, RxBuffer ); 2. 原因 此API函数不完善,函数体内部没有一个判断一个字符是否发送完毕的语句,而是把数据直接放入发送缓冲区,当连续发送数据时,由于发送移位寄存器的速度限制(与通信波特率有关),导
[单片机]
stm32快速入门
stm32简单描述:stm32基于ARM cortex-m3(m4)架构。官方已经提供完备的片内私有外设及片内外设的函数库。非常有利于利用C语言开发。 准备工作: 1、仔细阅读以下资料的相关章节: 1)cortex-m3权威指南 这是本cortex-m3架构的经典书,通俗易懂。开始阅读可重点关注存储结构等。 2)零死角玩转STM32 很好的入门教程,注意里面相关内容: A、LibrariesCMSISCoreCM3startuparm下有些启动文件,对应不同芯片,注意选择。 3)cortex-m3汇编启动代码分析 4) stm32固件库详解 PPP代表任一外设。 头文年的
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved