搜索
bottom↓
回复: 85

十行代码搞定STM32IAP(不断电调用原厂ISP)

  [复制链接]

出0入0汤圆

发表于 2019-1-26 08:50:13 | 显示全部楼层 |阅读模式
本帖最后由 bg6agf 于 2019-1-26 21:22 编辑

要完整工程的滚!!!!!!

直接上代码

#define     IapAdr    0x1FFFF000
typedef  void (*pFunction)(void);


uint8_t JumpToApp(uint32_t Addr)
{
        if (((*(__IO uint32_t*)Addr) & 0x2FFE0000 ) == 0x20000000)
        {
                __set_MSP(*(__IO uint32_t*) Addr);
                ((pFunction) (*(__IO uint32_t*) (Addr + 4)))();
        }
}


void    isp_boot(void) // 开机直接调这个
{
        if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET)   //HAL库版
        {
                JumpToApp(IapAdr);
                while(1);
        }
        RCC_ClearFlag();
}



void    reset2isp(void)  //想进ISP的时候掉调这个。
{
        __set_FAULTMASK(1);
        NVIC_SystemReset();
}



用法。在主程序开头 加一个isp-boot,应用中reset2isp 就直接进isp了。用官方isp软件即可
不能直接进ISP必须重启进。可能是因为外设设置初始化的问题

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2019-1-29 15:09:44 | 显示全部楼层
本帖最后由 bg6agf 于 2019-1-29 15:10 编辑



改了一下程序。设置成连续收到10个 0x7F 进入ISP 。于是。用SSCOm下载就很方便了。就是下载完不会自动运行。还没试怎么自动运行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-2-27 10:21:54 | 显示全部楼层
更新 一个小BUG


void    isp_boot(void) // 开机直接调这个
{
        if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET)   //HAL库版
        {
        RCC_ClearFlag(); //添加这句。否则ISP后不能自动进入用户APP

                JumpToApp(IapAdr);
                while(1);
        }
        RCC_ClearFlag();
}

出0入0汤圆

 楼主| 发表于 2019-4-2 15:18:50 | 显示全部楼层
上位机用这个,接一个串口就可以全自动了。
https://www.amobbs.com/thread-5709597-1-1.html?_dsign=af66eb81

出0入0汤圆

发表于 2019-1-26 09:06:18 | 显示全部楼层
谢谢分享!有完整工程上传测试就最好了

出0入0汤圆

发表于 2019-1-26 10:44:51 | 显示全部楼层
强!!!!!!

出0入4汤圆

发表于 2019-1-26 13:34:17 | 显示全部楼层
很简洁,谢谢。有测试工程最好。

出0入0汤圆

发表于 2019-1-26 14:20:45 | 显示全部楼层
先Mark,感谢分享   

出0入0汤圆

发表于 2019-1-26 14:44:08 | 显示全部楼层
这个确实简单,但是如果升级到一半断电了估计就挂了

出0入0汤圆

 楼主| 发表于 2019-1-26 16:18:09 | 显示全部楼层
cmy043 发表于 2019-1-26 14:44
这个确实简单,但是如果升级到一半断电了估计就挂了

有得必有失去。。留个BOOT0的按钮吧。。

出0入0汤圆

发表于 2019-1-26 16:40:04 | 显示全部楼层
楼主,不明白你说的“不能直接进ISP必须重启进。可能是因为外设设置初始化的问题”这句话。难道是在应用中调用reset2isp 进isp之后还要重启板子吗?

出0入0汤圆

发表于 2019-1-26 17:17:20 | 显示全部楼层
谢谢分享。

出0入0汤圆

发表于 2019-1-26 18:03:52 | 显示全部楼层
很简洁,谢谢分享。

出0入0汤圆

 楼主| 发表于 2019-1-26 19:36:27 | 显示全部楼层
zzipeng 发表于 2019-1-26 16:40
楼主,不明白你说的“不能直接进ISP必须重启进。可能是因为外设设置初始化的问题”这句话。难道是在应用中 ...

