STM32F030C8T6 IAP 开发记录

昨天发出了单片机IAP的上位机程序,由于没有实际测试IAP APP的运行情况,所以便没有发出来IAP程序。
上位机相关的帖子:

http://blog.csdn.net/sunhaobo1996/article/details/79233285

说是自己写的,但还是参考了官方给出的Demo,所以叫官方精简定制版会更好一些?
使用标准库来尽可能减小体积,当初想用HAL库,用MXCube来生成初始化代码,但HAL生成的代码太大,什么都没写就将近5K,用在F4P6上性价比太低,果断放弃。
大致提一下这个的功能。

CRC8验证
1024以下可变包长

本来还有个分包序列号这东西,但感觉没什么用,就删掉了(毕竟也不乱序发包……都自带CRC与ACK了……)

难点,可能也就是对Flash的操作与如何跳转到APP上。

但怎么进行跳转,官方Demo已经给出了:

    if (((*(__IO uint32_t *)APPStartFlashAddr) & 0x2FFE0000) == 0x20000000)
    {
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t *)(APPStartFlashAddr + 4);
      Jump_To_Application = (pFunction)JumpAddress;

      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t *)APPStartFlashAddr);

      /* Jump to application */
      Jump_To_Application();
    }

就是将主堆栈指针定位到APP起始位置,然后将跳转的地址指向APP Reset处,进行跳转。

貌似没什么说的,那就上代码吧~

https://github.com/769484623/STM32F0_IAP_APP

IAP & APP都在里面。

哦对了,IAP跳转到APP之前记得将用到的外设设置成初始状态,否则可能会有一些奇奇怪怪的问题。

APP开发遇到的问题

官方给的Demo中,直接拿来用在开发中会有一点小问题。用官方2012版的startup.s不会出现这问题,但拿到2014版就会有warning。
Warning如下。

.\Objects\test.axf: Warning: L6918W: Execution region RW_IRAM2 placed at 0x200000c4 needs padding to ensure alignment 8 of startup_stm32f0xx.o(STACK).

查看了下map文件,发现0x200000c4 这个地方与后面的内存断开了。

检查了下RAM的设定,发现:
这里写图片描述

明显是错的。
不清楚为什么ST官方会跳过0x200000c4这块内存(我觉得应该是开发人员疏忽了,认为0xC0处是最后一个字的开始,所以下意识的+4),但正确的设定应该为:

这里写图片描述

这样再F7重新make,就OK了,不会再有Warning。

以上~
没什么难度,倒是用QT做上位机用了好几天……

猜你喜欢

转载自blog.csdn.net/sunhaobo1996/article/details/79248098