外部晶振起振
一般情况下,外部晶振(如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();
}
}