大家好、
我已使用以下设置设置 UART
writeDataMode = UART_DATA_TEXT;
readDataMode = UART_DATA_TEXT;
readReturnMode = UART_RETURE_NEWLINE;
readEcho = UART_ECHO_OFF;
波特率= 115200;
readTimeout = 200;
writeTimeout = 400;
当我尝试从 GPIO 按钮 ISR 读取一些 UART 数据时、我会遇到问题。
当没有可供读取的数据时、并且每当来自按钮 ISR 的 UART_READ (uartA2Handle、input、sizeof (input))尝试读取时、它都会返回输入缓冲区的大小、并且每个缓冲区索引都保持'0x0E'。 相反、它应该返回零。
当从任务调用时,它工作正常。
有关详细信息、请参阅以下代码。
*==== gpioButtonFxn0 === * Board_GPIO_BUTTON0上 GPIO 中断的回调函数。 */ void gpioButtonFxn0 (uint_least8_t index) { 字符输入[100]; int rxlen = 0; memset (input、0、sizeof (input)); /*清除 GPIO 中断并切换 LED */ GPIO_TOGGLE (Board_GPIO_LED0); rxlen = uart_read (uartA2Handle、input、sizeof (input));//此处 rxlen 在没有可读数据时仍为100。 while (1); } /* === mainThread ==== // void * mainThread (void * arg0) { /*调用驱动程序初始化函数*/ GPIO_init(); UART_INIT(); uartA2Params.writeDataMode = UART_DATA_TEXT; uartA2Params.readDataMode = UART_DATA_TEXT; uartA2Params.readReturnMode = UART_return_NEWLINE; uartA2Params.readEcho = UART_ECHO_OFF; uartA2Params.baudrate = 115200; uartA2Params.readTimeout = 200; uartA2Params.writeTimeout = 400; uartA2Handle = UART_OPEN (Board_UART1、&uartA2Params); if (uartA2Handle ==空) { /* UART_open()失败*/ while (1); } /*配置 LED 和按钮引脚*/ GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); GPIO_setConfig (Board_GPIO_LED1、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); GPIO_setConfig (Board_GPIO_BUTTON0、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_INT_FALLING); /*打开用户 LED */ GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON); /*安装按钮回调*/ GPIO_setCallback (Board_GPIO_BUTTON0、gpioButtonFxn0); /*启用中断*/ GPIO_enableInt (Board_GPIO_BUTTON0); 睡眠(2); 字符输入[100]; int rxlen = 0; memset (input、0、sizeof (input)); /*清除 GPIO 中断并切换 LED */ GPIO_TOGGLE (Board_GPIO_LED0); rxlen = uart_read (uartA2Handle、input、sizeof (input));//此处在没有要读取的数据时、在 uart_read()之后 rxlen 变为零。 while (1); 返回(NULL); }
此致、
Keshav Aggrarwal