我在电路板上使用 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