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.

[参考译文] MSP430I2020:UART RX 中断读取错误的数据?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/769859/msp430i2020-uart-rx-interrupt-reading-wrong-data

器件型号:MSP430I2020

您好! 我使用 MSP432通过 RS485向 MSP430发送 UART 数据。 问题在于 MSP430只读取0xFF 和0xFE、并且每两个字节中只接收一个。

这是我的原理图:

这是我的代码:

int NUM_OF_TX_Bytes = 0;

char UART_rxBuffer[UART_buffer_size];
volatile UINT32_t xferIndex = 0;
char UART_txBuffer[UART_buffer_size];

volatile bool uartRxFlag = false;

void UART_init (void)
{
对于16384000上带有 SMCLK 的9600 UART、//配置
// software-dl.ti.com/.../index.html
EUSCI_A_UART_initParam uartConfig ={
EUSCI_A_UART_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
106、 // BRDIV = 8
10、 // UCxBRF = 14
206、 // UCxBRS = 34
EUSCI_A_UART_NO_奇 偶校验、 //无奇偶校验
EUSCI_A_UART_LSB_FIRST、 // LSB 优先
EUSCI_A_UART_One_stop_bit、 //一个停止位
EUSCI_A_UART_MODE、 // UART 模式
EUSCI_A_UART_oversampling_BAUDRATE_generation //过采样波特率
};

//配置引脚
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_Function);

//配置和启用 UART 外设
EUSCI_A_UART_INIT (EUSCI_A0_BASE、uartConfig);
EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);
EUSCI_A_UART_enableInterrupt (eUSCI_A0_BASE、EUSCI_A_UART_RECEIVE_INTERRUPT);
}

#if defined (_TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A0_VECTOR
_ interrupt
#Elif defined (__GICR_ENIFT_UCISPIAR_ENIFT_A0_
(_)_(_ENCISPIC_)_ void (_A0)_ USCIART_ENIFT_ENIFT_A0_(_ENIF_EN


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

UART_rxBuffer[xferIndex++]= EUSCI_A_UART_receiveData (EUSCI_A0_BASE);
if (UART_rxBuffer[xferIndex - 1]='\0')
{
xferIndex = 0;//如果在数组末尾,则重置索引
uartRxFlag = true;
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//唤醒
}

中断;
案例 USCI_UART_UCTXIFG:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
默认值:break;
}
} 

我已经使用了一个逻辑分析仪来验证并且我确认数据正确到达 MSP430、在引脚 UART_A0_RXD 上(例如消息:"0;1\0")。 我在 RX ISR 内部放置一个断点、它每两个字节命中一次、RX 缓冲区也只包含0xFF 或0xFE。

出什么问题了? 我的代码或 MCU 是否有问题?

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

    这听起来好像波特率是错误的。

    Wiki 上的 USCI UART 计算器提供了不同的值。 您确定 SMCLK 是正确的吗? (尝试输出到 P1.1。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。 我在 CS 配置代码中没有看到 SMCLK 被8分频。