stm32 IAP 需要注意的几点

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HUDCHSDI/article/details/85167380

我就不说什么是iap了 以及如何iap了 ,,论坛资料很多。就不赘述了。。。
我就记录一下我在IAP过程中遇到的几个问题,希望可以帮到有遇到相同情况的人,。

问题1 flash中写入app的起始地址

我的iap源码参考正点原子的 IAP源码 原子使用的ZET6 有64K的ram和126K的FLASH 所以原子很大气的给bootloader分了64K的flash。 当我把代码移植到我的F103C8T6上以后,app的存放地址我没改动。。然后就导致在写flash的时候遇到了代码没有完全写进去的问题。。因为我从0X08010000开始写app程序,这样是有问题的。

解决方法

将看了一下我的bootloader只有7K 然后我将app地址设置为0X08005000以后该问题就解决了。

问题2 大容量flash和中小容量flash的区别

在我写flash的时候原子的程序一次写1024个半字 也就是2K byte但是我调试的时候发现,flash里面总是只写入了前1K的数据,,最后查资料才发现 stm32的大容量芯片的flash一页是2k 中小容量一页是1k 。正是这个原因导致的问题

解决方法

中小容量的mcu 将1024 改为 512 即可

问题3 app程序的起始地址和中断向量表的偏移

在app编译前需要设置app在rom中的起始地址,一定要和bootloader里面的写flash地址对应。同时在主程序里面将中断向量表也要偏移 该长度 即从0x08000000到你APP的起始地址。

划重点了: IAR的memory窗口和live watch真是个好东西。 当你在程序运行过程中,关于写内存的时候你可以打开memory窗口,输入你要写的地址。 就可以清楚的看到你写入的数据。。排错超级好用

展开阅读全文

没有更多推荐了,返回首页