请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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 是否有问题?