91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

極海MCU的ISP和IAP中程序跳轉(zhuǎn)運行問題分析

Geehy極海半導(dǎo)體 ? 來源:21ic論壇極海半導(dǎo)體專區(qū) ? 2025-10-10 14:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

《APM32芯得》系列內(nèi)容為用戶使用APM32系列產(chǎn)品的經(jīng)驗總結(jié),均轉(zhuǎn)載自21ic論壇極海半導(dǎo)體專區(qū),全文未作任何修改,未經(jīng)原文作者授權(quán)禁止轉(zhuǎn)載。

1、前言

最近在調(diào)試程序的程序升級方式,遇到了不少的問題,本篇筆記記錄一下遇到的一些問題及在這個過程中的一些問題及思考。

首先什么是ISP和IAP?

我這里簡單總結(jié)一下,簡單來說MCU程序更新的方式一般有3種:

1. IAP,在應(yīng)用中編程,通過一些串行接口對應(yīng)用程序進行更新的一種方式,其模式是BootLoader+APP的方式,且這兩部分的代碼一般均保存在MCU的Flash區(qū)域。

2. ISP,在系統(tǒng)中進行編程,一般是通過MCU廠商提供的一段保存在系統(tǒng)存儲區(qū)的程序,通過串行接口對Flash進行編程。

3. ICP,在電路中進行編程,一般是通過SWD/JTAG的方式對Flash進行編程。

程序跳轉(zhuǎn)運行

我這里使用的MCU是極海的APM32F103C8T6,由于其是基于ArmCortex-M3內(nèi)核的一款芯片,其程序的跳轉(zhuǎn)運行非常簡單。

Cortex-M內(nèi)核的芯片一般而言僅需在程序中改變PC、MSP寄存器至指定位置即可使得我們的程序跳轉(zhuǎn)至某處運行。

比如極海官方提供的例程:

/* Jump to user application */

JumpAddress = *(__IO uint32_t *) (address + 4);

Jump_To_Application = (pFunction) JumpAddress;

/* Initialize user application's Stack Pointer */

__set_MSP(*(__IO uint32_t *) address);

/* Jump to application */

Jump_To_Application();

2、跳轉(zhuǎn)運行遇到的一些問題

在實踐中,我發(fā)現(xiàn)若是在一個程序跳轉(zhuǎn)至另外一個程序的時候(如BootLoader跳轉(zhuǎn)至APP),若前段程序開啟了一些中斷,而后段程序未開啟相關(guān)中斷的情況下會導(dǎo)致程序無法正常運行。

如設(shè)計一個IAP程序:

BootLoader無任何中斷打開,而APP開啟的滴答中斷,若此時我們在APP中使用的是程序跳轉(zhuǎn)運行的方式回到BootLoader,此時會造成BootLoader程序無法正常響應(yīng)滴答中斷(因為BootLoader程序沒有滴答中斷服務(wù)函數(shù))。從而導(dǎo)致我們的BootLoader程序異??ㄋ?。

e7f39c34-99ef-11f0-8c8f-92fbcf53809c.png

3、解決問題

理論上,若BootLoader或者APP單獨保存在flash中,并以復(fù)位運行的操作下,我們的程序都是可以正常運行的,而問題在于我們跳轉(zhuǎn)運行會導(dǎo)致異常。

從上面的理論,我們總結(jié)一下:

1. 跳轉(zhuǎn)運行會導(dǎo)致程序異常。

2. 復(fù)位運行不會導(dǎo)致程序異常。

從上面兩點,我們引申思考得到:我們只要在程序跳轉(zhuǎn)前將芯片的各個狀態(tài)保持回到復(fù)位狀態(tài),我們就可以保證程序跳轉(zhuǎn)后能夠正常運行。

那么問題來了,復(fù)位狀態(tài)是一個什么樣的狀態(tài)?

復(fù)位時芯片剛剛上電,此時的MCU

