Other Parts Discussed in Thread: MSP430FR6972
大家好、
芯片:MSP430FR6972
自己的电路板
编程 器和编程软件版本:Xiwei 离线编程器
非官方惯例
使用的开发环境和版本:CCS11.1.0
计算机操作系统:Windows 11
MCU 直接连接到3.6V 电池、开关方法如下:
我在 Fram 中创建开关变量 POWER_STATE、MCU 将在变量 开始运行后判断其值。 如果 值为1、则会直接打开。 如果 该值为0、则将进入 LPM3。
我使用 IO 端口的外部中断作为加电按钮。
上电:按下按钮后、它将进入中断、修改 POWER_STACH = 1、并退出到 LPM0。
关断:按下按钮后、POWER_STUARY = 0; 我通过看门狗手动复位芯片。
当前的问题:一开始没有问题,但一个问题在持续了一个多月之后才出现。 在关闭之前、一切都正常运行。 关闭后、无法正常打开、手动复位(Rst 引脚接地)也无法正常工作。 外部 RTC 振动正常、微控制器必须断电 、然后重新上电才能恢复运行。
void main(void)
{
uint16_t i;
WDT_A_hold(WDT_A_BASE);
GpioConfig();
Kp2InterruptConfig();
CsConfig();
RtcConfig();
__enable_interrupt();
while (power_state == 0)
{
LED_RED_OFF;
__bis_SR_register(LPM3_bits);
__no_operation(); // BREAKPOINT HERE to verify the
while (IS_KP2_LOW)
{
LED_RED_ON;
if (rtc_sec - kp2_time > 1)
{
power_state = 1;
break;
}
}
}
LED_GREEN_ON;
LED_RED_ON;
LED_YELLOW_ON;
while(1)
{
}
}
void Kp2InterruptConfig(void)
{
GPIO_selectInterruptEdge(
KP2_PORT,
KP2_PIN,
GPIO_HIGH_TO_LOW_TRANSITION);
GPIO_clearInterrupt(
KP2_PORT,
KP2_PIN);
GPIO_enableInterrupt(
KP2_PORT,
KP2_PIN);
}
void CsConfig(void)
{
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_PJ,
GPIO_PIN4 + GPIO_PIN5,
GPIO_PRIMARY_MODULE_FUNCTION
);
//Set DCO frequency to 8 MHz
CS_setDCOFreq(CS_DCORSEL_0,CS_DCOFSEL_6);
//Set external clock frequency to 32.768 KHz
CS_setExternalClockSource(32768,0);
//Set ACLK=LFXT
CS_initClockSignal(CS_ACLK,CS_LFXTCLK_SELECT,CS_CLOCK_DIVIDER_1);
//Set SMCLK = DCO with frequency divider of 1
CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);
//Set MCLK = DCO with frequency divider of 1
CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);
//Start XT1 with no time out
CS_turnOnLFXT(CS_LFXT_DRIVE_0);
}
void RtcConfig(void)
{
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_PJ,
GPIO_PIN4 | GPIO_PIN5,
GPIO_PRIMARY_MODULE_FUNCTION);
CS_turnOnLFXT(
CS_LFXT_DRIVE_3);
RTC_C_clearInterrupt(RTC_C_BASE,
RTC_C_CLOCK_READ_READY_INTERRUPT);
RTC_C_enableInterrupt(RTC_C_BASE,
RTC_C_CLOCK_READ_READY_INTERRUPT);
RTC_C_startClock(RTC_C_BASE);
}
//开机中断
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = PORT2_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(PORT2_VECTOR)))
#endif
void
Port2Vector(void)
{
kp2_time = rtc_sec;
if (lcd_on == 0)
lcd_on = 1;
LED_RED_ON;
GPIO_clearInterrupt(
KP2_PORT,
KP2_PIN);
__bic_SR_register_on_exit(LPM0_bits);
}
//关机
case KEY_LEFT_LONG:
power_state = 0;
__delay_cycles(8000000 * 2);
WDTCTL = 0xDEAD;
break;
这不是一个罕见的问题。 我有10个器件、其中9个器件在运行45天后关闭后无法打开。
此致、
凯瑟琳