日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]程序收尾總想著以后更新的方便性,采用在應用編程(In Application Programming),通過Bootload引導單片機自己往程序存儲器里寫數(shù)據(jù)或修改程序。下面簡介STM32F030的IAP方法。不同于STM32F1系列,F(xiàn)0沒有中斷向量偏移

程序收尾總想著以后更新的方便性,采用在應用編程(In Application Programming),通過Bootload引導單片機自己往程序存儲器里寫數(shù)據(jù)或修改程序。下面簡介STM32F030的IAP方法。不同于STM32F1系列,F(xiàn)0沒有中斷向量偏移寄存器。所以在APP程序的開頭要添加以下代碼。為什么這樣做??

可以看到函數(shù)用了for循環(huán)將矢量表拷貝到0 x20000000 SRAM的基地址,即將矢量表由Flash映射到了SRAM。所以在MDK里面設(shè)置Flash偏移地址的時候,同時要設(shè)置SRAM偏移地址。如下截圖

//APP程序開頭加入IAP_Set(void)函數(shù)


//Falshaddress

#defineAPPLICATION_ADDRESS((uint32_t)0x08001400)

//SRAMAddress0x020000C0

voidIAP_Set(void)

{

uint32_ti=0;

/*RelocatebysoftwarethevectortabletotheinternalSRAMat0x20000000***/

/*CopythevectortablefromtheFlash(mappedatthebaseoftheapplication

loadaddress0x08003000)tothebaseaddressoftheSRAMat0x20000000.*/

for(i=0;i<48;i++)

{

*((uint32_t*)(0x20000000+(i<<2)))=*(__IOuint32_t*)(APPLICATION_ADDRESS+(i<<2));

}

/*EnabletheSYSCFGperipheralclock*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

/*RemapSRAMat0x00000000*/

SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

}




有Target對話框可以看出APP程序有Flash地址0x8001400開始執(zhí)行。Sram數(shù)據(jù)則有0x20000c0出開始存儲。

說完APP代碼要處理事項,下面說一下IAP代碼編寫


/*Keeptheuserapplicationrunning*/

/*Testifusercodeisprogrammedstartingfromaddress"APPLICATION_ADDRESS"*/

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

{

/*Jumptouserapplication*/

JumpAddress=*(__IOuint32_t*)(APPLICATION_ADDRESS+4);

Jump_To_Application=(pFunction)JumpAddress;

/*Initializeuserapplication'sStackPointer*/

__set_MSP(*(__IOuint32_t*)APPLICATION_ADDRESS);

/*Jumptoapplication*/

Jump_To_Application();

}

程序更新完以后執(zhí)行以上跳轉(zhuǎn)函數(shù)即可執(zhí)行更新的APP代碼。關(guān)于如何通過IAP將代碼將APP代碼(bin文件)傳到單片機Flash,可以通過串口分包傳輸。因為F0Flash是1K為一頁所以這里我用的是1K緩存,即接收串口1K的數(shù)據(jù)量就執(zhí)行一次Flash寫操作,傳輸?shù)阶詈蟛粷M1K,填寫0XFF按照1K數(shù)據(jù)寫。寫Flash代碼如下


//存滿1K的數(shù)據(jù)寫入Flash

if(g_nFlashDataLen==FLASH_PAGE_SIZE)

{

#if(DEBUGIAP==1)

USART1_SendBytesProc(g_nFlashBuf,FLASH_PAGE_SIZE);

g_nSysCommTimerCtrl=0;

while(g_nSysCommTimerCtrl<200);//5ms

#else

//擦除待寫的Flash

FLASH_If_Erase(g_nFlashAddr);

loop1:

//寫入Flash

nFlashData=(u32)g_nFlashBuf;

if(FLASH_If_Write(&g_nFlashAddr,(u32*)nFlashData,(u16)g_nFlashDataLen/4)!=0)

{

if(nCount++<5)

gotoloop1;

}

//地址增加

g_nFlashAddr+=FLASH_PAGE_SIZE;

#endif

//清除g_nFlashDataLen計數(shù)

g_nFlashDataLen=0;

}

