打印
[STM8]

发个占用资源少的STM8 bootloader

[复制链接]
17159|62
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
way2888|  楼主 | 2014-5-25 15:23 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 way2888 于 2015-6-11 22:02 编辑

把源码也发上来,免得有些朋友到处找了

更新一下 TinyBoot For STM8 V5.3
增加合并Bootloader和APP生成HEX文件,供下载器一次下载便完成编程的功能

并发一个可用的APP程序吧,在软件的BOOTLOADER设置禁止使能PIN引脚进入,并在就绪命令设置为0xa5,波特率设为115200
供只能升级一次就不能升级的参考

大概介绍一下使用方法吧:
用户程序下载:
首先运行软件,根据自己的编程要求设置好Bootloader的选项,其中包括选择芯片型号,芯片容量,和使用的UART(针对S207,S208,因为它有2个UART),以及使用的通信波特率.
如果使用UART自定义接口的,在未保证你的程序一定能响应就绪命令而跳转到Bootloader之前,建议保留使用IO状态进入Bootloader(只在芯片上电的时候,IO状态判定是否进入),
如果你设置的Bootloader是禁止IO状态进入的话,而你的应用程序又未调通UART时,这样的情况下升级是会变砖的.因为Bootloader没有强制延时等待升级的功能.
当设置好你要求的Bootloader后,点击文件菜单里的保存Bootloader,这样就生成你刚才设置的Bootloader文件.再通过下载器(ST-LINK)下载到芯片中.
此后,你若需要下载程序只需要打开本软件,打开你要下载的文件,确认当前的Bootloader设置与写进芯片里的设置要一致后,点击下载即可.
如果是使用UART自定义接口跳转到Bootloader的话,在点击下载之前,先在帮助里的就绪文本框里输入你应用程序需要的十六进制数据.再点击下载即可.

Bootloader更新:
首先设置好新的Bootloader设置,除CHIP和SIZE外,其余的可以和芯片里的设置可以不相同(CHIP和SIZE绝对要和写进芯片里的设置要一致)
通信里的波特率(记住,不是Bootloader的BPS)必须与芯片内的设置一致,然后点击文件的更新Bootloader,则可更新新设置的Bootloader.
更新Bootloader后,再下载用户程序即可(方法见上)
举个例子吧:
        原来写到芯片的UART的BPS是115200,现在希望新Bootloader使用9600通信
        1.先设置Bootloader的BPS为9600,选择通信的波特率要与芯片的115200一致,
        2.确认其他设置都匹配,和就绪命令都设置好了,点击更新Bootloader.
        3.当显示更新完成后,更改通信设置的波特率为9600,再打开你的应用程序升级即可
TinyBoot For STM8 V5.3.rar (334.88 KB)


STM8-APP.rar

218.83 KB

STM8 TinyBoot V5.3.rar

768.01 KB

源码

62
bestdesign11| | 2021-1-13 16:57 | 只看该作者
谢谢分享

使用特权

评论回复
61
henglin| | 2017-9-30 12:56 | 只看该作者
UP

使用特权

评论回复
60
qq80073955| | 2017-8-22 10:45 | 只看该作者
大家好,我用的芯片是STM8S207M8,测试了一下,提示通讯错误,不知道什么原因?是不是tinyboot不支持这个芯片?

使用特权

评论回复
59
qingyu_lv| | 2017-7-24 14:13 | 只看该作者
正好需要 我看看有问题没  谢了 借鉴一下

使用特权

评论回复
58
iloveh| | 2017-6-11 16:46 | 只看该作者
刚好要用到BOOTLOADER。学习下下

使用特权

评论回复
57
josonxie| | 2017-4-30 23:51 | 只看该作者
make!!!!

使用特权

评论回复
56
jiayong612| | 2017-4-30 09:23 | 只看该作者
谢谢分享!

使用特权

评论回复
55
changjianqiyuan| | 2017-3-7 14:40 | 只看该作者
学习            

使用特权

评论回复
54
wingis| | 2016-11-28 18:48 | 只看该作者
好东西谢谢分享!!

使用特权

评论回复
53
994560847| | 2016-5-8 18:11 | 只看该作者
非常好的学习资料,给楼主32个赞。

使用特权

