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

當前位置:首頁 > 單片機 > 單片機
[導讀]1 前言STSW-STM32116是ST官網(wǎng)基于標準庫的針對STM32F0的USART進口IAP示例程序,下載鏈接:http://www.stmcu.org/document/detail/index/id-213120工程原本是針對STM32F051,本文將介紹如何移植到STM32F070,并針對移

1 前言

STSW-STM32116是ST官網(wǎng)基于標準庫的針對STM32F0的USART進口IAP示例程序,下載鏈接:http://www.stmcu.org/document/detail/index/id-213120

工程原本是針對STM32F051,本文將介紹如何移植到STM32F070,并針對移植的過程中的問題逐個處理。

2 KEIL下移植

IAP程序一般分為兩個,一個是IAP,一個是APP,IAP存放在內(nèi)置FLASH的0x8000000的起始位置,而APP則存放在離這個位置一定距離的位置,這個距離一定是大于或等于IAP本身所占空間大小,本例子為0x8003000。

下載資源后,打開STM32F0xx_AN4065_FW_V1.0.0ProjectSTM32F0xx_IAP下的binary_template工程,這個就是APP工程,首先用KEIL打開,修改device為STM32F070,


并編譯,結(jié)果發(fā)現(xiàn)原始的公式是編譯不過的,如下錯誤信息:


linking...

.STM320518_EVALSTM320518_EVAL.axf:Error:L6971E:system_stm32f0xx.o(.data)typeRWincompatiblewithmain.o(.ARM.__AT_0x20000000)typeZIinerRW_IRAM1.

Notenoughinformationtolistimagesymbols.

Finished:1information,0warningand1errormessages.

".STM320518_EVALSTM320518_EVAL.axf"-1Error(s),0Warning(s).

Targetnotcreated.

BuildTimeElapsed:00:00:08

從字面上判斷為編譯system_stm32f0xx.c文件生成的目標文件system_stm32f0xx.o中的數(shù)據(jù)段(.data)內(nèi)的RW數(shù)據(jù)與main.o中的數(shù)據(jù)在地址0x20000000產(chǎn)生沖突。

仔細查看代碼,發(fā)現(xiàn)main函數(shù)之前這么一段:


#if(defined(__CC_ARM))

__IOuint32_tVectorTable[48]__attribute__((at(0x20000000)));

#elif(defined(__ICCARM__))

#pragmalocation=0x20000000

__no_init__IOuint32_tVectorTable[48];

#elifdefined(__GNUC__)

__IOuint32_tVectorTable[48]__attribute__((section(".RAMVectorTable")));

#elifdefined(__TASKING__)

__IOuint32_tVectorTable[48]__at(0x20000000);

#endif

可見代碼是要將中斷向量表VectorTable強制定義在內(nèi)存0x20000000上,但是此地址與system_stm32f0xx.c定義的全局變量位置有沖突。于是,需要修改避免沖突。中斷向量的地址是固定的,但其他全局變量的地址可以相應(yīng)地移動下,并且APP的燒錄位置為0x8003000,如下圖:

再次編譯,錯誤就會消失了。

另外需要將main函數(shù)內(nèi)前面幾行代碼做些修改:


intmain(void)

{

uint32_ti=0;

/*!

thisisdonethroughSystemInit()functionwhichiscalledfromstartup

file(startup_stm32f0xx.s)beforetobranchtoapplicationmain.

ToreconfigurethedefaultsettingofSystemInit()function,referto

system_stm32f0xx.cfile

*/

/*RelocatebysoftwarethevectortabletotheinternalSRAMat0x20000000***/

/*CopythevectortablefromtheFlash(mappedatthebaseoftheapplication

loadaddress0x08003000)tothebaseaddressoftheSRAMat0x20000000.*/

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

{

VectorTable[i]=*(__IOuint32_t*)(APPLICATION_ADDRESS+(i<<2));

}

/*EnabletheSYSCFGperipheralclock*/

//RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//需要修改成這樣

/*RemapSRAMat0x00000000*/

SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

/...

}

打開對應(yīng)的map文件,有如下內(nèi)容:


GPIO_PIN0x08003470Data8stm320518_eval.o(.constdata)

GPIO_CLK0x08003478Data16stm320518_eval.o(.constdata)

BUTTON_PIN0x08003488Data14stm320518_eval.o(.constdata)

