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/MSP-EXP430FR5994:软件执行在随机时间段和 UART 通信后停止

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/623306/ccs-msp-exp430fr5994-software-execution-stop-after-a-random-time-period-and-uart-communication

器件型号:MSP-EXP430FR5994
主题中讨论的其他器件:MSP430FR5994

工具/软件:Code Composer Studio

我正在使用 MSP430FR5994 Devkit 硬件。 我遇到了以下问题:在 UART 通信期间、软件执行会在一段随机时间后停止。

我的 while 结构:

while (1)

   P1.1引脚上的 LED 切换 (用于示波器跟踪)

   如果(ISRflag=1)
   {
      读取 I2C 传感器数据
      数据转换
      通过 UART 发送数据
   }


我以10ms 的时间间隔查询传感器。 当 UART 数据传输被关闭时、代码运行无任何问题。

当 UART 数据传输打开时、代码执行会在一段随机时间后终止。 这一随机时间周期各不相同、有时会在1分钟后发生、有时会在15-20分钟后发生、等等 在代码执行期间、我测量 P1.1引脚上的方波信号。 当代码执行随机终止时、P1.1的状态显示持续的 L 或 H 电平。

我的 UART 初始化代码:

void uartInit()
{
P2SEL0 &=~(BIT0 | BIT1);
P2SEL1 |= BIT0 | BIT1; // USCI_A0 UART 操作

//将 USCI_A0配置为 UART 模式
UCA0CTLW0 = UCSWRST; //将 eUSCI 置于复位状态
UCA0CTLW0 |= UCSSEL_SMCLK; // CLK = SMCLK 8MHz
UCA0BRW = 4; // 8000000/16/115200bps
UCA0MCTLW |= UCOS16 | UCBRF_5 | 0x5500;// UCBRSx 值= 0x55 (请参阅 UG)
UCA0CTLW0 &=~UCSWRST; //初始化 eUSCI
UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断 
test.newStringReceived = false; }

UART 中断例程:

#pragma vector=EUSCI_A0_VECTOR
__INTERRUPT void USCI_A0_ISR (void)
{
//int receiveByte = UCA0RXBUF;
//UCA0TXBUF = receiveByte;

switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:
中断;

USCI_UART_UCRXIFG 案例:
rts_clear;
CHAR DATA = UCA0RXBUF;//RXBUF0;

//#define ECHO_ON
#ifdef ECHO_ON
while (!(IFG1 & UTXIFG0)); // USART0 TX 缓冲器准备好了吗?
TXBUF0 =数据; // RXBUF0到 TXBUF0
#endif

uartReceive(数据);
if (test.newStringReceived == true){
// _BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);/*退出低功耗模式4 */
}
rts_set;
中断;

USCI_UART_UCTXIFG 案例:
中断;

USCI_UART_UCSTTIFG 案例:
中断;

USCI_UART_UCTXCPTIFG 案例:
中断;

默认值:
中断;
}

__BIC_SR_REGISTER_ON_EXIT (LPM0_Bits);//退出活动 CPU
} 

变速器例行程序:

