Other Parts Discussed in Thread: MSP430FR2111, MSP-FET
器件型号: MSP430FR2111
主题中讨论的其他器件: MSP-FET
感谢论坛上的每个人的支持。
我正在使用基于 FRAM 的 MCU MSP430FR2111 来开发应用。
我的目标是使用 4 字节的 FRAM 作为非易失性存储器、因此我编写了以下程序代码(摘录)。
使用 CCS 进行调试时、我确认监视变量在递增时发生变化、我认为可以按预期工作。 然而、在通过闪存对器件进行编程并运行之后、FRAM 变量保持为 0 并且没有改变。
我不熟悉 MSP430 编程、目前无法了解导致此问题的原因。
很抱歉抽出时间、但我非常感谢您提供的任何建议或指导。
我们省略了初始化部分、并摘录了似乎与它无法按预期运行的原因相关的部分。
即使关闭电源、我们也希望存储在 FRAM 中的变量的名称是累计_距离。 它是 4 字节的无符号长整型值。
为此、当写入并运行该源程序时、变量保持为 0 且不会递增。
但是、在使用 CCS 进行调试时、它确实会递增...
非常感谢您的合作。
//----------------------------------------------------------------------------------------
#include
#include
#pragma PERSISTENT(累计距离)
uint32_t umulated_distance = 0;
易失性 uint8_t inc_flag = 0;
__interrupt void Port_1 (void);
#define MCLK_FREQ_MHz 1. // MCLK = 1MHz
int main (void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
SYSCFG0 = FRWPPW;
__bis_SR_register (SCG0); //禁用 FLL
CSCTL3 = SELREF__REFOCLK; //将 REFO 设置为 FLL 基准源
CSCTL1 = DCOFTRIMEN_0 | DCORSEL_0; // DCO 范围= 1MHz
CSCTL2 = FLLD_0 + 30; // DCODIV = 1MHz
__ delay_cycles (3);
__ BIC_SR_REGISTER (SCG0); //启用 FLL
CSCTL4 = SELMS_DCOCLKDIV | SELA__REFOCLK;//将默认 REFO (~32768Hz) 设置为 ACLK 源、ACLK = 32768Hz
//默认 DCODIV 作为 MCLK 和 SMCLK 来源
while (1)
{
__ low_power_mode_3 ();
//
if (inc_flag){
累计距离++;
INC_FLAG = 0;
}
}
}
//端口 1.x 中断服务例程
pragma vector=PORT1_vector
__interrupt void Port_1 (void)
{
if (P1IFG 和 BIT3){
INC_FLAG = 1;
P1IFG 且=~BIT3;
__BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);
}
}