仔细看看代码就明白了…必须软重启再进就是代码的过程

自己看代码

出0入8汤圆

发表于 2019-1-26 20:15:35 来自手机 | 显示全部楼层
标记一下,我那个工程的BootLoader,单步时可以跳到app正常运行,全速运行时跳过去就卡死了,还没找原因

出0入0汤圆

发表于 2019-1-26 20:17:32 | 显示全部楼层
要完整工程的滚!!!!!!

出0入0汤圆

发表于 2019-1-27 11:02:08 来自手机 | 显示全部楼层
好牛逼的口气

出50入0汤圆

发表于 2019-1-27 11:13:03 | 显示全部楼层
支持楼主。

出0入0汤圆

发表于 2019-1-27 11:17:26 来自手机 | 显示全部楼层
STM32IAP 这个好

出0入0汤圆

 楼主| 发表于 2019-1-27 11:58:44 来自手机 | 显示全部楼层
higeo 发表于 2019-1-27 11:02
好牛逼的口气

受不了有些人…这么简单的代码都要做成工程送给他…一点脑子都不愿意动吗?

出0入4汤圆

发表于 2019-1-27 15:48:34 | 显示全部楼层
能加入AES加解密算法吗?

出0入0汤圆

发表于 2019-1-27 16:51:29 | 显示全部楼层
bg6agf 发表于 2019-1-26 19:36
仔细看看代码就明白了…必须软重启再进就是代码的过程

自己看代码

明白了,我看成硬件复位了。。函数 reset2isp(void)的功能就是产生软件复位。

出0入0汤圆

发表于 2019-1-27 19:00:50 | 显示全部楼层
bg6agf 发表于 2019-1-26 19:36
仔细看看代码就明白了…必须软重启再进就是代码的过程

自己看代码

楼主,我现在可以实现一定条件下(按键或者定时之类)进入ISP,之后调用FLYMCU软件通过串口连接单片机,点击升级固件,发现可以连接成功,
可以擦除成功以及解除读写保护,但是到最后编程的时候连接不上。如下图所示,不知怎么回事,求教!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-1-27 19:09:57 来自手机 | 显示全部楼层
zzipeng 发表于 2019-1-27 19:00
楼主,我现在可以实现一定条件下(按键或者定时之类)进入ISP,之后调用FLYMCU软件通过串口连接单片机, ...

没细看你的问题…不过建议你先用官方软件测试…

出0入0汤圆

发表于 2019-1-27 19:21:48 | 显示全部楼层
bg6agf 发表于 2019-1-27 19:09
没细看你的问题…不过建议你先用官方软件测试…

可以给个官方软件的名字吗?登录ST官网五花八门,都不知道是哪个。。

出0入0汤圆

发表于 2019-1-27 19:51:27 | 显示全部楼层
bg6agf 发表于 2019-1-27 19:09
没细看你的问题…不过建议你先用官方软件测试…

下载官方软件测试可以了
刚刚那个问题应该是FLYMCU软件的设置问题,什么DTR RTS之类,不理了

出0入0汤圆

 楼主| 发表于 2019-1-27 20:37:17 | 显示全部楼层
zzipeng 发表于 2019-1-27 16:51
明白了,我看成硬件复位了。。函数 reset2isp(void)的功能就是产生软件复位。 ...

代码不复杂。细看就能明白。想不通有人不看就要完整工程的。

出0入0汤圆

 楼主| 发表于 2019-1-27 20:37:55 | 显示全部楼层
BS_good200xy 发表于 2019-1-27 15:48
能加入AES加解密算法吗?

用的官方原版ISP协议。真心没法改

出0入0汤圆

发表于 2019-1-28 09:03:08 | 显示全部楼层
用它官方的原版的协议,没法加密啊!容易被盗啊!

出0入0汤圆

 楼主| 发表于 2019-1-28 09:17:16 | 显示全部楼层
