大家好、
芯片: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天后关闭后无法打开。
此致、
凯瑟琳