评论回复
52
巴了吧| | 2015-12-25 09:07 | 只看该作者
请问一下楼主,stm8有BOOT引脚吗?可不可以通过外部短接来使能他的isp功能那?!

使用特权

评论回复
51
chj123758| | 2015-12-10 15:44 | 只看该作者
久旱逢甘霖,谢谢大能。谢谢way2888

使用特权

评论回复
50
cox__w| | 2015-12-7 15:42 | 只看该作者
谢谢分享,去***下载

使用特权

评论回复
49
951478331| | 2015-12-6 20:05 | 只看该作者
您好,我正在使用您的串口BOOT  不知为什么,上位机一直提示通信超时,检查连线,我已经检查过了,线路没有问题,下位机使用的你提供的STM8F103的,直接刷,但是依旧没有任何反应,能不能帮助一下,谢谢

使用特权

评论回复
48
wode112233| | 2015-11-13 11:15 | 只看该作者
学习了

使用特权

评论回复
47
foxglove| | 2015-11-12 16:38 | 只看该作者
STM8 bootloader

使用特权

评论回复
46
DIYfashaoyou| | 2015-11-12 16:32 | 只看该作者
顶,下载下来学习一下  !大谢楼主

使用特权

评论回复
45
尘封的双眸| | 2015-9-28 19:19 | 只看该作者
楼主附件app工程中,入口地址是否有误???#define BOOT                (u32) (0x8000+FLASH_SIZE-4)
if(Sbuf==0xa5) _run(BOOT);
复位地址是FFFC。
但loader工程的hex文件中FFFC是跳转到FF0C,FF0C地址在loader工程仿真如截图。
复位地址应该是FF1F才对吧?!


QQ截图20150928191101.png (53.1 KB )

loader仿真截图

loader仿真截图

2.png (19.79 KB )

loaderhex文件截图

loaderhex文件截图

使用特权

评论回复
44
LZJ361155817| | 2015-9-18 11:16 | 只看该作者
楼主大神,向您请教一个问题。用您的方案已经很好并且成功了。但因为MCU空间充足并且想要把IAP功能集合到一个工程。我还想尝试以下不同方案。需重定位中断向量地址,需配置IAR的icf文件将地址分段。
0x8000-0x807F 为region vectitt , 对应放置跳转到重定义的中断向量地址0x9000-0x907f。
0x8080-0x8FFF  为region iaprom,对应iap相关的loader代码处理。
0x9000-0x907f  为region  revector ,为重定义的中断向量地址
0x9080-0xFFEF  为region  rom ,对应app功能区代码
0xFFF0-0xFFFF   为region  iapdoneflag ,对应存一个标志来判断是要跳至iap还是app.

重定义中断向量时我用了以下代码:
__root const long reintvec[] @ ".intvec"=
{ 0x82008080,,0x82009004.....};

在icf文件中对应有修改如下:
define region vectitt = [from 0x8000 to 0x807F];
define region IapRom = [from 0x8080 to 0x8FFF];
define region Revectit = [from 0x9000 to 0x907F];
define region Rom = [from 0x9080 to 0xFFEF];
define region IapFlag = [from 0xFFF0 to 0xFFFF];
define region NearFuncCode = [from 0x9080 to 0xFFEF];
define region FarFuncCode = [from 0x9080 to 0xFFEF];
define region HugeFuncCode = [from 0x9080 to 0xFFEF];

define block INTVEC with size = 0x80 { ro section .intvec };    //用此三行编译无法通过!
define block INTVEC with size = 0x80 { ro section .intvec };   //用此三行编译无法通过!
place at start of vectitt  { block INTVEC };                            //用此三行编译无法通过!

屏蔽以上三行,改用:
place at start of vectitt      { rw section .intvec };      //则编译可以通过
编译可以通过,但是编译出来却不是我想要的,0x8000-0x8080之间竟然是空的!
我重定位的地址向量(82008080等)被写到FarFuncCode 这段空间里面去了。

我以为的理想状态应该是0x8000-0x807F之间被填充为82008080,82009004,。。。

要怎样修改icf文件实现想要的功能呢???还请大神赐教!

使用特权

评论回复
43
mailbomd| | 2015-9-16 21:14 | 只看该作者
感谢楼主在此坛也共享这个,***把我帐号删除了之后很久没有见过如此实用的东西了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

50

帖子

4

粉丝