596142041 发表于 2019-1-28 09:03
用它官方的原版的协议,没法加密啊!容易被盗啊!

又想马儿跑得快又想马儿不吃草……这里仅仅是一个…实现…而非…实用……

出0入0汤圆

发表于 2019-1-28 11:05:55 | 显示全部楼层
bg6agf 发表于 2019-1-28 09:17
又想马儿跑得快又想马儿不吃草……这里仅仅是一个…实现…而非…实用…… ...

MCUISP跟STM32握手用的是0X7F,是不是在STM32的串口中对收到的0X7F,进行计数,比如大于10,就调用楼主的程序,自动ISP,免去手动拨BOOT的麻烦

出0入0汤圆

发表于 2019-1-28 11:06:13 | 显示全部楼层
那位能帮忙试下,我现在没有硬件

出0入0汤圆

 楼主| 发表于 2019-1-28 11:12:22 | 显示全部楼层
xyz2008 发表于 2019-1-28 11:05
MCUISP跟STM32握手用的是0X7F,是不是在STM32的串口中对收到的0X7F,进行计数,比如大于10,就调用楼主的 ...


协议自己定。。。因为在ISP之前 。是自己的程序在运行。

另外这个握手是STM32官方协议。是用来做自动波特率的。。所以。你可以接收但是不能回复。

出0入0汤圆

发表于 2019-1-28 11:14:36 | 显示全部楼层
bg6agf 发表于 2019-1-28 11:12
协议自己定。。。因为在ISP之前 。是自己的程序在运行。

另外这个握手是STM32官方协议。是用来做自动波 ...

如果想用现在的软件的话,不知道这样行不行,比如,官方的,MCUISP,谁帮忙试下

出0入0汤圆

发表于 2019-1-28 11:20:37 | 显示全部楼层
Mark,

出0入10汤圆

发表于 2019-1-28 11:21:20 | 显示全部楼层
  不错,有空测试一下效果。

出0入0汤圆

发表于 2019-1-28 15:42:42 | 显示全部楼层
bg6agf 发表于 2019-1-28 09:17
又想马儿跑得快又想马儿不吃草……这里仅仅是一个…实现…而非…实用…… ...

之前做过用CAN进行ISP,已经都做完了,后面发现实际用处不大...

出100入0汤圆

发表于 2019-1-28 16:04:31 | 显示全部楼层
强!MARK下!

出0入0汤圆

发表于 2019-1-28 16:59:47 | 显示全部楼层
赞一个!

出0入0汤圆

发表于 2019-1-28 18:52:35 来自手机 | 显示全部楼层
楼主,如果不复位直接调跳转用会怎样?

出0入0汤圆

发表于 2019-2-22 22:42:21 | 显示全部楼层
这个IAPAddr随着不同芯片会不同吧,具体要看datasheet

出0入0汤圆

发表于 2019-2-22 23:49:43 | 显示全部楼层
懒人有福,哈哈,先Mark,感谢分享  !

出0入8汤圆

发表于 2019-2-23 18:34:06 来自手机 | 显示全部楼层
这样做bootloader 省掉了。

出675入8汤圆

发表于 2019-2-23 22:16:52 来自手机 | 显示全部楼层
学习了,谢谢楼主

出0入0汤圆

发表于 2019-2-23 22:33:13 | 显示全部楼层
支持下楼主!

出0入0汤圆

发表于 2019-2-27 15:02:59 | 显示全部楼层
代码与楼主类似,我用芯片内的BootLoader通过RS485升级程序。

出0入0汤圆

发表于 2019-3-6 17:42:01 | 显示全部楼层

请教一下楼主,什么情况下通过串口烧录完成后能自动运行用户APP?
目前我通过BOOT0接高电平进入ISP,烧录完成之前就把BOOT0接低了,但烧录完成后也没有自动运行用户APP。
这种状态下如果继续点烧录,还可以烧进去。说明ISP没有自动退出。
有时候偶尔可以自动运行,机率比较小。

