999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于STM32的充電樁系統遠程升級設計

2017-09-05 11:57:58張思聰胡社教
軟件導刊 2017年7期

張思聰+胡社教

摘 要:隨著嵌入式設備的廣泛應用,對嵌入式設備程序升級的要求也越來越高。在探討應用編程(IAP)原理的基礎上,設計一種基于STM32的充電樁系統遠程升級方案。系統闡述了在應用中編程的技術原理以及升級流程,并通過TFTP方案實現了充電樁固件遠程升級。實際應用表明,該方案具有較高的應用價值和推廣價值。

關鍵詞:STM32;Flash;在應用中編程(IAP);遠程升級;充電樁

DOIDOI:10.11907/rjdk.162697

中圖分類號:TP319

文獻標識碼:A 文章編號:1672-7800(2017)007-0077-04

0 引言

隨著新能源電動汽車的推廣與普及,電動汽車配套設施充電樁正在蓬勃發展。當前充電樁的布設往往采取建立充電站的形式,各充電站之間距離遠,充電樁數量多。充電樁設備投入使用后,由于程序本身的漏洞或者用戶新的需求,需要對樁程序進行升級。傳統的升級方法是相關技術人員到現場用代碼燒寫工具對設備進行升級,工作量大,升級過程復雜。本文提出的基于STM32的充電樁遠程升級方案,可以讓用戶通過以太網實現對目標充電樁系統程序的實時更新,提高充電樁系統的可拓展性和可維護性。

1 設計原理

1.1 STM32存儲原理

STM32是一種32位微處理器[1],共有4GB線性地址空間,分為8個存儲塊,每個存儲塊512MB。第一塊為代碼區,用來存儲程序的代碼文件以及常量,主要分為嵌入式閃存、系統存儲區、選項字節等。第二塊內部包含嵌入式SRAM區等,程序的變量以及堆棧存儲在這一塊。不同型號的STM32芯片,閃存存儲器(Flash)容量也不同[2],最小的只有16K字節,最多的能達到1 024K字節[3]。本方案采用的STM32F207微控制器具有1 024K的Flash,起始地址為0x80000000,終止地址為0x080FFFFF,總共分為12個扇區,其中0~3號扇區大小為16K,4號扇區大小為64K,5~11號扇區大小為128K,Flash模塊組織如表1所示。

1.2 IAP原理

IAP(In-Application Programming)是指在用戶程序運行過程中對其Flash區域進行程序燒寫[4],燒寫完成后,運行新的程序,完成升級。要實現IAP功能,需要將項目代碼分成兩部分進行設計。第一部分稱為裝載區,即Bootload區,這一區域程序主要用來判斷設備是否需要進行用戶程序升級并進行相應的跳轉,裝載區代碼必須從Flash首地址開始燒寫。第二部分稱為用戶區,即App區,這一區域用來存放真正的功能代碼。兩部分代碼分別存儲在Flash的不同地址上,設備上電以后系統首先執行裝載區程序,并根據是否需要升級跳轉執行升級代碼或者用戶代碼。在實際設計過程中,可以設計多個App區,以防止在升級失敗時系統可以運行之前的程序。

2 IAP的實現

2.1 裝載程序

裝載程序是IAP實現過程中最重要的一步,在進行裝載程序設計時,需要保證邏輯清晰、代碼簡明。當設備上電開始運行時,系統從Flash的首地址即0x8000000開始執行裝載程序。首先完成的是STM32的初始化工作,包括堆棧和內核的初始化。接著讀取存儲器中的用戶升級標志位[5],若標志位為0x55,則說明沒有升級請求,程序跳轉執行用戶區代碼;若標志位為0xAA,說明有升級請求,需要對用戶程序進行更新,接下來要對時鐘和外設進行相應的初始化,并在主循環中等待用戶程序文件寫入FLash的用戶程序區,接受完成后將用戶升級標志位置為0x55,同時執行軟件復位。整個裝載程序的流程如圖1所示。

要保證裝載程序能夠正常運行,需注意兩個方面:一是在跳轉執行用戶程序時,要將程序指針重定向并指向程序用戶程序起始地址,堆棧指針指向用戶堆棧的起始地址;二是在將用戶程序文件寫入Flash之前需要對Flash進行解鎖并擦除當前Flash區域中的代碼。

2.1.1 跳轉實現

STM32內部通過中斷向量表來響應中斷,程序正常啟動時,將首先從中斷向量表中取出復位中斷向量執行復位中斷程序完成啟動。中斷向量表的起始地址是0x80000004[6],當有中斷來臨時,STM32內部硬件機制會將PC指針強制指向中斷向量表處,并根據中斷源取出對應中斷向量執行中斷服務程序。加入IAP以后,如果沒有升級請求,程序需跳轉執行用戶代碼,啟動流程如圖2所示。

(1)STM32復位后,從0x80000004取出復位中斷向量的地址,并跳轉到復位中斷服務程序,在執行完中斷復位程序之后跳轉到IAP的main函數當中。

