chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

1、前言

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

首先什么是ISP和IAP?

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

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

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

3. ICP,在電路中進(jìn)行編程,一般是通過(guò)SWD/JTAG的方式對(duì)Flash進(jìn)行編程。

程序跳轉(zhuǎn)運(yùn)行

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

Cortex-M內(nèi)核的芯片一般而言?xún)H需在程序中改變PC、MSP寄存器至指定位置即可使得我們的程序跳轉(zhuǎn)至某處運(yù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)運(yùn)行遇到的一些問(wèn)題

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

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

BootLoader無(wú)任何中斷打開(kāi),而APP開(kāi)啟的滴答中斷,若此時(shí)我們?cè)贏PP中使用的是程序跳轉(zhuǎn)運(yùn)行的方式回到BootLoader,此時(shí)會(huì)造成BootLoader程序無(wú)法正常響應(yīng)滴答中斷(因?yàn)锽ootLoader程序沒(méi)有滴答中斷服務(wù)函數(shù))。從而導(dǎo)致我們的BootLoader程序異??ㄋ?。

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

3、解決問(wèn)題

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

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

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

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

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

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

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

1. 各個(gè)外設(shè)時(shí)鐘均未打開(kāi)。

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

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

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    147

    文章

    18368

    瀏覽量

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

    關(guān)注

    33

    文章

    9255

    瀏覽量

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

    關(guān)注

    117

    文章

    3832

    瀏覽量

    84331

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    STM32 MCU IAP例程分析

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

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

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

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

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

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

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

    ISPIAP的區(qū)別

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

    STC-USER-IAP-ISP-DEMO程序

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

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

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

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

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

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

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

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

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

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

    前言首先先簡(jiǎn)要的介紹一下boot和iap。boot( Bootlader)引導(dǎo)裝載程序。單片機(jī)上電程序開(kāi)始運(yùn)行的時(shí)候就是運(yùn)行的該部分的代碼,
    發(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 ?25次下載

    MCU型號(hào)表

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

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

    AN040 IAP程序跳轉(zhuǎn)說(shuō)明
    發(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>說(shuō)明

    什么ISP?什么是IAP?

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