1. 各個外設(shè)時鐘均未打開。

2. 對中斷的設(shè)置均未進行。

那么我們根據(jù)這個思路,來編寫我們重新跳轉(zhuǎn)前的程序:

1. 關(guān)閉中斷響應(yīng),保證我們的后續(xù)“還原至復(fù)位狀態(tài)的”操作不會被中斷。

2. 關(guān)閉所有的中斷使能及還原芯片中斷寄存器狀態(tài)。

3. 關(guān)閉所有外設(shè)的時鐘并對外設(shè)進行復(fù)位。

4. 設(shè)置主時鐘為HSI。

5. 開啟中斷響應(yīng)。

最后跳轉(zhuǎn)至目標程序區(qū)域

e8578a64-99ef-11f0-8c8f-92fbcf53809c.png

那完成以上操作后就可以保證一定程度上保證我們的程序能夠回到“復(fù)位狀態(tài)”在去執(zhí)行我們的目標程序啦。

這里我也貼一段代碼提供給大家參考。

void ResetSystem(void)

{

/* Set the interrupt shielding position and prohibit all interruptions. */

__set_PRIMASK(1);

/* Disable all peripheral clocks */

RCM->APB2CLKEN = 0;

RCM->APB1CLKEN = 0;

RCM->AHBCLKEN = 0;

/* Reset all peripherals */

RCM->APB2RST = 0xFFFFFFFF;

RCM->APB1RST = 0xFFFFFFFF;

RCM->AHBRST = 0xFFFFFFFF;

RCM->APB2RST = 0;

RCM->APB1RST = 0;

RCM->AHBRST = 0;

/* Disable all interruptions */

for (uint8_t i; i < 8; i++)

{

NVIC->ICER[i] = 0xFFFFFFFF;

NVIC->ICPR[i] = 0xFFFFFFFF;

}

/* Configure the external interrupt controller and set all the interrupt

mask and trigger method to 0. */

EINT->IMASK = 0x0;

EINT->EMASK = 0x0;

EINT->RTEN = 0x0;

EINT->FTEN = 0x0;

EINT->IPEND = 0x0;

/* Set HSIEN bit */

RCM->CTRL_B.HSIEN = BIT_SET;

/* Reset SCLKSEL, AHBPSC, APB1PSC, APB2PSC, ADCPSC and MCOSEL bits */

RCM->CFG &= (uint32_t) 0xF8FF0000;

__set_PRIMASK(0);

}

以上便是一份我本次的思考與總結(jié),歡迎大家斧正。

原文地址:https://bbs.21ic.com/icview-3311062-1-1.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    18924

    瀏覽量

    398023
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9519

    瀏覽量

    157016
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3846

    瀏覽量

    85232

原文標題:APM32芯得 EP.63 | APM32F103C8T6_關(guān)于ISP_IAP中程序跳轉(zhuǎn)運行的思考

