打印
[技术问答]

通过bootloader串口烧写用户程序后程序不运行问题请教

[复制链接]
648|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liangzaixl|  楼主 | 2020-11-2 23:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神好,       最近我自己做了个bootloader并通过串口来烧写用户程序,烧写之后程序能正常运行。但是我进行一级加密之后,发现程序不运行了。但此时还能通过bootloader串口来重新烧写程序,说明bootloader是有正常运行的。看现象应该是无法调转到用户程序,或调转到用户程序之后程序才不运行的。如果不进行一级加密,程序是可以正常运行的。
       然后我尝试直接用仿真器把用户程序烧写进去,并进行一级加密,加密之后程序可以正常运行。
       烧写过程中烧写bootloader是用ST-link和keil 5进行烧写。通过串口烧写完用户程序后,加密是用“STM32 ST-LINK Utility“(这一套烧写之前在ST芯片上是完全没问题的,加密后也能正常运行)。直接仿真器烧写用户程序及一级加密跟上面用的工具是一样的。
       两种烧写方式的区别就是,用bootloader烧写后需要重映射中断向量表,我是把整个表搬到RAM执行,难道是,HK芯片上进行一级加密后,会影响这个中断向量表的重映射,还是说一级加密之后,中断向量表就不能重映射?
       加密设置表:


       谢谢!


使用特权

评论回复

相关帖子

沙发
annko2005| | 2020-11-3 08:34 | 只看该作者
请问,你用的是我们航顺的哪个型号的芯片?

使用特权

评论回复
评论
liangzaixl 2020-11-3 10:58 回复TA
抱歉,忘了说了,用的是HK32F030C8 
板凳
liangzaixl|  楼主 | 2020-11-3 11:00 | 只看该作者
annko2005 发表于 2020-11-3 08:34
请问,你用的是我们航顺的哪个型号的芯片?

用的是HK32F030C8

使用特权

评论回复
地板
annko2005| | 2020-11-3 14:36 | 只看该作者

你用到了IAP+APP这种方式吗?我们的030把矢量地址映射到SRAM中是存在问题的。你需要在默认的每个中断函数中增加一个判断。你参考我发的例程的中断处理方式。

hk32f03x_iap_with_read_protectV1_v1.0.zip

25.82 MB

使用特权

评论回复
5
liangzaixl|  楼主 | 2020-11-3 14:46 | 只看该作者
annko2005 发表于 2020-11-3 14:36
你用到了IAP+APP这种方式吗?我们的030把矢量地址映射到SRAM中是存在问题的。你需要在默认的每个中断函数 ...

是的,自己做一个bootloader程序(即你说的IAP)放在芯片的0x08000000开始的位置,并再做一个电脑上位机和它进行串口通信来烧写用户程序。你说的在中断中增加一个判断,是只需在bootloader中的中断函数中增加呢,还是用户程序中的中断函数也要增加?
另外,中断的重映射,能否直接映射到用户程序的FLASH起始地址?即不映射到RAM中。谢谢

使用特权

评论回复
6
liangzaixl|  楼主 | 2020-11-3 16:07 | 只看该作者
annko2005 发表于 2020-11-3 14:36
你用到了IAP+APP这种方式吗?我们的030把矢量地址映射到SRAM中是存在问题的。你需要在默认的每个中断函数 ...

我刚看了下您发的资料,是不是可以这样理解,我要先在IAP程序里边,把用户程序用到的所有中断,例如捕获中断,先在IAP里边定义好(即使IAP没有用到捕获中断),然后再在IAP的捕获中断里边跳转到属于用户程序的捕获中断的真正入口地址?相当于是上电程序调转去执行用户程序之后,来了个捕获中断,都会先调转到IAP的捕获中断,然后再从它的捕获中断跳到用户程序的捕获中断,人为实现中断向量的重映射?

使用特权

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

本版积分规则

5

主题

21

帖子

0

粉丝