出0入0汤圆

发表于 2019-3-6 19:25:48 | 显示全部楼层
不搞这个,占个位,

出0入0汤圆

 楼主| 发表于 2019-3-6 21:20:21 | 显示全部楼层
gentlerain 发表于 2019-3-6 17:42
请教一下楼主,什么情况下通过串口烧录完成后能自动运行用户APP?
目前我通过BOOT0接高电平进入ISP,烧录 ...

官方isp有这个功能…烧写完自动运行…协议里也有这个命令…你用官方软件试试就知道了

出0入0汤圆

 楼主| 发表于 2019-3-6 21:20:58 | 显示全部楼层
styleno1 发表于 2019-2-27 15:02
代码与楼主类似,我用芯片内的BootLoader通过RS485升级程序。

官方的isp能支持485?还真没有试过

出0入0汤圆

发表于 2019-4-2 11:09:19 | 显示全部楼层
reset2isp产生软件复位 然后连接进入isp模式。那么如果代码中没有reset2isp 这个函数,那岂不是无效了?既然是原厂ISP模式, isp_boot的作用是什么呢?本身默认0x8000000启动

出0入0汤圆

 楼主| 发表于 2019-4-2 11:17:30 | 显示全部楼层
miaoguoqiang 发表于 2019-4-2 11:09
reset2isp产生软件复位 然后连接进入isp模式。那么如果代码中没有reset2isp 这个函数,那岂不是无效了?既 ...

代码全的。自己单步一下

出675入8汤圆

发表于 2019-4-2 23:16:46 来自手机 | 显示全部楼层
强!MARK下!

出0入0汤圆

发表于 2019-4-2 23:26:43 | 显示全部楼层
谢谢 分享

出0入0汤圆

发表于 2019-4-20 21:23:26 来自手机 | 显示全部楼层
mark。      

出0入0汤圆

 楼主| 发表于 2019-4-20 22:44:20 | 显示全部楼层
现在可以全自动

出0入0汤圆

发表于 2019-5-24 10:56:38 | 显示全部楼层
不断电调用原厂BOOTLOADER

出0入13汤圆

发表于 2019-5-24 11:04:45 | 显示全部楼层
不断电调用原厂BOOTLOADER

出0入0汤圆

发表于 2019-8-6 16:17:39 | 显示全部楼层
这个mark一下,:-)。

出0入4汤圆

发表于 2019-8-6 16:36:13 来自手机 | 显示全部楼层
可以的,不错的方法,不用短路boot0

出0入0汤圆

发表于 2019-8-6 17:27:07 来自手机 | 显示全部楼层
谢谢分享!不错的代码!

出0入4汤圆

发表于 2019-8-6 17:59:13 | 显示全部楼层
十行代码搞定STM32IAP(不断电调用原厂ISP)

出0入0汤圆

发表于 2019-8-7 09:18:20 | 显示全部楼层
用于脱机烧录挺好的,只是不适合用于产品 OTA,还是需要有分区

出0入0汤圆

发表于 2019-8-7 09:20:27 | 显示全部楼层
了无 发表于 2019-1-26 20:15
标记一下,我那个工程的BootLoader,单步时可以跳到app正常运行,全速运行时跳过去就卡死了,还没找原因 ...

试试 RTT 的 STM32 通用 bootloader,支持云端 OTA,还是挺好用的。就是通用版本貌似不支持加解密和解压缩,如果你自己的 bootloader 有问题,不妨试试

出0入0汤圆

发表于 2019-8-7 09:22:28 | 显示全部楼层
Mark
十行代码搞定STM32IAP(不断电调用原厂ISP)

出0入0汤圆

发表于 2019-8-7 10:13:34 | 显示全部楼层

谢谢分享!

出0入0汤圆

发表于 2019-8-7 10:16:30 | 显示全部楼层
学习了,好方法

出0入0汤圆

发表于 2019-8-7 14:33:56 | 显示全部楼层
不断电调用原厂BOOTLOADER