void sendBytes (int len){

unsigned int i;

for (i = 0;i < len;++I)
{
//等待 UART 就绪
、同时(!(UCA0IFG & UCTXIFG); // USCI_A0 TX 缓冲器就绪?
UCA0TXBUF = test.txString[i];
}
} 

uart_driver.h 文件中的字符串定义:

typedef struct{
unsigned char newStringReceived;
char txString[MAX_STR_LENGTH];
char rxString[MAX_STR_LENGTH];
}end!kadov-->测试;

外部 s_test 测试; 

从 main.c:

while (1)
{
LED2_TOGGLE ();

IF (readDataFlag)
{
readDataFlag = 0;
AFE44xx_SPO2_Data_Buf[0]= AFE4404_Reg_Read (42);//读取 LED2数据
AFE44xx_SPREG_Data_BUf[1]= AFE4404_REG_REG_READ (43);/AFE4404_4

= AFE4420_RE_4 (AFE4_RED2_AD4_4)= AFE4420_4 (AFE4420_4)

//读取 LED1 -环境数据
sendDataFlag = 1;
}

if (sendDataFlag)
{
statHRMAlgo (AFE44xx_SPO2_Data_Buf[5]);
//将 LED2-AMB2与心率覆盖
AFE44xx_SPO2_Data_BUf[4]= HeartRate;

sendDataFlag = 0x430_0[0]&FAFE44xx](

SPO2_0[0]&FAST_FAST_0[0]&FAST_FAST_0]&FAST_FAST_0[0]&FAST_0_0[0]&FAST_FAST_0_FAST_0_0_0_FAST_0_0_FAST_0_0_0_FAST_0[0]&FAST_FAST_FAST_0

test.txString[2]=(unsigned char)((AFE44xx_SPO2_Data_BUf[0]和0x00FF0000)>> 16);

test.txString[3]=(unsigned char)(AFE44xx_SPO2_ST_buf[1]和0xLED3 data test.tx2[0x000_EFA2]+[0x430_FA2]&FAST_000=0x430_000_000_000_000_000_000_000_0004_000_000_000_000_0004_000_000_000_00015_000_000_000_00015_000_000_000_000_000_000_00015_000_000_000_000_000_000_00015_000_000_000_000_000_000_00015_000_000_000_000_000_000_000_00015_000_000_000_000_000_000_00015_000_000_000_000_000_00015_000_000_000_000_000_000_000_000_000_





test.txString[8]=(unsigned char)((AFE44xx_SPO2_Data_BUFF[2]和0x00FF0000)>> 16);

test.txString[9]=(unsigned char)(AFE44xx_SPFIT[3]& HeartFF);//环境数据 test.tx2[tx2]=(unsigned

char)




(0x4400_0[0[0_FAX2]=12](v_FAST_FAST_FA015[0_FF0[0_FAX12](0xFAST_FAX0_FAX0_FAX0_FAX0_FAX12]);(0xFAST_FAST_FAST_FAST_FAST_FF0_0_0[0x24=[0_FAST_0_0_FAST_0_0_FAST_FA0_FA2]=[0_FAST_FA0_FAST_FAST_0_0_FAV0
test.txString[25]=(无符号字符) cr;

printf (test.txString);
sendBytes (16);//发送 UART 数据字符串115200bps & 22byte = 1.90972222ms
}




/*********
*端口3中断服务例程
/

#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=PORT3_vector
__interrupt port3_ISR_handler (void)
#elif defined (__GNU__)
void __attribute__((interrupt (PORT3_vector)))))#elif_isr_isr_iter_iter_port3 (void

Compiler #ele!
#endif
{
switch (__evo_in_range (P3IV、P3IV_P3IFG7))
{
案例 P3IV__NONE:
中断; //向量0:无中断
案例 P3IV_P3IFG0:
中断; //向量2:P1.0中断标志
案例 P3IV_P3IFG1:
中断;//向量4:P1.1中断标志
案例 P3IV_P3IFG2:
中断; //向量6:P1.2中断标志
案例 P3IV_P3IFG3:
中断; //向量8:P1.3中断标志
案例 P3IV_P3IFG4:
中断; //向量10:P1.4中断标志
案例 P3IV_P3IFG5:
中断; //向量12:P1.5中断标志
案例 P3IV_P3IFG6:
LED1_TOGGLE ();//诊断
readDataFlag = 1;//设置标志来读取 AFE44x0 ADC REG 数据
中断; //向量14:P1.6中断标志
案例 P3IV_P3IFG7:
中断; //向量16:P1.7中断标志
默认值:
中断;
}
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您没有向我们展示 UART-Receive(),但我想您正在覆盖缓冲区并对其他一些存储器进行重新编号。