This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP432P401R:调试MSP432 UC时代码编写器工作室崩溃

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/640769/ccs-msp432p401r-code-composer-studio-crash-while-debugging-msp432-uc

部件号:MSP432P401R

工具/软件:Code Composer Studio

大家好,我一直在使用MSP432红板,当CCS突然崩溃时,这很奇怪,因为当使用另一个MSP432红板时一切正常。 所有这些都是在我加载其中一个代码后开始的,我不会再补充一个代码,但它是其中一个...

第一个代码:

/* DriverLib包括*/
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>/*

Standard包括*/
#include <stdint.h>

#include <stdbool.h>

#define frecuencia_clk 2560
#define frecuencia_mue (frecuencia_mspool_100 Timer*)


配置
参数
=1
Timer_A_CLOCKSOURCE_SMCLK,
Timer_a_CLOCKSOURCE_diver_1,
frecuencia_clk,
Timer_a_CAPTURECOMPare_register_1,
Timer_a_OUTPUTMODE_RESET_SET,
128
};

Timer_a_PWMConfig pwmConfig2 =
{
Timer_A_CLOCKSOURCE_SMCLK,
Timer_a_CLOCKSOURCE_diver_1,
frecuencia_clk,
Timer_a_CAPTURECOMPare_register_2,
Timer_a_OUTPUTMODE_RESET_SET,
128
};

Timer_a_PWMConfig pwmConfig3 =
{
Timer_A_CLOCKSOURCE_SMCLK,
Timer_a_CLOCKSOURCE_diver_1,
frecuencia_clk,
Timer_a_CAPTURECOMPare_register_3,
Timer_a_OUTPUTMODE_RESET_SET,
128
};

Timer_a_PWMConfig pwmConfig4 =
{
Timer_A_CLOCKSOURCE_SMCLK,
Timer_a_CLOCKSOURCE_diver_1,
frecuencia_clk,
Timer_a_CAPTURECOMPare_register_4,
Timer_a_OUTPUTMODE_RESET_SET,
128
};

易失性int i,j;

int main (void)
{
/*停止监视程序*/
MAP_WDT_A_HoldTimer();

/*设置闪存等待状态*/
MAP_FlashCTL_setWaitState(FLASH_BANK0, 2);
MAP_FlashCTL_setWaitState(FLASH_Bank1,2);

/*将MCLK设置为REFO,低频模式为128Khz
*将SMCLK设置为64Khz */
MAP_CS_setDCOCenteredFrequency (CS_DCO_Frequency_48);
MAP_CS_setReference振 荡器频率(CS_REFO_128KHZ);
MAP_CS_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
MAP_CS_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
MAP_PCM_setPowerState(PCM_AM_LH_VCORE0);

/*将2.4 和2.5 配置为PWM的外设输出和按钮的WFP 1.1
*中断*/
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN4,GPIO主要模块功能);
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO端口5,GPIO主要模块功能);
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN6,GPIO主要模块功能);
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO PIN7,GPIO主要模块功能);


MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);

/*将Timer_A配置为具有大约500ms和的周期
* 10 % 的初始占空比(3200 tick)*


/*启用中断并启动监视程序计时器*/
MAP_Interrupt_enableInterrupt (INT_Port1);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Interrupt_enableMaster();

MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig1);
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig2);
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig3);
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig4);
/*不使用时休眠*/
同时(1)
{

}
}/*

端口1 ISR -此ISR将通过
按一下按钮
*/
void Port1_IRQHandler(void){来逐步增加PWM *的占空比

UINT32_t状态= MAP_GPIO _getEnabledInterruptStatus (GPIO端口P1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);
IF (状态和GPIO _PIN1)
{
IF (pwmConfig1.dutyCycle == frecuencia_Mue和pwmConfig2.dutyCycle == frecuencia_Mue/10)
{
pwmConfig1.dutyCycle = frecuencia_Mue/10;
pwmConfig2.dutyCycle = frecuencia_Mue;
}
否则
{
pwmConfig1.dutyCycle += frecuencia_Mue/10;
pwmConfig2.dutyCycle -= frecuencia_Mue/10;
}
MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig1);
MAP_Timer_a_generatePWM(timer_A0_base,&pwmConfig2);}

}

第二个代码:

/* DriverLib定义*/
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>/*

标准定义*/
#include <stdint.h>
#include <stdbool.h>
#include <string.h>/*

I2C从属地址*/
#define slaver_address 0x68
#define NUM_OF_REC_Bytes 14

/* Variables */
const uint8_t TXData[2]={0x6b,0x00};
静态uint8_t RXData[NUM_OF_REC_Bytes];
静态uint16_t Masteromet[3];

静态易失性UINT32_t smclk;
//I2_static





易失性状态I2I2_I2_I2_static =