出0入0汤圆

发表于 2019-8-7 16:43:43 | 显示全部楼层
很简洁,谢谢分享。

出0入0汤圆

发表于 2019-8-13 15:36:41 | 显示全部楼层
不断电调用原厂BOOTLOADER

出0入0汤圆

发表于 2019-11-27 00:05:18 来自手机 | 显示全部楼层
mark,isp,iap

出0入0汤圆

发表于 2019-12-3 10:18:27 | 显示全部楼层
bg6agf 发表于 2019-3-6 21:20
官方的isp能支持485?还真没有试过

我也纳闷,RS485的话谁来控制收发? STM32内置的BOOTLOADER有在控制哪个PIN吗?
没看到手册里有写。

出0入0汤圆

发表于 2019-12-3 10:38:07 | 显示全部楼层
厉害   谢谢分享

出0入0汤圆

发表于 2019-12-3 14:35:19 | 显示全部楼层
撸主,你这样处理可能不太好,如果其他地方也需要软件重启的话,可以往备份寄存器里面写标记,然后软复位判断那里面加上备份寄存器值的判断会好些,重启不断电备份寄存器是不会丢失的。

出0入0汤圆

 楼主| 发表于 2019-12-3 14:54:57 | 显示全部楼层
nongxiaoming 发表于 2019-12-3 14:35
撸主,你这样处理可能不太好,如果其他地方也需要软件重启的话,可以往备份寄存器里面写标记,然后软复位判 ...

其他地方需要重启的话。。饿死狗就行了。

出0入0汤圆

发表于 2019-12-23 09:06:38 | 显示全部楼层
谢谢分享!!!

出0入8汤圆

发表于 2020-1-18 10:24:10 | 显示全部楼层
styleno1 发表于 2019-2-27 15:02
代码与楼主类似,我用芯片内的BootLoader通过RS485升级程序。

我现在做一个项目,485网络中1台主机,25台子机,主机给各子机下发,使用BOOTLOAD远程升级,想请教一下,你是怎么用RS485实现升级的?

出0入0汤圆

发表于 2020-1-18 13:57:42 | 显示全部楼层
wukong998 发表于 2020-1-18 10:24
我现在做一个项目,485网络中1台主机,25台子机,主机给各子机下发,使用BOOTLOAD远程升级,想请教一下, ...

具体是什么问题你指明下?

出0入0汤圆

发表于 2020-1-19 13:09:26 | 显示全部楼层
好简洁,准备试试呢

出0入8汤圆

发表于 2020-1-20 14:17:37 | 显示全部楼层
styleno1 发表于 2020-1-18 13:57
具体是什么问题你指明下?

485网络中1台主机,30台子机,主机接4G模组,并与各子机485网络通讯,各子机使用BOOTLOAD远程升级,想请教一下,怎么用RS485实现远程升级的?

出0入0汤圆

发表于 2020-1-20 14:43:47 来自手机 | 显示全部楼层
简洁高效,赞一个

出0入0汤圆

发表于 2020-6-27 06:18:43 | 显示全部楼层
感谢分享,这个思路比较奇特~

出0入0汤圆

发表于 2020-7-6 13:28:53 | 显示全部楼层
学习了  谢谢分享

出0入0汤圆

发表于 2020-7-6 16:43:53 | 显示全部楼层
正好最近想搞一个串口在线更新程序,先参考一下先。

出0入0汤圆

发表于 2020-12-21 23:43:48 | 显示全部楼层
本帖最后由 xiaohe669 于 2020-12-22 15:43 编辑

我测试了一下,如果 不把BOOT0设置为1 BOOT1设置为0 的情况下,还是无法进入bootloader   串口下载模式。
不知是不是我理解有误

难道楼主的意思是:BOOT管脚设置成串口下载模式的情况下,软件跳入ISP下载模式,然后下载完成后跳入用户程序执行?


我理解错了,已经解决,BOOT 00状态下直接进ISP串口下载
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 23:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表