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管脚。从而实现工程上的串口烧写,还是很实用的。

 

posted @ 2020-02-02 21:56  hancathay  阅读(593)  评论(0)    收藏  举报