国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于MDK-Keil環(huán)境如何把STM32程序直接下載到SRAM運(yùn)行

這篇具有很好參考價(jià)值的文章主要介紹了基于MDK-Keil環(huán)境如何把STM32程序直接下載到SRAM運(yùn)行。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 前言

對(duì)于 Cortex-M 內(nèi)核的微控制器,它們都可以支持在 RAM 中執(zhí)行程序,有些非 ARM 的微控制器是不支持的。

在內(nèi)部 SRAM 執(zhí)行程序,有基于以下幾方面的原因:

  • 1、所使用的設(shè)備可能具有OTP(One-time Programmable,一次性可編程)ROM區(qū)域,還沒(méi)有確定最終代碼之前,還不會(huì)把程序編程到芯片中;
  • 2、有些MCU內(nèi)部?jī)?nèi)部可能沒(méi)有Flash,可能會(huì)使用到外部的存儲(chǔ)器。但是在軟件開(kāi)發(fā)階段可以下載到SRAM進(jìn)行開(kāi)發(fā)測(cè)試;
  • 3、對(duì)于特定的測(cè)試場(chǎng)合,F(xiàn)lash已經(jīng)燒錄了程序,但是不想擦除。這時(shí)可以把測(cè)試程序下載到SRAM運(yùn)行;
  • 4、對(duì)于有些Flash被鎖定的芯片,可以把代碼下載到SRAM,然后進(jìn)行解鎖;
  • 5、Flash寫(xiě)入需要先擦除,所以SRAM的寫(xiě)入速度要比Flash快很多,如果程序很大的話,在開(kāi)發(fā)階段直接在SRAM運(yùn)行可以提高效率。

對(duì)于程序下載到內(nèi)部SRAM運(yùn)行,有多種方法:

  • 1、配置boot引腳,然后下載代碼到SRAM,使程序從SRAM啟動(dòng)
  • 2、不修改boot引腳啟動(dòng)模式,借助仿真器,進(jìn)入仿真模式,然后強(qiáng)制更改 PC SP 指針,從SRAM位置取值開(kāi)始運(yùn)行
  • 3、程序下載到內(nèi)部Flash或者外部的SD卡、SPI Flash等存儲(chǔ)設(shè)備,然后上電之后把代碼搬運(yùn)到SRAM運(yùn)行(類似代碼的重定位)

下面只介紹前面兩種方式。

首先在修改程序在SRAM運(yùn)行之前,要先準(zhǔn)備好一份可以正常在Flash運(yùn)行的程序。

2. 修改散列文件

散列文件,就是鏈接腳本,指導(dǎo)鏈接器如何對(duì)程序進(jìn)行鏈接的。

我們要讓代碼在SRAM運(yùn)行,首先就要修改散列文件,讓程序鏈接地址修改在內(nèi)部SRAM空間。

基于MDK-Keil環(huán)境如何把STM32程序直接下載到SRAM運(yùn)行,STM32,stm32,SRAM

我們打開(kāi)Keil的配置界面,然后使用我們自己修改的散列文件。

修改后的散列文件內(nèi)容如下:

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x20000000 0x00010000  {    ; load region size_region
  ER_IROM1 0x20000000 0x00010000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20010000 0x00010000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

我使用的MCU型號(hào)是 STM32F407ZG ,IARM1 的 SRAM 大小有 0x20000 ,即 128KB。我這里分配的代碼區(qū)域(ER_IROM1)大小是 0x10000(64KB),然后可讀可寫(xiě)的數(shù)據(jù)區(qū)域大小是0x10000(64KB),也就是把他們平均分了。

在實(shí)際的項(xiàng)目開(kāi)發(fā)中,可根據(jù)實(shí)際情況改寫(xiě)分配。

3. 修改中斷向量表基地址

默認(rèn)的中斷向量表基地址是指向 0x08000000 的地址處的,現(xiàn)在我們已經(jīng)更改了鏈接地址,把程序鏈接到內(nèi)部SRAM 0x20000000 區(qū)域了。

如果發(fā)生中斷,CPU還是跳到0x08000000開(kāi)始的地址處執(zhí)行中斷服務(wù)函數(shù)的話,那么肯定是程序崩潰,因?yàn)楝F(xiàn)在0x08000000處的地址已經(jīng)沒(méi)有代碼了。

要想正常使用中斷的話,就必須修改中斷向量表的基地址指向0x20000000地址處。

修改中斷向量表基地址,只要修改 SCB->VTOR 寄存器的值就行。

具體代碼,在 system_stm3f4xx.c 的 SystemInit 函數(shù)就有。如下:

