大家好、我必须为我的项目使用多个 UART 端口-其中一个端口将等待一个关键字并使用相应的字符串进行响应。 我有两个主要问题:
我的接收功能只能接收6个字符而不会混乱-我可以解决这个问题、并且使所有关键字最多只能包含6个字符、但我认为存在一个更大的潜在问题、我需要注意。 我有点卡、我不确定我的错误是什么、如果有任何建议、帮助或指向某个方向、我会非常感激
void EnableUART0 (void) { // //启用 GPIO 和 UART 0 // SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); SysCtlPeripheralEnable (SYSCTL_Periph_UART0); // //为 UART 模式配置 UART 引脚 // GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); UARTClockSourceSet (UART0_BASE、UART_CLOCK_SYSTEM); UARTConfigSetExpClk (UART0_BASE、g_ui32SysClock、115200、UART_CONFIG_WLEN_8 | UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE); 内部寄存器(INT_UART0、UART0Get); IntEnable (INT_UART0); UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT); } void UART0print (const char* text) { const char* p; //迭代`文本`的每个字符, //直到我们到达 NUL 终端器 对于(p =文本;*p!='\0';p++) { //将每个字符传递给某个函数 UARTCharPut (UART0_BASE、*p); } } 空 UART0Get (空) { int i = 0; // if (UARTCharsAvail (UART0_BASE)== true) while (UARTCharsAvail (UART0_BASE)) { Incoming1[i]= UARTCharGetNonBlocking (UART0_BASE); ++I; // int i; // for (i=0;i<21;i++)//可能会将21更改为将来更真实的内容>>> // { // Incoming1[i]= UARTCharGetNonBlocking (UART0_BASE); //} }
我所提到的问题与 UART0Get 函数有关、该函数最多只能使用6个字符、没有问题、例如7、略超过6个字符、 它将消除第一个字符并打印最后6个字符、例如、如果我发送"1234567"、它将仅存储"234567"。 如果我发送大于6的内容、那么它会非常随机地运行、我不明白发生了什么。
在我的主函数中、我尝试使其识别我发送的"Temp"一词、它应使用我目前在测试期间使用的任意字符串值进行回复:
int main (void) { G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); FPUEnable(); //FPURoundingModeSet (FPU_ROUND POS_INF); IntMasterEnable();//使处理器能够响应中断。 //configureUARTTesting(); EnableUART0(); while (1) { UART0print (Incoming1); if (strcmp (Incoming1、"Temp")=0) { UART0print (TempValue); // UART0print (Incoming1); } // UART0print (测试); // UART0print (行); // UART0print (Incoming1); // UART0print (行); // UART0print (电感); // UART0print (行); // UART0print (频率); // UART0print (行); } }
TempValue 只是我之前保存过的一个字符串变量、其外观如下所示
字符 TempValue[]="50 Deg";
Incoming1只是一个字符数组、用于存储通过 UART 发送的传入字符、定义如下
字符 Incoming1[15];
起初、我尝试将 Incoming1保留为一个没有设置空间数的数组、但这会导致更多问题、当我在 Incoming1中键入值(例如在本例中为15)时、这似乎会消失。