大家好、
IDE:已通过 CCSv9.1和 CCSv8.2测试。
编译器版本:使用 TI v18.12.1 LTS 和 TI v18.12.3 LTS 进行了测试
硬件:MSP430FR4133 LaunchPad。 在2个
固件:
int main (void){ WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 ConfigClock(); // MCLK/SMCLK 至8MHz ConfigGPIO(); ConfigTimer(); ConfigADC(); ConfigUART(); PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式 //激活先前配置的端口设置 _bis_SR_register (GIE); //中断被启用 while (1) { Function1(); Function2(); Function3(); } }
void ConfigClock (void) { FRCTL0 = FRCTLPW | NWAITS_3; //将系统时钟设置为8MHz,源自内部 DCO,无外部晶振 _bis_SR_register (SCG0); //禁用 FLL CSCTL3 |= SELREF_REFOCLK; //将 REFO 设置为 FLL 基准源 CSCTL0 = 0; //清除 DCO 和 MOD 寄存器 CSCTL1 &=~(DCORSEL_7); //首先清除 DCO 频率选择位 CSCTL1 |= DCORSEL_3; //设置 DCO = 8MHz CSCTL2 = FLLD_0 + 243; // DCODIV = 8MHz _DELAY_CYCLES (3); _BIC_SR_register (SCG0); //启用 FLL while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));//轮询直到 FLL 被锁定 CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;//将默认 REFO (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz //默认 DCODIV 为 MCLK 和 SMCLK 源 }
我不使用 WDT。
我尝试了一些不同的时钟和 FRAM 等待状态、结果相同。
在 while (1)循环中:
Function1()读取 ADC。 Function2()执行一些计算(不涉及硬件,不除以0)。 Function3()使用 GPIO 控制步进。
案例1:删除全部3个函数-> MCU 工作正常(一段时间后不会复位)
情况2:保留任何1或2个函数-> MCU 工作正常(一段时间后不会复位)
案例3:保留全部3个函数-> MCU 在一段时间后保持复位。 在这种情况下、FRAM/RAM 的使用仅为2936/334字节。
通过使用板载调试器、我可以看到每次 MCU 复位时 SYSRSTIV = 0x02。
标志:SVSHIFG、PMMPORIFG、PMMBORIFG、WDTIFG = 0。
OFIFG、PMMRSTIFG = 1
在此情况下、有人可以告诉我什么是复位原因?