亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于STM32的充電樁系統(tǒng)遠(yuǎn)程升級(jí)設(shè)計(jì)

        2017-09-05 11:57:58張思聰胡社教
        軟件導(dǎo)刊 2017年7期
        關(guān)鍵詞:充電樁

        張思聰+胡社教

        摘 要:隨著嵌入式設(shè)備的廣泛應(yīng)用,對(duì)嵌入式設(shè)備程序升級(jí)的要求也越來(lái)越高。在探討應(yīng)用編程(IAP)原理的基礎(chǔ)上,設(shè)計(jì)一種基于STM32的充電樁系統(tǒng)遠(yuǎn)程升級(jí)方案。系統(tǒng)闡述了在應(yīng)用中編程的技術(shù)原理以及升級(jí)流程,并通過(guò)TFTP方案實(shí)現(xiàn)了充電樁固件遠(yuǎn)程升級(jí)。實(shí)際應(yīng)用表明,該方案具有較高的應(yīng)用價(jià)值和推廣價(jià)值。

        關(guān)鍵詞:STM32;Flash;在應(yīng)用中編程(IAP);遠(yuǎn)程升級(jí);充電樁

        DOIDOI:10.11907/rjdk.162697

        中圖分類(lèi)號(hào):TP319

        文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2017)007-0077-04

        0 引言

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

        1 設(shè)計(jì)原理

        1.1 STM32存儲(chǔ)原理

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

        1.2 IAP原理

        IAP(In-Application Programming)是指在用戶(hù)程序運(yùn)行過(guò)程中對(duì)其Flash區(qū)域進(jìn)行程序燒寫(xiě)[4],燒寫(xiě)完成后,運(yùn)行新的程序,完成升級(jí)。要實(shí)現(xiàn)IAP功能,需要將項(xiàng)目代碼分成兩部分進(jìn)行設(shè)計(jì)。第一部分稱(chēng)為裝載區(qū),即Bootload區(qū),這一區(qū)域程序主要用來(lái)判斷設(shè)備是否需要進(jìn)行用戶(hù)程序升級(jí)并進(jìn)行相應(yīng)的跳轉(zhuǎn),裝載區(qū)代碼必須從Flash首地址開(kāi)始燒寫(xiě)。第二部分稱(chēng)為用戶(hù)區(qū),即App區(qū),這一區(qū)域用來(lái)存放真正的功能代碼。兩部分代碼分別存儲(chǔ)在Flash的不同地址上,設(shè)備上電以后系統(tǒng)首先執(zhí)行裝載區(qū)程序,并根據(jù)是否需要升級(jí)跳轉(zhuǎn)執(zhí)行升級(jí)代碼或者用戶(hù)代碼。在實(shí)際設(shè)計(jì)過(guò)程中,可以設(shè)計(jì)多個(gè)App區(qū),以防止在升級(jí)失敗時(shí)系統(tǒng)可以運(yùn)行之前的程序。

        2 IAP的實(shí)現(xiàn)

        2.1 裝載程序

        裝載程序是IAP實(shí)現(xiàn)過(guò)程中最重要的一步,在進(jìn)行裝載程序設(shè)計(jì)時(shí),需要保證邏輯清晰、代碼簡(jiǎn)明。當(dāng)設(shè)備上電開(kāi)始運(yùn)行時(shí),系統(tǒng)從Flash的首地址即0x8000000開(kāi)始執(zhí)行裝載程序。首先完成的是STM32的初始化工作,包括堆棧和內(nèi)核的初始化。接著讀取存儲(chǔ)器中的用戶(hù)升級(jí)標(biāo)志位[5],若標(biāo)志位為0x55,則說(shuō)明沒(méi)有升級(jí)請(qǐng)求,程序跳轉(zhuǎn)執(zhí)行用戶(hù)區(qū)代碼;若標(biāo)志位為0xAA,說(shuō)明有升級(jí)請(qǐng)求,需要對(duì)用戶(hù)程序進(jìn)行更新,接下來(lái)要對(duì)時(shí)鐘和外設(shè)進(jìn)行相應(yīng)的初始化,并在主循環(huán)中等待用戶(hù)程序文件寫(xiě)入FLash的用戶(hù)程序區(qū),接受完成后將用戶(hù)升級(jí)標(biāo)志位置為0x55,同時(shí)執(zhí)行軟件復(fù)位。整個(gè)裝載程序的流程如圖1所示。

        要保證裝載程序能夠正常運(yùn)行,需注意兩個(gè)方面:一是在跳轉(zhuǎn)執(zhí)行用戶(hù)程序時(shí),要將程序指針重定向并指向程序用戶(hù)程序起始地址,堆棧指針指向用戶(hù)堆棧的起始地址;二是在將用戶(hù)程序文件寫(xiě)入Flash之前需要對(duì)Flash進(jìn)行解鎖并擦除當(dāng)前Flash區(qū)域中的代碼。

        2.1.1 跳轉(zhuǎn)實(shí)現(xiàn)

        STM32內(nèi)部通過(guò)中斷向量表來(lái)響應(yīng)中斷,程序正常啟動(dòng)時(shí),將首先從中斷向量表中取出復(fù)位中斷向量執(zhí)行復(fù)位中斷程序完成啟動(dòng)。中斷向量表的起始地址是0x80000004[6],當(dāng)有中斷來(lái)臨時(shí),STM32內(nèi)部硬件機(jī)制會(huì)將PC指針強(qiáng)制指向中斷向量表處,并根據(jù)中斷源取出對(duì)應(yīng)中斷向量執(zhí)行中斷服務(wù)程序。加入IAP以后,如果沒(méi)有升級(jí)請(qǐng)求,程序需跳轉(zhuǎn)執(zhí)行用戶(hù)代碼,啟動(dòng)流程如圖2所示。

        (1)STM32復(fù)位后,從0x80000004取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,在執(zhí)行完中斷復(fù)位程序之后跳轉(zhuǎn)到IAP的main函數(shù)當(dāng)中。

        (2)在執(zhí)行完IAP以后(如果需要新的用戶(hù)代碼寫(xiě)入Flash或者沒(méi)有更新直接跳轉(zhuǎn),用戶(hù)代碼的復(fù)位中斷向量起始地址應(yīng)為0x80000004+N+M)跳轉(zhuǎn)至用戶(hù)程序的復(fù)位中斷向量表。

        (3)取出用戶(hù)程序的復(fù)位中斷向量地址,并跳轉(zhuǎn)執(zhí)行新程序的復(fù)位中斷服務(wù)程序,隨后跳轉(zhuǎn)至新程序的main函數(shù)。

        (4)在main函數(shù)死循環(huán)(while(1))中,如果有中斷請(qǐng)求,應(yīng)注意在Flash上有兩個(gè)中斷向量表,PC指針被強(qiáng)制跳轉(zhuǎn)到地址0x80000004中斷向量地址處,而不是用戶(hù)程序的中斷向量表。

        (5)程序再根據(jù)設(shè)置的中斷向量偏移量,跳轉(zhuǎn)到對(duì)應(yīng)中斷源的用戶(hù)中斷服務(wù)程序中。

        (6)執(zhí)行完中斷服務(wù)程序后,程序返回main函數(shù)繼續(xù)執(zhí)行。跳轉(zhuǎn)部分的代碼如下:

        //定義pFunction為函數(shù)指針數(shù)據(jù)類(lèi)型

        typedef void (*pFunction)(void);

        //定義Jump_To_Application為函數(shù)指針

        pFunction Jump_To_Application;

        //定義一個(gè)32位的跳轉(zhuǎn)地址

        uint32_t JumpAddress;

        //取出存儲(chǔ)器中的升級(jí)標(biāo)志位

        Flag=Rx1_Buffer[0];

        //判斷是否需要升級(jí)

        If(Flag==0x55)

        {

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

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

        {

        //取復(fù)位地址

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

        //強(qiáng)制轉(zhuǎn)化為函數(shù)指針

        Jump_To_Application = (pFunction)JumpAddress;

        //將用戶(hù)代碼的棧頂?shù)刂吩O(shè)為棧頂指針

        _set_MSP(*(_IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS);

        //設(shè)置程序指針為復(fù)位地址

        Jump_To_Application();

        }

        }

        2.1.2 Flash編程

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

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

        FLASH_If_Init();

        //擦除從USER_FLASH_FIRST_PAGE_ADDRESS開(kāi)始的指定扇區(qū)

        FLASH_If_Erase(USER_FLASH_FIRST_PAGE_ADDRESS);

        //從Flash_Write_Address地址開(kāi)始將數(shù)據(jù)寫(xiě)入扇區(qū),數(shù)據(jù)為data_buffer,寫(xiě)入的長(zhǎng)度為count

        FLASH_If_Write(&Flash_Write_Address, data_buffer ,count)

        2.2 用戶(hù)程序

        用戶(hù)程序是一套完整的可以獨(dú)立運(yùn)行的程序,它除了實(shí)現(xiàn)特定的目標(biāo)功能外,還要求能夠接受升級(jí)指令并且跳轉(zhuǎn)至裝載程序[9]。從圖2可以看出,在IAP過(guò)程結(jié)束后,F(xiàn)lash上存儲(chǔ)了包括裝載程序和用戶(hù)程序在內(nèi)的兩張“中斷向量表”,即有兩個(gè)中斷向量起始地址。在用戶(hù)程序正常運(yùn)行過(guò)程中,如果有中斷請(qǐng)求,PC指針被強(qiáng)制跳轉(zhuǎn)到地址0x80000004中斷向量地址處,而不是用戶(hù)程序的中斷向量表,這就造成了中斷向量表的起始地址和用戶(hù)程序的中斷處理程序之間出現(xiàn)了偏移量。因此,需要對(duì)用戶(hù)程序的中斷向量偏移量進(jìn)行重定向,即配置向量表偏移量寄存器[10]。用戶(hù)程序中可以通過(guò)以下代碼對(duì)中斷向量偏移量進(jìn)行設(shè)置:

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

        Void NVIC_SetVectorTable(u32_t VectTab, u32_t Offset)

        用戶(hù)程序在初始化過(guò)程中完成中斷向量偏移量的重定向,然后執(zhí)行相應(yīng)的功能。在主函數(shù)運(yùn)行過(guò)程中利用中斷或者輪詢(xún)接收遠(yuǎn)程升級(jí)指令,在接收到遠(yuǎn)程升級(jí)指令后,用戶(hù)程序會(huì)根據(jù)自身工作狀態(tài)選擇是否進(jìn)行升級(jí),若狀態(tài)允許,則改變升級(jí)標(biāo)志位并寫(xiě)入存儲(chǔ)器,同時(shí)進(jìn)行軟件復(fù)位,使系統(tǒng)開(kāi)始執(zhí)行裝載程序。整個(gè)用戶(hù)程序流程圖如圖3所示。

        3 實(shí)際應(yīng)用

        在實(shí)際應(yīng)用中,采用一種基于TFTP(簡(jiǎn)單文件傳輸協(xié)議)的IAP方案,它廣泛應(yīng)用于嵌入式應(yīng)用當(dāng)中并且通過(guò)以太網(wǎng)實(shí)現(xiàn)對(duì)充電樁的遠(yuǎn)程升級(jí)。這種升級(jí)方案運(yùn)行在Lwip協(xié)議棧上,Lwip協(xié)議棧是瑞典計(jì)算機(jī)科學(xué)院開(kāi)發(fā)的TCP/IP協(xié)議套件的一種輕量級(jí)實(shí)現(xiàn),減少了內(nèi)存使用率和代碼大小,適合資源有限的嵌入式系統(tǒng)。

        簡(jiǎn)單文件傳輸協(xié)議(TFTP)是工作在UDP傳輸層上的一種簡(jiǎn)單的文件傳輸協(xié)議。它基于客戶(hù)端/服務(wù)器架構(gòu)體系,文件傳輸是從TFTP客戶(hù)端發(fā)起的,TFTP客戶(hù)端向TFTP服務(wù)器發(fā)送讀或?qū)懻?qǐng)求。當(dāng)服務(wù)器確認(rèn)請(qǐng)求以后,文件數(shù)據(jù)傳輸開(kāi)始,數(shù)據(jù)按照固定大小的數(shù)據(jù)塊發(fā)送,一般是512字節(jié)的數(shù)據(jù)塊。必須在每個(gè)傳輸?shù)臄?shù)據(jù)塊被接收端響應(yīng)以后,發(fā)送端才能發(fā)送下一個(gè)數(shù)據(jù)塊,這種回應(yīng)機(jī)制是通過(guò)隨每個(gè)數(shù)據(jù)塊一起發(fā)送的數(shù)據(jù)塊編號(hào)來(lái)實(shí)現(xiàn)的。當(dāng)檢測(cè)到接收的數(shù)據(jù)塊大小小于固定數(shù)據(jù)塊大小時(shí),表示文件傳輸結(jié)束。TFTP包格式如圖4所示。

        TFTP操作碼如表2所示。

        在對(duì)充電樁的遠(yuǎn)程升級(jí)過(guò)程中,充電樁作為T(mén)FTP服務(wù)器,接受PC客戶(hù)端發(fā)來(lái)的寫(xiě)請(qǐng)求。服務(wù)器將接收到的數(shù)據(jù)寫(xiě)入STM32的用戶(hù)Flash區(qū),當(dāng)接收到的數(shù)據(jù)塊小于512個(gè)字節(jié)時(shí),可以判斷文件傳輸結(jié)束,此時(shí)修改升級(jí)標(biāo)志位并重啟MCU完成升級(jí)過(guò)程。使用TFTP實(shí)現(xiàn)IAP操作的流程圖如圖5所示。

        4 結(jié)語(yǔ)

        本文設(shè)計(jì)并實(shí)現(xiàn)了基于STM32控制器的充電樁遠(yuǎn)程升級(jí)系統(tǒng),介紹了STM32的存儲(chǔ)原理、應(yīng)用編程(IAP)原理以及IAP實(shí)現(xiàn)過(guò)程中的重要技術(shù),實(shí)現(xiàn)了基于TFTP協(xié)議的遠(yuǎn)程升級(jí)。通過(guò)以太網(wǎng)進(jìn)行遠(yuǎn)程升級(jí)與傳統(tǒng)嵌入式設(shè)備的程序升級(jí)方式相比具有較大的優(yōu)勢(shì),能有效節(jié)約時(shí)間,降低人員成本,提高系統(tǒng)的可擴(kuò)展性和可維護(hù)性,具有較高的推廣價(jià)值。

        參考文獻(xiàn):

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

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

        [3]黃智偉,王兵,朱衛(wèi)華.STM32F32位ARM微控制器應(yīng)用設(shè)計(jì)與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2012:3-4.

        [4]姜曉梅,李祥和,任朝榮,等.基于A(yíng)RM的在線(xiàn)及遠(yuǎn)程升級(jí)技術(shù)[J].計(jì)算機(jī)應(yīng)用,2008(2):519-521.

        [5]闕凡博.基于stm32的程序遠(yuǎn)程升級(jí)設(shè)計(jì)[J].儀器儀表用戶(hù),2013(5):90-92.

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

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

        [8]孫偉,郭寶亮,陳龍.便攜式水聽(tīng)器測(cè)試儀的研究與實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),2011,32(2):375-380.

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

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

        猜你喜歡
        充電樁
        基于云計(jì)算的智能充電樁管理系統(tǒng)的研究
        基于納什均衡的充電樁建設(shè)博弈分析
        充電樁發(fā)展現(xiàn)狀及問(wèn)題對(duì)策研究
        淺談充電樁接入電網(wǎng)后的影響
        青青青爽在线视频免费播放| 国产精品久久无码不卡黑寡妇| 无码吃奶揉捏奶头高潮视频| 亚洲综合国产精品一区二区| 亚洲av综合色区无码另类小说| 人妻少妇精品无码专区二区| 久久永久免费视频| 中文字幕在线一区乱码| 国产精品日韩av一区二区三区| 亚洲国产精品无码久久| 亚洲丁香五月激情综合| av天堂线上| 国产一区二区三区口爆在线| 成人免费看aa片| 伊人久久综合精品无码av专区| 丰满熟妇人妻av无码区| 国产区一区二区三区性色| 国产精品videossex久久发布| 国产真人无码作爱视频免费| 婷婷一区二区三区在线| 日本女优免费一区二区三区| 久久综合香蕉国产蜜臀av| 天美传媒精品1区2区3区| 精品久久久久久午夜| 国产91在线播放九色快色 | 国产亚洲精久久久久久无码| 国产亚洲日韩AV在线播放不卡| 精品中文字幕在线不卡| 人人妻一区二区三区| 欧洲综合色| 色av色婷婷18人妻久久久| 国产精品久久久久久妇女| 使劲快高潮了国语对白在线| 2021精品综合久久久久| 一级一片内射视频网址| 精品无码av一区二区三区| 欧美日韩国产成人高清视| 免费看男女啪啪的视频网站| 日产乱码一二三区别免费l| 无码精品国产va在线观看| 国产成社区在线视频观看|