我在电路板上使用 MSP430FR5969。 我的 UART 配置为:
// Setting for 16 MHz clock (230400) EUSCI_A_UART_initParam param = {0}; param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK; param.clockPrescalar = 4; param.firstModReg = 5; param.secondModReg = 0x55; param.parity = EUSCI_A_UART_NO_PARITY; param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST; param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT; param.uartMode = EUSCI_A_UART_MODE; param.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION; if (STATUS_FAIL == EUSCI_A_UART_init(EUSCI_A0_BASE, ¶m)) return; EUSCI_A_UART_enable(EUSCI_A0_BASE); EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT); // Enable USCI_A0 RX interrupt EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT); // Enable interrupt
我在 UART RX 上没有封包大小、因此我首先要使用处于中断模式的 UART 来接收第一个字节、然后在接收完所有字节之前禁用中断。 我不能讨论我正在使用的帧技术、但我认为它是有效的。
接收到完整的数据包后、我再次启用 UART 中断。 用于轮询我正在使用的 UART 数据
inline char UART_getChar (void) { while (!(UCA0IFG&UCRXIFG)); // RX buffer got data ? return UCA0RXBUF; }
MSP 每1秒获取一次数据包 我遇到的问题是、随机(可能是10个数据包或2000个以上的数据包)代码在 while 循环 中卡住并旋转(!(UCA0IFG&UCRXIFG); // RX 缓冲区有数据? "。 我知道、电路板每秒都会连续接收数据包。 我检查 了 UCA0IFG、它卡在0。 您能帮助解决此问题吗? 代码是否有问题或这是否是微处理器的问题? 我无法共享我的完整代码。 TIA