void SystemInit(void)
{
	/* 部分代碼省略 ........ */

    /* Configure the Vector Table location add offset address */
    #ifdef VECT_TAB_SRAM
    SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
    #else
    SCB->VTOR = FMC_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
    #endif
}

我們只要定義這個(gè) VECT_TAB_SRAM 宏,就可以修改中斷向量表的基地址指向 0x20000000 的地址處了。

這個(gè)宏可以直接在Keil的配置界面 C/C++ 選項(xiàng)里面的宏定義那里填寫(xiě),當(dāng)然直接在 system_stm3f4xx.c 這個(gè)文件前面自己手動(dòng)寫(xiě)一下也可以。

4. 修改下載算法的配置

為了把代碼下載到SRAM中,還需要修改Jlink的下載算法配置,只要其實(shí)就是更改下載的地址改為 SRAM 的地址。

基于MDK-Keil環(huán)境如何把STM32程序直接下載到SRAM運(yùn)行,STM32,stm32,SRAM

對(duì)于上面的配置簡(jiǎn)單解釋如下:

  • 1、由于是下載到SRAM,SRAM寫(xiě)入是不需要擦除的,所以勾選 DO not Erase 即可
  • 2、“Programming Algorithm”一欄的配置,由于沒(méi)有內(nèi)置的SRAM下載算法,所以下載算法選擇的還是原來(lái)的Flash下載算法。但是下面的起始地址和大小需要更改,就改為我們?cè)谏⒘形募x代碼區(qū)域的起始地址和大小。
  • 2、“RAM for Algorithm”一欄是指“編程算法”(Programming Algorithm)可使用的 RAM 空間,下載程序到 FLASH 時(shí)運(yùn)行的編程算法需要使用 RAM 空間,在默認(rèn)配置中它的首地址為 0x20000000,即內(nèi)部 SRAM 的首地址。但是現(xiàn)在我們修改了0x20000000開(kāi)始處存放的是代碼,所以這里的起始地址要修改了散列文件設(shè)置的 RW 區(qū)域的起始地址,即 0x20010000 。然后大小默認(rèn)不用改。

5. 修改boot啟動(dòng)模式

配置到這里,其實(shí)我們這時(shí)如果更改Boot的啟動(dòng)引腳,配置為內(nèi)部SRAM啟動(dòng),然后點(diǎn)擊下載按鈕,程序就可以正常跑了的。

基于MDK-Keil環(huán)境如何把STM32程序直接下載到SRAM運(yùn)行,STM32,stm32,SRAM

但是如果不修改boot啟動(dòng)模式,然后從SRAM啟動(dòng)的話,也可以借助仿真器配置,進(jìn)入仿真調(diào)試模式,然后通過(guò)仿真器配置強(qiáng)制 PC SP 指針從 0x20000000 開(kāi)始處取值,這樣也能讓程序正常從SRAM運(yùn)行。

6. 通過(guò)仿真器配置修改 PC SP 的值

修改boot模式的目的,其實(shí)就是讓MCU上電之后,可以從正確的地址處獲取到 PC SP 指針的初始值,這樣代碼才可以正常開(kāi)始運(yùn)行。

讓 PC SP 獲取到正確的值,有兩種方式:

  • 修改Boot啟動(dòng)模式,讓程序從內(nèi)部SRAM啟動(dòng)
  • 不修改啟動(dòng)模式,然后通過(guò)仿真器配置,進(jìn)入仿真模式,強(qiáng)制修改 PC SP 的值。

下面介紹下怎么通過(guò)仿真器配置,讓代碼在SRAM運(yùn)行。

首先我們自己編寫(xiě)一份 .ini 的調(diào)試配置文件,強(qiáng)制 PC SP 指針的地址值。內(nèi)容如下:

/***********************************************************/
/* Debug_RAM.ini: Initialization File for Debugging from Internal RAM */
/******************************************************/
/* This file is part of the uVision/ARM development tools. */
/* Copyright (c) 2005-2014 Keil Software. All rights reserved.*/
/* This software may only be used under the terms of a valid, current */
/* end user licence from KEIL for a compatible version of KEIL software */
/*development tools. Nothing else gives you the right to use this software ?*/
/***************************************************/

 FUNC void Setup (void) {
 SP = _RDWORD(0x20000000); // 設(shè)置棧指針 SP,把 0x20000000 地址中的內(nèi)容賦值到 SP。
 PC = _RDWORD(0x20000004); // 設(shè)置程序指針 PC,把 0x20000004 地址中的內(nèi)容賦值到 PC。
 // XPSR = 0x01000000; // 設(shè)置狀態(tài)寄存器指針 xPSR
 _WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
 }

 LOAD %L INCREMENTAL // 下載 axf 文件到 RAM
 Setup(); //調(diào)用上面定義的 setup 函數(shù)設(shè)置運(yùn)行環(huán)境

 g, main //跳轉(zhuǎn)到 main 函數(shù)

