我正在使用 MSP430 并用 C 语言编写代码。我通过 UART 接收字符(工作)并将它们放入数组 rxDataArray 中。由于我使用的是 MSP430G2211,因此内存有限。最大数组大小为 50,超过此大小将无法构建/加载并显示空间不足。
我的 MSP430 正在与 ESP8266 模块 (wifi) 通信,我在其中使用“AT”命令。我收到 AT 命令的回显,然后是响应(例如 AT+RST 用 AT+RST 响应...ok)。我对使用 C 感到困惑,如何制作一个只有“ok”响应的字符串并检查它是否正常工作。我在数组中有数据,只是不确定如何选择数组的某些元素,创建一个字符串,并将其与“ok”响应进行比较。我习惯在 C++ 中使用 CString,但很困惑如何在 C 中执行此操作。
/--------------------------------------------------------------------
// Timer_A UART - Receive Interrupt Handler
//-------------------------------------------------------------------
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMERA1_VECTOR))) Timer_A1_ISR (void)
#else
#error Compiler not supported!
#endif
{
static unsigned char rxBitCnt = 8;
static unsigned char rxData = 0;
switch (__even_in_range(TAIV, TAIV_TAIFG)) { // Use calculated branching
case TAIV_TACCR1: // TACCR1 CCIFG - UART RX
TACCR1 += UART_TBIT; // Add Offset to CCRx
if (TACCTL1 & CAP) { // Capture mode = start bit edge
TACCTL1 &= ~CAP; // Switch capture to compare mode
TACCR1 += UART_TBIT_DIV_2; // Point CCRx to middle of D0
}
else {
rxData >>= 1;
if (TACCTL1 & SCCI) { // Get bit waiting in receive latch
rxData |= 0x80;
}
rxBitCnt--;
if (rxBitCnt == 0) { // All bits RXed?
rxBuffer = rxData; // Store in global variable
if (rxDataCnt < 50)
{
rxDataArray[rxDataCnt] = rxBuffer;
rxDataCnt++;
}
else
{
int i = 0;
for (i; i<50-1; i++)
{
rxDataArray[i] = rxDataArray[i+1];
}
rxDataArray[50-1] = rxBuffer;
}
rxBitCnt = 8; // Re-load bit counter
TACCTL1 |= CAP; // Switch compare to capture mode
__bic_SR_register_on_exit(LPM0_bits); // Clear LPM0 bits from 0(SR)
}
}
break;
}
}
//-----------------------------------------------------------------------
最佳答案
您可以通过发送ATE0
命令关闭回显。
此外,要查找预期的字符串响应,请按照以下步骤操作:
启用 UART 发送和接收中断。
完成命令传输后,您将开始在 UART ISR 中接收数据。
在接收中断中启动一个例如 1 秒的计时器(您需要考虑波特率以进行精确计算)。
跟踪 UART ISR 中接收到的字节数。
现在,在计时器到期后,将
null
添加到缓冲区中最后接收到的字节的末尾。
现在,您可以使用 C 的字符串操作函数来查找预期的响应。
关于c - UART接收字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022419/