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.
我为 UART 编写了以下代码。
如果我分步调试这个代码(逐行)、并且在断点的帮助下、代码将数据发送到 UART。 当我进入完全运行模式时,编译器生成错误:内部错误:(状态),状态= 0x1,停止= 0x1,周期= 0x12a4fd80。
因此、问题是:
此错误 来自编译器端或代码中。
最初、我写入了1分钟延迟 @while 循环的最后一行(_delay_cycles (60000000)。 我认为 该内部误差是由于这种长时间延迟造成的。 因此、我将延迟降低至(6000)。 但误差没有得到解决。 实际上、我希望每隔1分钟向 UART 发送一次数据。
我还在编译器设置中进行了较高的优化级别。 但错误未得到解决。
指导我如何解决此错误。
#include
#include
易失性 int Send_Data[]={0xE1、0x10、0x00、0x00、0xFE、 0xFF、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x01、 0x10、0x0F、0x00、0x7E};
内部标记;
int Index = 0;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//配置 GPIO
PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
//激活1个先前配置的端口设置
P1DIR |= BIT2;
P1SEL0 |= BIT6 | BIT7;//将2个 UART 引脚设置为第二功能
//配置 UART
UCA0CTLW0 |= UCSWRST;
UCA0CTLW0 |= UCSSEL_1;//将 ACLK 设置为 BRCLK
//波特率计算。 请参阅 UG 17.3.10
//(1) N=32768/4800=6.827
//(2) OS16=0、UCBRx=INT (N)=6
//(4)分数部分= 0.827。 参考 UG 表17-4、UCBRSx=0xEE。
UCA0BR0 = 3;// INT (32768/4800)
UCA0BR1 = 0x00;
UCA0MCTLW = 0x9200;
UCA0CTLW0 &=~UCSWRST;//初始化 eUSCI
// UCA0IE |= UCTXIE;//启用 USCI_A0 RX 中断
_bis_SR_register (GIE);//输入 LPM3、中断被启用
while (1)
{
P1OUT &=~BIT2;
标记= 19;
_DELAY_CYCLES (1000);
UCA0IE |= UCTXIE;
while (标记!= 0)
{
__no_operation();
}
UCA0IE &=~UCTXIE;
P1OUT |= BIT2;
_delay_cycles (6000);
}
}
//////////////////////////// TX 和 RX ISR ////////////////////////////////////////
#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)
{
switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:中断;
USCI_UART_UCRXIFG 案例:
中断;
USCI_UART_UCTXIFG 案例:
标记----;
UCA0TXBUF =发送数据[Mark];
索引++;
中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
默认值:break;
}
}
此致、
Kelvin Kalariya