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_smemset_s包含在string.h头文件中,同时需要在文件开头声明#define __STDC_WANT_LIB_EXT1__ 1
    #define __STDC_WANT_LIB_EXT1__ 1
    #include "string.h"
    

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();
  }
}
发布了19 篇原创文章 · 获赞 6 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u010548772/article/details/101673461