新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32軟件復(fù)位(基于庫文件V3.5)

STM32軟件復(fù)位(基于庫文件V3.5)

作者: 時間:2013-03-25 來源:網(wǎng)絡(luò) 收藏

()

本文引用地址:http://m.butianyuan.cn/article/148069.htm

void SoftReset(void)

{

__set_FAULTMASK(1); // 關(guān)閉所有中端

NVIC_SystemReset();//

}

在官方庫的 core_cm3.h 里 直接提供了 系統(tǒng)的函數(shù)

static __INLINE void NVIC_SystemReset(void)

{

SCB->AIRCR = ((0x5FA SCB_AIRCR_VECTKEY_Pos) |

(SCB->AIRCR SCB_AIRCR_PRIGROUP_Msk) |

SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */

__DSB(); /* Ensure completion of memory access */

while(1); /* wait until reset */

}

但是不是直接調(diào)用這個函數(shù)就OK了?

在Cortex-M3權(quán)威指南中有這么一句話

這里有一個要注意的問題:從SYSRESETREQ 被置為有效,到復(fù)位發(fā)生器執(zhí)行復(fù)位命令,

往往會有一個延時。在此延時期間,處理器仍然可以響應(yīng)中斷請求。但我們的本意往往是要

讓此次執(zhí)行到此為止,不要再做任何其它事情了。所以,最好在發(fā)出復(fù)位請求前,先把

FAULTMASK 置位。

所以最好在將FAULTMASK 置位才萬無一失。

同樣官方 core_cm3.h 里也直接提供了該函數(shù)

static __INLINE void __set_FAULTMASK(uint32_t faultMask)

{

register uint32_t __regFaultMask __ASM(faultmask);

__regFaultMask = (faultMask 1);

}



關(guān)鍵詞: 文件 V3.5 基于 復(fù)位 軟件 STM32

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