一、准备工作
1、找到官方IAP参考例程,是基于STM32F030的例程;
2、准备两块电路板,一块用于CAN-UART透传,另一块作为测试目标板。
二、CAN-UART透传
1、CAN波特率设为125K,UART波特率设为115200
2、CAN节点ID设为0x000
三、测试目标板BootLoader程序
1、基于官方例程进行修改
2、官方例程采用的是USART通信,通过STM32CubeMX配置好CAN后,修改几个函数,可实现CAN通信;
3、关于FLASH_PAGE_SIZE宏定义,由于采用是stm32f072xb.h,因此在stm32fxx_hal_flash_ex.h中定义的是0x800U,需要修改为0x400U
4、根据个人需求将逻辑进行了修改,通电后运行Bootloader程序,5s内没有收到升级指令,跳转到用户程序;
5、测试工具使用SecureCRT,发送*.bin文件的时候采用Ymodem协议;
6、对工程不优化,会占用16K的空间,因此Bootloader的空间预留20K,即用户程序起始地址改为0x08005000。
四、测试目标板用户程序
1、在程序最开始的地方需要对中断向量表重定义,由于F0xx没有SCB->VTOR这个寄存器,需要把中断向量表从Flash复制到SRAM中;
2、官方例程采用的是*((uint32_t*)(0x20000000 + (i << 2)))=*(__IO uint32_t*)(0x08005000 + (i<<2));改为VectorTable[i] = *(__IO uint32_t*)(0x08005000 + (i<<2));此处不作修改的话,会将全局已初始化的变量值给改掉(这个问题花了我一天来查),这两句话的作用是一样的,应该都可以用,但要注意第3条;
3、将IRAM1的Start改为0x200000C0,Size改为0x3F40,通过.s文件可以看到共有48个中断向量,占用192字节,因此对全局变量初始化值进行偏移,通过对比修改前后的map文件看到变化;
4、IROM1的Start改为0x8005000,Size改为0xB000。 |