STM32串口 IAP更新程序

参考文章见这里

需要两个程序,一个为bootloader程序,一个为app。在FLASH中的分布如下

1.bootloader

(1)开启串口1接收app的bin文件,接收到的文件数据既可以存u16数组,也可以存外部SRAM(正点原子例子就是存的SRAM)。

(2)按下KEY_UP,调用iap_write_appbin将接收到的文件数据写入FLASH。

(3).调用iap_load_app加载app程序。

(4)设置程序在FLASH中的开始地址和长度。

 主要代码

int main(void)
	{
	 delay_init();
	 LED_Init();
	 KEY_Init();
	 
	 uart_init(115200);
	 printf("Uart init");
		
	 u16 buff[12]={0};
	 STMFLASH_Read(FLASH_APP1_ADDR, buff,12);
	 if(buff[0]!=0xFFFF)//有app
	 {
		 iap_load_app(FLASH_APP1_ADDR);
	 }
		
	while(1)
	{
		u8 key=KEY_Scan(0);
		if(key==WKUP_PRES)
		{
			if(USART_RX_STA)
			{
				iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,USART_RX_STA);
				printf("固件更新完成!\r\n");			 
				
				iap_load_app(FLASH_APP1_ADDR);
				printf("开始执行FLASH用户代码!!\r\n");		
			}
		}
	}
 }

2.app

程序根据实际写就行。

(1)设置程序在FLASH中的开始地址和长度。

(2) 在main函数中设置中断向量表的偏移量

SCB->VTOR = FLASH_BASE | 0x10000;

(3)将*.axf文件转换为*.bin文件

D:\MDK5\ARM\ARMCC\bin\fromelf.exe  --bin -o  ..\OBJ\BEEP.bin ..\OBJ\BEEP.axf

 3.测试。

(1)将bootloader程序使用ST-LINK刷入stm32,并运行程序。

(2)使用串口工具SSCOM发送app.bin到stm32。 

3.按下KEY_UP实现app文件写入与加载。

猜你喜欢

转载自blog.csdn.net/zouxin_88/article/details/127427082