關(guān)于IAP如何接收串口的數(shù)據(jù),我用的是正點原子的XCOM V2.0串口調(diào)試助手通過協(xié)議傳輸每次傳輸128字節(jié)數(shù)據(jù),執(zhí)行的IAP串口數(shù)據(jù)接收。具體操作可在原子論壇搜索。再此留下參考鏈接:http://www.openedv.com/thread-40143-1-1.html http://www.openedv.com/thread-22994-1-1.html


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

最近本人在學習ARM7的遠程升級,在這里將自己的學習過程與大家分享,有錯誤的地方還請大家指出便于改正! ISP(In-System Programming)即“在系統(tǒng)可編程”,指電路板...

關(guān)鍵字: iap isp

寫在前面:三個周之前,我突然想寫一個遠程升級的程序。那個時候我只是大概知道IAP的意思是在應用編程,但怎么編,我還一無所知。我給自己定下一個個階段目標,從最基礎(chǔ)的代碼一點點寫起,解決一個又一個的問題。三個

關(guān)鍵字: iap keil mdk 遠程升級

STC89C51、52內(nèi)部都自帶有2K字節(jié)的EEPROM,54、55和58都自帶有16K字節(jié)的EEPROM,STC單片機是利用IAP技術(shù)實現(xiàn)的EEPROM,內(nèi)部Flash擦寫次數(shù)可達100,000 次以上,先來介紹下IS...

關(guān)鍵字: eeprom iap stc單片機

  之前說了stm32的iap編程,今天天氣真好,順手就來說說lpc1788的iap編程(沒看前面的請查看stm筆記下的內(nèi)容)  首先是flash的算法,lpc1768并沒有寄存器來讓我們操作flash,他內(nèi)置了iap的...

關(guān)鍵字: iap lpc1768 上位機

本文主要總結(jié)STM32F030_I2C的相關(guān)功能與源代碼分享。I2C(Inter-Integrated Circuit)總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。是微電子通信控制領(lǐng)域廣...

關(guān)鍵字: i2c stm32f030 配置說明

搞了一天才發(fā)現(xiàn) 在MDK設(shè)置選項中有個"linker"選項卡 ,需要在Project->Options->Linker中將UseMemoryLayoutfromTargetDialog前面...

關(guān)鍵字: iap STM32 在線更新程序

所謂IAP其實就相當于一個小小的bootloader 用來更新程序的很多產(chǎn)品基本都是程序做好后就直接在產(chǎn)線燒錄一次就OK了,但是,但是BUG有時候是無可避免的,經(jīng)常有產(chǎn)品裝好后又要重新拆外殼 取下板子重新上燒錄架燒的慘痛

關(guān)鍵字: iap STM32 使用關(guān)鍵點

最近涉及到STM32F0XX的IAP,找了很多相關(guān)資料,感覺不是特別清楚,所以綜合一些資料分享一下。剛開始做的時候以為很簡單,在程序中寫了個跳轉(zhuǎn)函數(shù)(跳轉(zhuǎn)到System Memory,并運行MCU自己的Bootloade...

關(guān)鍵字: cortex-m0 iap stm32f0xx

bootloader設(shè)置:static void check_boot_mode(void){uint32_t JumpAddress;void(*Jump_To_Application)(void);if (((*((...

關(guān)鍵字: stm32f030 代碼升級

1 前言客戶反饋在批量生產(chǎn)階段,發(fā)現(xiàn)部分產(chǎn)品的MCU的RTC在低溫(0℃)下工作不正常,但是在常溫下又是正常的,且其他正常的MCU的RTC在常溫與低溫下都是正常的。2 問題跟進與分析通過與客戶郵件溝通,了解到客戶使用的

關(guān)鍵字: rtc stm32f030 低溫
關(guān)閉