辽宁快乐12遗漏预测

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1942|回復: 0
打印 上一主題 下一主題

辽宁快乐12选5和值查询: 通過跳線方式實現STM32的IAP模式

[復制鏈接]

辽宁快乐12遗漏预测 www.kqsbiw.com.cn 624

主題

627

帖子

416

積分

專欄作家

Rank: 25Rank: 25Rank: 25Rank: 25Rank: 25Rank: 25Rank: 25

積分
416
跳轉到指定樓層
1#
發表于 2015-5-25 17:54:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
通過跳線方式實現STM32的IAP模式
IAP,即在應用編程。很多單片機都支持這個功能,STM32也不例外。在之前的FLASH模擬EEPROM實驗里面,我們學習了STM32的FLASH自編程,本章我們將結合FLASH自編程的知識,通過STM32的串口實現一個簡單的IAP功能。


IAP簡介   
IAP(In Application Programming)即在應用編程,IAP是用戶自己的程序在運行過程中對User Flash的部分區域進行燒寫,目的是為了在產品發布后可以方便地通過預留的通信口對產品中的固件程序進行更新升級。 通常實現IAP功能時,即用戶程序運行中作自身的更新操作,需要在設計固件程序時編寫兩個項目代碼,
第一個項目程序不執行正常的功能操作,而只是通過某種通信方式(如USB、USART)接收程序或數據,執行對第二部分代碼的更新;第二個項目代碼才是真正的功能代碼。這兩部分項目代碼都同時燒錄在User Flash中,當芯片上電后,首先是第一個項目代碼開始運行,它作如下操作:   
1)檢查是否需要對第二部分代碼進行更新   
2)如果不需要更新則轉到4)   
3)執行更新操作   
4)跳轉到第二部分代碼執行   
第一部分代碼必須通過其它手段,如JTAG或ISP燒入;第二部分代碼可以使用第一部分代碼IAP功能燒入,也可以和第一部分代碼一起燒入,以后需要程序更新是再通過第一部分IAP代碼更新。  
我們將第一個項目代碼稱之為Bootloader程序,第二個項目代碼稱之為APP程序,他們存放在STM32 FLASH的不同地址范圍,一般從最低地址區開始存放Bootloader,
緊跟其后的就是APP程序(注意,如果FLASH容量足夠,是可以設計很多APP程序的,本章我們只討論一個APP程序的情況)。這樣我們就是要實現2個程序:Bootloader和APP?!?br /> STM32的APP程序不僅可以放到FLASH里面運行,也可以放到SRAM里面運行,本章,我們將制作兩個APP,一個用于FLASH運行,一個用于SRAM運行。


STM32的內部閃存(FLASH)地址起始于0x08000000,一般情況下,程序文件就從此地址開始寫入。此外STM32是基于Cortex-M3內核的微控制器,其內部通過一張“中斷向量表”
來響應中斷,程序啟動后,將首先從“中斷向量表”取出復位中斷向量執行復位中斷程序完成啟動,而這張“中斷向量表”的起始地址是0x08000004,當中斷來臨,STM32的內部硬
件機制亦會自動將PC指針定位到“中斷向量表”處,并根據中斷源取出對應的中斷向量執行中斷服務程序。

在圖48.1.1中,STM32在復位后,先從0X08000004地址取出復位中斷向量的地址,并跳轉到復位中斷服務程序,如圖標號①所示;在復位中斷服務程序執行完之后,會跳轉到我們
的main函數,如圖標號②所示;而我們的main函數一般都是一個死循環,在main函數執行過程中,如果收到中斷請求(發生重中斷),此時STM32強制將PC指針指回中斷向量表處,如圖標號③所示;然后,根據中斷源進入相應的中斷服務程序,如圖標號④所示;在執行完中斷服務程序以后,程序再次返回main函數執行,如圖標號⑤所示。

當加入IAP程序之后,程序運行流程如圖48.1.2所示:


在圖48.1.2所示流程中,STM32復位后,還是從0X08000004地址取出復位中斷向量的地址,并跳轉到復位中斷服務程序,在運行完復位中斷服務程序之后跳轉到IAP的main函數,
如圖標號①所示,此部分同圖48.1.1一樣;在執行完IAP以后(即將新的APP代碼寫入STM32的FLASH,灰底部分。新程序的復位中斷向量起始地址為0X08000004+N+M),跳轉至
新寫入程序的復位向量表,取出新程序的復位中斷向量的地址,并跳轉執行新程序的復位中斷服務程序,隨后跳轉至新程序的main函數,如圖標號②和③所示,同樣main函數為一個
死循環,并且注意到此時STM32的FLASH,在不同位置上,共有兩個中斷向量表。
在main函數執行過程中,如果CPU得到一個中斷請求,PC指針仍強制跳轉到地址0X08000004中斷向量表處,而不是新程序的中斷向量表,如圖標號④所示;程序再根據我們設置
的中斷向量表偏移量,跳轉到對應中斷源新的中斷服務程序中,如圖標號⑤所示;在執行完中斷服務程序后,程序返回main函數繼續運行,如圖標號⑥所示。
通過以上兩個過程的分析,我們知道IAP程序必須滿足兩個要求:

1)新程序必須在IAP程序之后的某個偏移量為x的地址開始;
2)必須將新程序的中斷向量表相應的移動,移動的偏移量為x;
本章,我們有2個APP程序,一個為FLASH的APP,程序在FLASH中運行,另外一個位SRAM的APP,程序運行在SRAM中,圖48.1.2雖然是針對FLASHAPP來說的,但是在
SRAM里面運行的過程和FLASH基本一致,只是需要設置向量表的地址為SRAM的地址。
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|辽宁快乐12遗漏预测 ( 鄂ICP備09003585號-2 )

GMT+8, 2019-11-17 06:10 , Processed in 0.070143 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2018 Comsenz Inc.

快速回復 辽宁快乐12遗漏预测 返回列表