然后配置Keil的選項(xiàng),如下:

基于MDK-Keil環(huán)境如何把STM32程序直接下載到SRAM運(yùn)行,STM32,stm32,SRAM

這樣,通過(guò)這種方式,不需要修改boot引腳的啟動(dòng)模式,點(diǎn)擊 debug 調(diào)式按鈕,也一樣可以正常在SRAM運(yùn)行。

缺點(diǎn)就是下載程序必須是點(diǎn)擊進(jìn)入調(diào)試界面,不能通過(guò)下載程序的按鈕下載程序。因?yàn)檫@種方式是通過(guò)仿真器的配置強(qiáng)制設(shè)置 PC SP 指向正確的地址的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-728011.html

到了這里,關(guān)于基于MDK-Keil環(huán)境如何把STM32程序直接下載到SRAM運(yùn)行的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • keil官網(wǎng)下載MDK的STM32芯片pack包

    keil官網(wǎng)下載MDK的STM32芯片pack包

    背景 ? ? ? ? 最近重裝了電腦系統(tǒng),重新安裝了MDK所以導(dǎo)致MDK芯片包需要重新下載,軟件內(nèi)下載又太慢,所以趁現(xiàn)在找到了官網(wǎng)下載方法把方法分享出來(lái)供大家參考。 1、在瀏覽器中輸入網(wǎng)址:www.keil.arm.com進(jìn)入如下界面,然后點(diǎn)擊:Hardware -Devices 2、在Devices中選擇,在紅色方框

    2024年02月13日
    瀏覽(99)
  • 【STM32】keil MDK-Arm 5.38 功能詳解

    【STM32】keil MDK-Arm 5.38 功能詳解

    keil 是ARM的軟件子公司, MDK-Arm 是keil的一個(gè)產(chǎn)品,把它稱作keil也是可以的。 arm 鏈接:https://developer.arm.com/Tools%20and%20Software/Keil%20MDK#Overview keil:https://www.keil.com/download/ keil MDK是一個(gè)完整的軟件開(kāi)發(fā)解決方案,用于創(chuàng)建,構(gòu)建和調(diào)試基于Arm的微控制器的嵌入式應(yīng)用程序。keil

    2024年02月11日
    瀏覽(1062)
  • MDK Keil5 創(chuàng)建Stm32工程-理論篇(這里以Stm32F103Zet6為例)

    MDK Keil5 創(chuàng)建Stm32工程-理論篇(這里以Stm32F103Zet6為例)

    整個(gè)工程可以粗略的劃分為幾個(gè)文件夾: BSP 底層驅(qū)動(dòng)比如GPIOTimer等驅(qū)動(dòng)文件 CMSIS 內(nèi)核相關(guān)的文件 Firmware 生成的固件下載文件 Mycode 用戶編寫(xiě)的相關(guān)文件,主要編寫(xiě)的文件都在這個(gè)文件夾里 Project 工程文件 startup 芯片啟動(dòng)文件 STM32F10x_FWLib 標(biāo)準(zhǔn)庫(kù)文件 USER 主函數(shù)等文件 readm

    2023年04月24日
    瀏覽(95)
  • 【STM32】使用RTE ,從 0 開(kāi)始創(chuàng)建一個(gè) (keil) ARM MDK工程(純keil,標(biāo)準(zhǔn)庫(kù),以STM32F103C8T6為例)

    【STM32】使用RTE ,從 0 開(kāi)始創(chuàng)建一個(gè) (keil) ARM MDK工程(純keil,標(biāo)準(zhǔn)庫(kù),以STM32F103C8T6為例)

    學(xué)習(xí)相關(guān)的基礎(chǔ)知識(shí)請(qǐng)閱讀本專欄其他文章,一定有你想要的。 https://blog.csdn.net/weixin_43764974/category_11021363.html 本文軟硬件: STM32F103C8T6 ARM MDK 5.38 ARM complier 6 ST-Link v2 StdPeriph Drivers(標(biāo)準(zhǔn)庫(kù)) 文章開(kāi)始前,我想再次說(shuō)一下: keil 、 μvision 、 ARM MDK 這幾個(gè)名詞(盡管前面的額文

    2024年02月16日
    瀏覽(500)
  • KEIL5 MDK中下載STM32全系列芯片包的簡(jiǎn)易方法(免費(fèi))

    KEIL5 MDK中下載STM32全系列芯片包的簡(jiǎn)易方法(免費(fèi))

    本文介紹了兩種免費(fèi)方法 本例中使用的STM32型號(hào)為STM32F407VET6。 打開(kāi)Keil uVision5,點(diǎn)擊下圖所示的Pack Installer圖標(biāo)。 根據(jù)芯片型號(hào)開(kāi)頭字母可以查詢到對(duì)應(yīng)芯片。 例如STM32F4系列的芯片包名稱為STM32F4xx_DFP,版本為2.14.0。 在網(wǎng)址中輸入“https://www.keil.com/pack/Keil.”+對(duì)應(yīng)的芯片包名

    2024年02月05日
    瀏覽(43)
  • STM32H723 + DP83848 + LWIP + RT-Thread(FreeRTOS) + STM32CubeMX + Keil MDK 超詳細(xì)

    STM32H723 + DP83848 + LWIP + RT-Thread(FreeRTOS) + STM32CubeMX + Keil MDK 超詳細(xì)

    MCU:STM32H723ZGT ETH PHY :DP83848 RT-Thread:RT-Thread nano 3.1.5 Software Pack:STM32CubeH7 Firmware Package V1.10.0 / 11-February-2022 STM32H723配置以太網(wǎng)+Freertos注意事項(xiàng) STM32H723+Lwip+ETH+CUBE 完整配置(排了巨多坑?。?Cube配置STM32H743+DP83848以太網(wǎng)工程 STM32H743+CubeMX-梳理MPU的設(shè)置 首先使用 CubeMX配置相關(guān)外

    2024年02月13日
    瀏覽(95)
  • 【正點(diǎn)原子STM32】KEIL MDK5使用技巧(文本美化、代碼編輯、查找&替換技巧、工程編譯問(wèn)題定位、窗口視圖管理)

    【正點(diǎn)原子STM32】KEIL MDK5使用技巧(文本美化、代碼編輯、查找&替換技巧、工程編譯問(wèn)題定位、窗口視圖管理)

    一、文本美化 1.1、編輯器設(shè)置 1.2、字體和顏色設(shè)置 1.3、用戶設(shè)置 1.4、代碼提示語(yǔ)法檢測(cè) 1.5、global.prop文件妙用 二、代碼編輯技巧 2.1、Tab鍵的妙用 2.2、快速定位函數(shù)或變量被定義的地方 2.3、快速注釋快速取消注釋 三、查找替換技巧 3.1、快速打開(kāi)頭文件 3.2、查找功

    2024年01月23日
    瀏覽(182)
  • STM32-開(kāi)發(fā)環(huán)境之MDK5

    目錄 一、MDK5的簡(jiǎn)介 二、MDK5的特點(diǎn) 三、MDK5的主要功能 四、MDK5的應(yīng)用場(chǎng)景 五、KEIL5的安裝 MDK5,全稱為MDK-ARM Version 5,是由德國(guó)Keil公司開(kāi)發(fā)的一款針對(duì)ARM Cortex-M系列微控制器的完整軟件開(kāi)發(fā)環(huán)境。它為嵌入式軟件開(kāi)發(fā)者提供了從項(xiàng)目創(chuàng)建、代碼編寫(xiě)、編譯鏈接、仿真調(diào)試到最

    2024年02月22日
    瀏覽(21)
  • STM32F103 KEIL 標(biāo)準(zhǔn)庫(kù)直接添加DSP庫(kù)

    STM32F103 KEIL 標(biāo)準(zhǔn)庫(kù)直接添加DSP庫(kù)

    近期由于比賽需要,想要在STM32上移植DSP庫(kù)進(jìn)行FFT變換,找了很多資料都是利用CUBEMX進(jìn)行導(dǎo)入的方法,本人使用的是標(biāo)準(zhǔn)庫(kù),對(duì)HAL庫(kù)并不熟悉,所以考慮到移植的方便采用直接在項(xiàng)目文件中移植DSP庫(kù)的方法,可以使用標(biāo)準(zhǔn)庫(kù)編程,親測(cè)有效 blog.csdnimg.cn/291099e0402f46439160e2cf9b92f

    2024年02月16日
    瀏覽(24)
  • 【STM32】Keil MDK 中的 Code、RO-data、RW-dat、ZI-data 是什么?分別放在哪里?

    【STM32】Keil MDK 中的 Code、RO-data、RW-dat、ZI-data 是什么?分別放在哪里?

    ??????????C語(yǔ)言中有棧、堆、bss、data、code段。具體每個(gè)段具體是存儲(chǔ)什么數(shù)據(jù)的,直接百度吧。重點(diǎn)分析一下STM32以及在MDK里面段的劃分。 Code存放在ROM RO-data存放在ROM RW-dat存放在RAM ZI-data存放在RAM 單片機(jī)初始化時(shí)RW-data從flash拷貝到RAM 生成的map文件位于list文件夾下 (KE

    2024年02月11日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包