BUTTON_CLK0x08003498Data28stm320518_eval.o(.constdata)

BUTTON_EXTI_LINE0x080034b4Data14stm320518_eval.o(.constdata)

BUTTON_PORT_SOURCE0x080034c2Data14stm320518_eval.o(.constdata)

BUTTON_PIN_SOURCE0x080034d0Data14stm320518_eval.o(.constdata)

BUTTON_IRQn0x080034deData14stm320518_eval.o(.constdata)

COM_USART_CLK0x080034ecData4stm320518_eval.o(.constdata)

COM_TX_PORT_CLK0x080034f0Data4stm320518_eval.o(.constdata)

COM_RX_PORT_CLK0x080034f4Data4stm320518_eval.o(.constdata)

COM_TX_PIN0x080034f8Data2stm320518_eval.o(.constdata)

COM_RX_PIN0x080034faData2stm320518_eval.o(.constdata)

COM_TX_PIN_SOURCE0x080034fcData2stm320518_eval.o(.constdata)

COM_RX_PIN_SO

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

摘 要 :嵌入式軟件在線升級是指不重啟計算機而完成的軟件升級工作,文中通過儀表的 SD 卡更新嵌入式軟件,不需要拆裝儀表,由于軟件本身不包含可擦寫的 FLASH 代碼,不影響燒錄過程,具備較高的可靠性和安全性。

關(guān)鍵字: SD 卡 嵌入式 在線升級 計算機 軟件 FLASH 代碼

寫在前面的話:STM32F0項目進階系列是硬件系統(tǒng)工程師星克曼以項目進階的方式寫出的入門教程,以項目開發(fā)為藍底,快速學習進入實戰(zhàn)。STM32 I2C總線在上一講 STM32F0項目進階之I2C 中已經(jīng)講過了,已經(jīng)將標準...

關(guān)鍵字: stm32f0 實時時鐘 ds1307

一、問題在成功實現(xiàn)了程序定時在APP和IAP之間來回切換后,以為已經(jīng)掌握了stm在線升級的秘訣,于是興沖沖的開始改公司的升級程序。結(jié)果,發(fā)現(xiàn)程序可以從IAP跳轉(zhuǎn)到APP,但是程序會跑飛。在進入APP模式后,結(jié)束調(diào)試時,

關(guān)鍵字: STM32 在線升級

// 引腳 PA0 的外部中斷配置void Key_GPIO_Init(void){// 設(shè)置 PA0 口為上拉輸入模式RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // 打開該引腳的GPI...

關(guān)鍵字: exti stm32f0 外部中斷配置

//Cortex-M0內(nèi)核中斷向量共有48個。//由于M0內(nèi)核不具有M3、M4內(nèi)核的中斷向量表重定位功能,須采用以下方式解決IAP向量問題:// 1:復制用戶代碼中的中斷向量表到SRAM首地址// 2: 開啟SRAM...

關(guān)鍵字: iap stm32f0 中斷向量表 用戶程序

前言:正文:所有USART設(shè)置都設(shè)置了1,時鐘,enable2,IO配置,AF,PP,3,在while里循環(huán)發(fā)送0x55我在示波器里頭看到了初始都是高電平,然后一低一高一低一高,重復10次,后來孔工給我看手冊,告訴我說,...

關(guān)鍵字: stm32f0 usart通訊

void Flash_Init(void){// 調(diào)整flash與時鐘速率之間的關(guān)系FLASH->ACR |= FLASH_ACR_LATENCY;}void Flash_Unlock(void){// FLASH...

關(guān)鍵字: stm32f0 片內(nèi)flash

STM32F0與STM32F1的GPIO是不同的,細說比較亂,直接上圖。STM32F1的GPIO基本結(jié)構(gòu):從圖上看STM32f1輸入只有上下拉,輸出有開漏和推挽。STM32F0的GPIO基本結(jié)構(gòu):從圖上看STM32f0輸...

關(guān)鍵字: gpio stm32f0 stm32f1

PWR->CR |= 0x01; // 低功耗時關(guān)閉電壓調(diào)節(jié)SCB->SCR |= 0x04; // 開啟深度睡眠接下來只要 _ _ WFI();就立即進入休眠模式,外部中斷可喚醒。喚醒之后全部都初始化了想用...

關(guān)鍵字: sleep stm32f0
關(guān)閉