(2)在執行完IAP以后(如果需要新的用戶代碼寫入Flash或者沒有更新直接跳轉,用戶代碼的復位中斷向量起始地址應為0x80000004+N+M)跳轉至用戶程序的復位中斷向量表。

(3)取出用戶程序的復位中斷向量地址,并跳轉執行新程序的復位中斷服務程序,隨后跳轉至新程序的main函數。

(4)在main函數死循環(while(1))中,如果有中斷請求,應注意在Flash上有兩個中斷向量表,PC指針被強制跳轉到地址0x80000004中斷向量地址處,而不是用戶程序的中斷向量表。

(5)程序再根據設置的中斷向量偏移量,跳轉到對應中斷源的用戶中斷服務程序中。

(6)執行完中斷服務程序后,程序返回main函數繼續執行。跳轉部分的代碼如下:

//定義pFunction為函數指針數據類型

typedef void (*pFunction)(void);

//定義Jump_To_Application為函數指針

pFunction Jump_To_Application;

//定義一個32位的跳轉地址

uint32_t JumpAddress;

//取出存儲器中的升級標志位

Flag=Rx1_Buffer[0];

//判斷是否需要升級

If(Flag==0x55)

{

//判斷用戶的棧定地址值是否在,0x20000000~0x20002000之間

if(((*(__IOuint32_t*)USER_FLASH_FIRST_PAGE_ADDRESS) & 0x2FFE0000 ) == 0x20000000)

{

//取復位地址

JumpAddres = *(__IO uint32_t*) (USER_FLASH_FIRST_PAGE_ADDRESS + 4);

//強制轉化為函數指針

Jump_To_Application = (pFunction)JumpAddress;

//將用戶代碼的棧頂地址設為棧頂指針

_set_MSP(*(_IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS);

//設置程序指針為復位地址

Jump_To_Application();

}

}

2.1.2 Flash編程

在進行IAP過程中,接收到的數據必須寫入STM32的Flash中。在對STM32的Flash進行擦除或者寫操作時,必須先打開內部的RC振蕩器(HSI),然后對Flash編程控制器進行解鎖,再對需要寫入數據的Flash扇區進行擦除操作,最后進行寫操作。需要注意的是,在寫操作完成后必須對Flash編程控制器進行鎖定[7-8]。具體實現Flash編程代碼如下:

//初始化Flash,包括打開RC振蕩器和解鎖Flash編程控制器

FLASH_If_Init();

//擦除從USER_FLASH_FIRST_PAGE_ADDRESS開始的指定扇區

FLASH_If_Erase(USER_FLASH_FIRST_PAGE_ADDRESS);

//從Flash_Write_Address地址開始將數據寫入扇區,數據為data_buffer,寫入的長度為count

FLASH_If_Write(&Flash_Write_Address, data_buffer ,count)

2.2 用戶程序

用戶程序是一套完整的可以獨立運行的程序,它除了實現特定的目標功能外,還要求能夠接受升級指令并且跳轉至裝載程序[9]。從圖2可以看出,在IAP過程結束后,Flash上存儲了包括裝載程序和用戶程序在內的兩張“中斷向量表”,即有兩個中斷向量起始地址。在用戶程序正常運行過程中,如果有中斷請求,PC指針被強制跳轉到地址0x80000004中斷向量地址處,而不是用戶程序的中斷向量表,這就造成了中斷向量表的起始地址和用戶程序的中斷處理程序之間出現了偏移量。因此,需要對用戶程序的中斷向量偏移量進行重定向,即配置向量表偏移量寄存器[10]。用戶程序中可以通過以下代碼對中斷向量偏移量進行設置:

//VectTab 起始地址,Offset 偏移量

Void NVIC_SetVectorTable(u32_t VectTab, u32_t Offset)

用戶程序在初始化過程中完成中斷向量偏移量的重定向,然后執行相應的功能。在主函數運行過程中利用中斷或者輪詢接收遠程升級指令,在接收到遠程升級指令后,用戶程序會根據自身工作狀態選擇是否進行升級,若狀態允許,則改變升級標志位并寫入存儲器,同時進行軟件復位,使系統開始執行裝載程序。整個用戶程序流程圖如圖3所示。

3 實際應用

在實際應用中,采用一種基于TFTP(簡單文件傳輸協議)的IAP方案,它廣泛應用于嵌入式應用當中并且通過以太網實現對充電樁的遠程升級。這種升級方案運行在Lwip協議棧上,Lwip協議棧是瑞典計算機科學院開發的TCP/IP協議套件的一種輕量級實現,減少了內存使用率和代碼大小,適合資源有限的嵌入式系統。

簡單文件傳輸協議(TFTP)是工作在UDP傳輸層上的一種簡單的文件傳輸協議。它基于客戶端/服務器架構體系,文件傳輸是從TFTP客戶端發起的,TFTP客戶端向TFTP服務器發送讀或寫請求。當服務器確認請求以后,文件數據傳輸開始,數據按照固定大小的數據塊發送,一般是512字節的數據塊。必須在每個傳輸的數據塊被接收端響應以后,發送端才能發送下一個數據塊,這種回應機制是通過隨每個數據塊一起發送的數據塊編號來實現的。當檢測到接收的數據塊大小小于固定數據塊大小時,表示文件傳輸結束。TFTP包格式如圖4所示。

TFTP操作碼如表2所示。

在對充電樁的遠程升級過程中,充電樁作為TFTP服務器,接受PC客戶端發來的寫請求。服務器將接收到的數據寫入STM32的用戶Flash區,當接收到的數據塊小于512個字節時,可以判斷文件傳輸結束,此時修改升級標志位并重啟MCU完成升級過程。使用TFTP實現IAP操作的流程圖如圖5所示。

4 結語

本文設計并實現了基于STM32控制器的充電樁遠程升級系統,介紹了STM32的存儲原理、應用編程(IAP)原理以及IAP實現過程中的重要技術,實現了基于TFTP協議的遠程升級。通過以太網進行遠程升級與傳統嵌入式設備的程序升級方式相比具有較大的優勢,能有效節約時間,降低人員成本,提高系統的可擴展性和可維護性,具有較高的推廣價值。

參考文獻:

[1]Joseph Yiu.宋巖譯.ARM Cortex-M3權威指南[M]. 北京:北京航空航天大學出版社,2009.

[2]意法半導體(中國)投資有限公司.STM32參考手冊[EB/OL].www.stmcu.org,2009.

[3]黃智偉,王兵,朱衛華.STM32F32位ARM微控制器應用設計與實踐[M].北京:北京航空航天大學出版社,2012:3-4.

[4]姜曉梅,李祥和,任朝榮,等.基于ARM的在線及遠程升級技術[J].計算機應用,2008(2):519-521.

[5]闕凡博.基于stm32的程序遠程升級設計[J].儀器儀表用戶,2013(5):90-92.

[6]蒙博宇.STM32自學筆記[M].北京:北京航空航天大學出版社,2012:395-399.

[7]STM32F2x7 in application programming(IAP) over ethernet[Z].STMicroelectronics,2011.

[8]孫偉,郭寶亮,陳龍.便攜式水聽器測試儀的研究與實現[J].儀器儀表學報,2011,32(2):375-380.

[9]李興鶴,蔡亮,宋吉波,等.STM32用戶基于IAP的程序更新技術[J].單片機與嵌入式系統應用,2012(1):74-75.

[10]張巖松,葛俊鋒,葉林,等.基于STM32的程序遠程升級設計與實現[J].電子設計工程,2016(1):131-134.

主站蜘蛛池模板: 成人免费网站久久久| 亚洲区一区| 亚洲中文字幕无码爆乳| 伊人激情久久综合中文字幕| 五月婷婷综合在线视频| 久久伊伊香蕉综合精品| 免费可以看的无遮挡av无码 | 全色黄大色大片免费久久老太| 911亚洲精品| 久久无码高潮喷水| 亚洲一区色| 自偷自拍三级全三级视频| 国产97视频在线| 97成人在线视频| 国产精品人成在线播放| 青青草原国产一区二区| 免费日韩在线视频| 亚洲视屏在线观看| 精品色综合| 日韩欧美国产精品| 欧美成人亚洲综合精品欧美激情| 亚洲九九视频| 99re这里只有国产中文精品国产精品 | 免费福利视频网站| 日韩第九页| 国产SUV精品一区二区| 久久99蜜桃精品久久久久小说| 亚洲一级毛片在线观播放| 国产成人夜色91| 亚洲有无码中文网| 色视频久久| 欧美成人综合在线| 亚洲无码视频一区二区三区| 54pao国产成人免费视频| 99热这里只有精品2| 青青草国产精品久久久久| 韩日免费小视频| 欧美在线网| 国产特级毛片aaaaaa| 国产啪在线| 无码一区18禁| 欧美精品v欧洲精品| 91精品福利自产拍在线观看| 九九线精品视频在线观看| 毛片在线看网站| 国产成人综合网| 亚洲第一综合天堂另类专| 99re在线视频观看| 热伊人99re久久精品最新地| 黑人巨大精品欧美一区二区区| 精品乱码久久久久久久| 日韩av在线直播| 婷婷久久综合九色综合88| 国产成人在线无码免费视频| 欧美在线一级片| 欧美激情福利| 天天视频在线91频| 国产69精品久久久久孕妇大杂乱| 国产精品乱偷免费视频| 亚洲第一在线播放| 六月婷婷激情综合| 三上悠亚一区二区| 欧美在线综合视频| 国产福利一区在线| 成人午夜视频网站| 久久精品女人天堂aaa| 不卡的在线视频免费观看| 免费高清a毛片| 国产成年无码AⅤ片在线| 日韩免费毛片| 国产性生大片免费观看性欧美| 欧美国产日产一区二区| 国产麻豆91网在线看| 中文字幕在线免费看| 2021天堂在线亚洲精品专区| 国产成人一二三| 91青青视频| 2021国产乱人伦在线播放| www.日韩三级| 日日摸夜夜爽无码| www.99精品视频在线播放| 国产精品手机在线播放|