文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    STM32 MCU IAP例程分析

    STM32 MCU IAP例程跳轉(zhuǎn)到APP代碼簡要分析
    發(fā)表于 05-15 14:30

    IAP程序跳轉(zhuǎn)到APP只能運行大約2秒

    );} 問題:如果設(shè)置了" __MSR_MSP (AppSpInitVal);//設(shè)置SP.,則跳轉(zhuǎn)過去大約2秒就又回到IAP程序了;而不操作這個SP,則可以正常運行,實際上就是在
    發(fā)表于 03-14 08:05

    淺析STM32的IAP與APP互相跳轉(zhuǎn)

    很多問題?,F(xiàn)將IAP學(xué)習(xí)過程和實際遇到問題總結(jié)一下。首先說一下什么是IAP。IAP(In Application Programming)即在應(yīng)用編程,IAP是用戶自己的
    發(fā)表于 08-05 07:24

    MCU bootload IAP程序是如何跳轉(zhuǎn)

    MCU bootloadIAP程序是如何跳轉(zhuǎn)的?需要注意哪些事項呢?
    發(fā)表于 11-29 07:48

    ISPIAP的區(qū)別

    ISPIAP的區(qū)別       IAP: in applicatin progr
    發(fā)表于 12-28 11:28 ?1949次閱讀

    STC-USER-IAP-ISP-DEMO程序

    STC-USER-IAP-ISP-DEMO
    發(fā)表于 11-16 19:12 ?14次下載

    關(guān)于如何利用STM8S做IAP的步驟

    ,個人感覺叫IAP更合適。IAP程序燒寫到flash中程序最開始運行的地方,這個程序負責升級更新
    發(fā)表于 09-20 20:29 ?14次下載
    關(guān)于如何利用STM8S做<b class='flag-5'>IAP</b>的步驟

    STM32 IAP - Boot跳轉(zhuǎn)到APP

    簡單IAP設(shè)計思路:單片機上電首先運行BootLoader程序; Bootloader如果檢測到需要更新APP,則首先進行更新,更新完成后跳轉(zhuǎn)到APP并
    發(fā)表于 12-03 14:21 ?14次下載
    STM32 <b class='flag-5'>IAP</b> - Boot<b class='flag-5'>跳轉(zhuǎn)</b>到APP

    單片機的燒錄方式:ISP、ICP、IAP的區(qū)別

    單片機的燒錄方式:單片機三種燒錄方式ISP、IAP和ICP有什么不同?單片機三種燒錄方式ICP、IAPISP詳解單片機程序燒錄的3種方式(
    發(fā)表于 12-03 18:21 ?27次下載
    單片機的燒錄方式:<b class='flag-5'>ISP</b>、ICP、<b class='flag-5'>IAP</b>的區(qū)別

    STM32+IAP+uCOS-iii升級跳轉(zhuǎn)至APP程序跑飛問題

    最近項目中MCU使用的是STM32F103,APP程序操作系統(tǒng)使用的是uCOS-iii,在進行IAP升級時發(fā)現(xiàn),從Bootloader跳轉(zhuǎn)至APP
    發(fā)表于 12-09 09:51 ?16次下載
    STM32+<b class='flag-5'>IAP</b>+uCOS-iii升級<b class='flag-5'>跳轉(zhuǎn)</b>至APP<b class='flag-5'>程序</b>跑飛問題

    關(guān)于STM32 BOOT和IAP跳轉(zhuǎn)的流程梳理

    前言首先先簡要的介紹一下boot和iap。boot( Bootlader)引導(dǎo)裝載程序。單片機上電程序開始運行的時候就是運行的該部分的代碼,
    發(fā)表于 12-23 19:03 ?29次下載
    關(guān)于STM32 BOOT和<b class='flag-5'>IAP</b><b class='flag-5'>跳轉(zhuǎn)</b>的流程梳理

    MCU ISP Tools安裝程序

    MCU ISP Tools安裝程序
    發(fā)表于 07-08 10:22 ?26次下載

    MCU型號表

    MCU型號表
    發(fā)表于 11-09 21:03 ?0次下載
    <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>MCU</b>型號表

    AN040 IAP程序跳轉(zhuǎn)說明

    AN040 IAP程序跳轉(zhuǎn)說明
    發(fā)表于 02-23 19:11 ?0次下載
    AN040 <b class='flag-5'>IAP</b><b class='flag-5'>程序</b><b class='flag-5'>跳轉(zhuǎn)</b>說明

    什么ISP?什么是IAP

    做單片機開發(fā)的工程師經(jīng)常會聽到兩個詞:ISPIAP,但新手往往對這兩個概念不是很清楚,今天就來和大家聊聊什么是ISP,什么是IAP?
    的頭像 發(fā)表于 01-28 09:26 ?6064次閱讀
    什么<b class='flag-5'>ISP</b>?什么是<b class='flag-5'>IAP</b>?