请问TI工程师:
我使用MSP430FR5969设计的产品,现在发现一个问题,就是系统死机以后,如果我只是单独重新上电,不能恢复正常,但是我用JTAG仿真器连接以后,再运行,就正常工作了,为何重新上电不能运行,而连接仿真器后 仿真器环境下 复位就启动了,再次脱机就又正常了,是不是仿真器清除了什么关键错误变量啊,他们新上电和JTAG连接启动,两者有何区别啊?紧急求助~
灰小子:
区别就是供电电路和复位电路连接仿真器后由仿真器供电并控制mcu复位
建议上传下电源供电电路、复位电路电路图和相关部分的pcb图
还有就是建议测量一下供电电压纹波和复位时复位引脚的波形
yuyinfeng1982:
回复 灰小子:
我用的是开发板一样的阻容复位电路,电源是电池作为后备电源的ADP5091电源管理芯片,原则上3V不会消失。因为死机一次后,我再人工重启上电,仍然没有启动,但是我用仿真器连接后就能再次恢复启动。
Susan Yang:
回复 yuyinfeng1982:
建议您上传一下电路
yuyinfeng1982:
回复 Susan Yang:
你好,谢谢您的答复
我估计应该不是硬件的问题
我加了看门狗程序,现在如果死机后,系统能反复复位,就是不能正常运行。重新上电也一样。
但是如果这种状态下,连接一下“MSP-FET”仿真器,在DEBUG下运行一下,又运行正常,然后再拔掉仿真器,独立上电又正常了。
迫切希望解决这个问题。谢谢了
yuyinfeng1982:
回复 yuyinfeng1982:
我的主要初始化程序如下:
int _system_pre_init(void)
{// Stop Watchdog timerWDT_A_hold(__MSP430_BASEADDRESS_WDT_A__);// Stop WDT/*==================================*//* Choose if segment initialization *//* should be done or not. *//* Return: 0 to omit initialization *//* 1 to run initialization *//*==================================*/return 1;
}
int main(void)
{//==================================================================================//初始化看门狗WDT_A_hold(WDT_A_BASE);//WDT_A_initWatchdogTimer(WDT_A_BASE,WDT_A_CLOCKSOURCE_ACLK,WDT_A_CLOCKDIVIDER_32K);//大约1s//使用VLO9.4K作为其看门狗时钟WDT_A_initWatchdogTimer(WDT_A_BASE,WDT_A_CLOCKSOURCE_VLOCLK,WDT_A_CLOCKDIVIDER_8192);//大约1sWDT_A_start(WDT_A_BASE);//启动看门狗//==================================================================================//初始化函数InitSystemConfig();//如果启动失败,则置LED灯常亮//P4.7CPU运行灯调试用GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN7);GPIO_setOutputLowOnPin(GPIO_PORT_P4,GPIO_PIN7);//默认低电平关闭//==================================================================================RUN_LED=0;
while(1){__bis_SR_register(LPM0_bits+GIE);__no_operation();// For debugger}//return (0);
}void InitSystemConfig(void)
{//初始化相关变量InitVar();//Unlock PortsPMM_unlockLPM5();//初始化时钟Init_Clock();//初始化GPIOInit_GPIO();//初始化串口。用于无线模块通信实际使用的是UCA0接口EUSCI_A0_Init();//已改//System timer count ,TA0 interval = 2.5ms用于保护等计算使用Timer0_A3_Init();//已改//Timer1_A3_Init();//用于产生PWM 高精度AD采样用//用于通讯命令周期性解析–预设数值为10mSTimer2_A2_Init();//已改//用于系统基本延时控制1mSTimer3_A2_Init();//已改//用于内部AD 80点每周波采样用 Generate 4K clock signal to ad采样触发不能动Timer4_B0_Init();//已改//初始化参考电压使用内部2.5V基准电压(最终需要配置,设置为关闭)REF_A_Init();//初始化ADC12模块ADC12_B_Init();//初始化AD24位Initial_AD24AD();
}void Init_Clock(void)
{// Set PJ.4 and PJ.5 as Primary Module Function Input, LFXT.GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_PJ,GPIO_PIN4 + GPIO_PIN5,GPIO_PRIMARY_MODULE_FUNCTION);
//2018-7-24Set PJ.6 and PJ.7 as Primary Module Function Input, HFXT.GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_PJ,GPIO_PIN6 + GPIO_PIN7,GPIO_PRIMARY_MODULE_FUNCTION);//FRCTL0 = FRCTLPW | NWAITS_1;// Set DCO frequency to 21 MHz//CS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_5);//CS_DCOFSEL_4->CS_DCOFSEL_5//2018-8-11// Set DCO frequency to 8 MHzCS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_3);//CS_DCOFSEL_4//Set external clock frequency to 32.000 KHz//CS_setExternalClockSource(32000, 0);//2018-7-24 设置LFXH-32KHFXT-7.68MCS_setExternalClockSource(32000, 7680000);//取消ACLKCS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);// Set SMCLK = 由HFXT提供,输出为7.68MHzCS_initClockSignal(CS_SMCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);//7.68// Set MCLK = DCO with frequency divider of 1CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);//Start XT1 with no time outCS_turnOnLFXT(CS_LFXT_DRIVE_3);//CS_turnOnLFXTWithTimeout(LFXTDRIVE_3, 400000);//查看PDF:LFXTDRIVE_3时,需要延时1000mS//2018-7-24打开HFXTCS_turnOnHFXT(CS_HFXT_DRIVE_4MHZ_8MHZ);//晶振为7.68M//CS_turnOnHFXTWithTimeout(CS_HFXT_DRIVE_4MHZ_8MHZ,10000);//晶振为7.68M_nop();_nop();_nop();
}
yuyinfeng1982:
回复 yuyinfeng1982:
麻烦TI工程师 看看这个问题,非常奇怪~~ 麻烦大家了