静态易失性I2_I2_I2_I2_I2_statut_I2_I2_I2_I2_I2_I2_static
EUSCI_B_I2C_CLOCKSOURCE_SMCLK, // SMCLK时钟源
300万, // SMCLK = 3MHz
EUSCI_B_I2C_SET_DATA_RATE_400KBPS, //所需的I2C时钟为100kHz
0, //无字节计数器阈值
EUSCI_B_I2C_NO_AUTO_STOP //无自动停止
};

int main(void){

/*禁用监视程序*/
MAP_WDT_A_HoldTimer();

MAP_FPU_enableModule();
cs_setDCOFrequency(3000万);
// cs_setDCOCenteredFrequency(300万);
cs_initClockSignal (CS_SMCLK,CS_DCOCLK_SELECT,CS_Clock_diver_4);
smclk = CS_getSMCLK();

INT I = 0;
INT T = 1万;

对于(i = 0;i <= T;I++)

MAP_GPIO_setAsPeripheralModuleFunctionInputPin (GPIO端口P1,GPIO_PIN6 + GPIO_PIN7,GPIO主要模块功能);
stopSent =假;
memset (RXData,0x00,NUM_OF_REC_Bytes);

对于(i = 0;i <= T;I++)

MAP_I2C_INITMaster (EUSCI_B0_BASE,&i2cConfig); //在100kHz的频率下将I2C主设备初始化至SMCLK,不带自动停止功能
MAP_I2C_setSlaveAddress (EUSCI_B0_BASE,SLAVE_ADDRESS); //指定从属地址
MAP_I2C_enableModule (EUSCI_B0_BASE); //启用I2C模块以启动操作
MAP_Interrupt_enableInterrupt (INT_EUSCIB0);
MAP_Interrupt_enableSleepOnIsrExit();

对于(i = 0;i <= T;I++)

I2C_masterSendMultiByteStart (EUSI_B0_BASE,TXData[0]);
同时(MAP_I2C_MASTOISStopSent (EUSCI_B0_BASE));
I2C_masterSendMultiByteFinish (EUSI_B0_BASE,TXData[1]);
同时(MAP_I2C_MASTOISStopSent (EUSCI_B0_BASE));

对于(i = 0;i <= T;I++)

同时(1)
{
同时(MAP_I2C_MASTOISStopSent (EUSCI_B0_BASE));
interrup_enableSleepOnIsrExit();
I2C_masterSendMultiByteStart (EUSI_B0_BASE,0x3B);

xferIndex = 0;
I2C_masterReceiveStart (EUSCI_B0_BASE);
I2C_enableInterrupt (EUSI_B0_BBASE,EUSI_B_I2C_receive _INTERRUPT0);
PCM_gotoLPM0InterruptSafe ();

}
}/***************************************************************************************


* eUSCIB0 ISR。 此
ISR内发生重复的启动和发送/接收操作*。
***************** /
void EUSCIB0_IRQHandler (void)
{
状态= I2C_getEnabledInterruptStatus (EUSI_B0_BASE);
I2C_clearInterruptFlag (EUSI_B0_BASE,STATUS);

IF (状态和EUSCI_B_I2C_Receive_INTERRUPT0)
{
IF (xferIndex == NUM_OF_REC_Bytes -1)
{
I2C_enableInterrupt (EUSI_B0_BBASE,EUSI_B_I2C_STOP_INTERRUPT);
I2C_DisableInterrupt (EUSI_B0_BASE,EUSI_B_I2C_Receive_INTERRUPT0);
//

I2C_masterReceiveMultiByteStop (EUSCI_B0_BASE);
RXData[xferIndex+]= I2C_masterReceiveMultiByteNext(EUSI_B0_base);

}
否则
{
RXData[xferIndex+]= MAP_I2C_masterReceiveMultiByteNext(EUSI_B0_base);
}
}


否则,如果(状态和EUSCI_B_I2C_STOP_INTERRUPT)
{

interrupT_disableSleepOnIsrExit();
I2C_DisableInterrupt (EUSI_B0_BBASE,EUSI_B_I2C_STOP_INTERRUPT);

Aceleromet[0]= RXData[0]<< 8 | RXData[1];
Aceleromet[1]= RXData[2]<< 8 | RXData[3];
Aceleromet[2]= RXData[4]<< 8 | RXData[5]

;}



}

我觉得它与时钟配置有关,因为当我使用命令时会出现以下问题:

cs_setDCOFrequency(4800万); 

这会阻止代码,我不知道为什么。

有人知道该怎么做吗?我的msp432被毁了? 有一种方法可以解决此问题?

提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是什么版本的driverLib/SDK? 由于您使用的是48Mhz,您是否可以尝试centeredFrequency API?

    MAP_CS_setDCOCenteredFrequency (CS_DCO_Frequency_48);

    Chris