STM32F4基于串口USART1的IAP功能学习
1. 硬石科技的IAP功能
1.1 bootloader采用swd进行下载,下载到FLASH 中0x0800 0000为起始地址的flash中;
1.2. app采用串口发送的方式进行下载,首先存放在ram中,bootloader程序初始化后会定义一个内存区域strAppBin,其定义为
struct STRUCT_IAP_RECIEVE
{
uint8_t ucDataBuf[APP_FLASH_LEN];
uint16_t usLength;
} strAppBin;
如果按键KEY1按下,则进行RAM到FLASH 的copy操作IAP_Write_App_Bin()函数;
1.3. app中设定的偏移量为 SCB->VTOR = FLASH_BASE | 0x10000;。这样如果按键KEY2按下,开始运行app程序后,则会从0x0801 0000 进行app的死循环;
程序的问题:
A. 发送的数据需要全部放入内存,因此占用内存比较大;在bootloader中有定义#define APP_FLASH_LEN 56320u 55kB=55*1024=56320;
B. 所有的长度应该采用宏定义的方式进行进行;
C. 缺乏校验环节;
2. stm32 自举程序的isp功能
2.1 最常见的是采用串口1进行isp,因为需要将boot1设定为1,因此不是特别的实用。工程上有flymcu的串口下载工具,利用ch340的两个端口来控制stm32的boot1和reset管脚。从而实现工程上的串口烧写,还是很实用的。

浙公网安备 33010602011771号