文章目錄
-
- 外部晶振起振
- 内部flash讀寫
- MCU hard fault 的常見原因
- MCU軟體重新開機的方式
外部晶振起振
一般情況下,外部晶振(如32.768K)上電就能起振,但是在連接配接MCU的情況下,有些MCU有一個OSC子產品用于對外部晶振進行控制(模式選擇),這種情況下,請參考資料手冊,選擇正确的模式以啟動外部晶振。
内部flash讀寫
MCU 内部flash的讀寫擦除操作一定要小心,因為flash不能再擦除,寫的同時又進行讀,而MCU的程式一般儲存在flash中,是以在程式運作的過程中,如果你同僚對這個内部flash進行操作,一個不注意,就會發生錯誤(如寫的時候,中斷到來,程式需要讀flash),最常見的現象就是MCU重新開機
MCU hard fault 的常見原因
- 數組越界,在copy和set的時候請使用安全函數 memcopy_s ,memset_s
- ps:
,memcopy_s
包含在memset_s
頭檔案中,同時需要在檔案開頭聲明string.h
#define __STDC_WANT_LIB_EXT1__ 1
#define __STDC_WANT_LIB_EXT1__ 1 #include "string.h"
- ps:
MCU軟體重新開機的方式
cortex m處理器擁有軟體重新開機指令,一般相應的核心代碼中包含了該函數,可以直接調用
如NXP的 KL27Z晶片使用cotex m0,其SDK的頭檔案
core_cm0plus.h
中就有如下代碼
/**
\brief System Reset
\details Initiates a system reset request to reset the MCU.
*/
__STATIC_INLINE void __NVIC_SystemReset(void)
{
__DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */
SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
SCB_AIRCR_SYSRESETREQ_Msk);
__DSB(); /* Ensure completion of memory access */
for(;;) /* wait until reset */
{
__NOP();
}
}