STM32的IAP在线升级的源码中的地址解读



1.ApplicationAddress的内容含义
    if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
        {
            SerialPutString("Execute user Program\r\n\n");
            //跳转至用户代码
            JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
            Jump_To_Application = (pFunction) JumpAddress;

            //初始化用户程序堆栈指针
            __set_MSP(*(__IO uint32_t*) ApplicationAddress);
            Jump_To_Application();
        }
解析:
     ApplicationAddress:APP程序起始地址,此处为  #define ApplicationAddress    0x8004000
     该地址处的内容(对应的值)通过在线仿真是:20000428。如图1:
     
     地址20000428含义,通过查APP程序的.map文件,如图2:
   
     20000000:SRM运行内存起始处
      20000428  =  20000000+4+20+400(1024)
     
2. 0X20001000含义
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));
IAP将接收到的APP内容放到运行内存0X20001000处,0x1000(4kb)空间大小的内存留给IAP程序自身用。

3. (ApplicationAddress+4)地址对应内容的含义
    if(((*(vu32*)   (ApplicationAddress+4) )    &0xFF000000)==0x08000000)
{ 
    iap_load_app(FLASH_APP1_ADDR);
}
解析:
((*(vu32*)   ( ApplicationAddress +4) ) <<==========>>*( 0x8004000+4 )
其内容对应的值为08004100如图1所示。
地址08004101的含义是复位中断处理函数入口,通过查APP程序的.map文件,如图3:


4.地址0X20001000+4内容含义
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{ 
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码   
        }
解析:
0X20001000:APP运行内存的起始地址
0x20001000+4的内容:是FLASH内存物理地址。如图4.
 

1.ApplicationAddress的内容含义
    if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
        {
            SerialPutString("Execute user Program\r\n\n");
            //跳转至用户代码
            JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
            Jump_To_Application = (pFunction) JumpAddress;

            //初始化用户程序堆栈指针
            __set_MSP(*(__IO uint32_t*) ApplicationAddress);
            Jump_To_Application();
        }
解析:
     ApplicationAddress:APP程序起始地址,此处为  #define ApplicationAddress    0x8004000
     该地址处的内容(对应的值)通过在线仿真是:20000428。如图1:
     
     地址20000428含义,通过查APP程序的.map文件,如图2:
   
     20000000:SRM运行内存起始处
      20000428  =  20000000+4+20+400(1024)
     
2. 0X20001000含义
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));
IAP将接收到的APP内容放到运行内存0X20001000处,0x1000(4kb)空间大小的内存留给IAP程序自身用。

3. (ApplicationAddress+4)地址对应内容的含义
    if(((*(vu32*)   (ApplicationAddress+4) )    &0xFF000000)==0x08000000)
{ 
    iap_load_app(FLASH_APP1_ADDR);
}
解析:
((*(vu32*)   ( ApplicationAddress +4) ) <<==========>>*( 0x8004000+4 )
其内容对应的值为08004100如图1所示。
地址08004101的含义是复位中断处理函数入口,通过查APP程序的.map文件,如图3:


4.地址0X20001000+4内容含义
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{ 
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码   
        }
解析:
0X20001000:APP运行内存的起始地址
0x20001000+4的内容:是FLASH内存物理地址。如图4.
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32在线升级IAP上位机源码是用于实现STM32单片机在线固件升级的上位机程序的源代码。该源码主要包括以下功能实现: 1. 界面设计:上位机界面通过图形用户界面(GUI)实现,可以通过按钮、菜单等控件与用户进行交互。可以显示STM32单片机的基本信息,如固件版本、设备状态等。 2. 串口通信:使用串口通信实现上位机与STM32单片机之间的数据传输。上位机发送指令给STM32单片机,例如请求升级固件、传输数据等。同时,上位机也接收STM32单片机发送的信息,如升级进度、错误提示等。 3. 文件管理:上位机可以读取本地固件文件,将其发送给STM32单片机进行升级。同时,上位机还可以将STM32单片机当前固件保存为文件,用于备份或以后的使用。 4. 升级流程控制:上位机需要实现升级流程的控制,包括固件校验、数据传输、固件写入等步骤。同时,上位机还需要监测升级过程的异常情况,并进行相应的处理,如重新发送数据、重启设备等。 5. 实时监测:上位机可以实时监测STM32单片机的升级进度,并根据进度显示当前状态,如传输速度、已传输数据大小等。 总的来说,STM32在线升级IAP上位机源码实现了通过上位机与STM32单片机进行串口通信,实现固件的在线升级功能。通过图形界面操作,用户可以方便地进行固件升级,并实时监测升级过程。这样,可以提高STM32单片机固件的更新和维护效率,同时也方便了用户对设备的管理和升级

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值