This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
我已使用以下设置设置 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
您好!
我们将仔细研究它、尽快返回给您。 请多多包涵。
谢谢、
PM
您好!
我想回调中的 while (1)可能是问题所在。
谢谢、
您好、FI、
我在回调中添加了 while (1)以进行调试、这样我就可以设置断点并查看缓冲区的内容。
此致、
Keshav Aggrarwal
您好 Keshav、
我尝试重复您的问题、但我没有看到同样的问题。 我的缓冲区返回所有零。
此致、
您好、FI、
我刚刚发现 GPIO 外设和 UART 具有相同的中断优先级。 这肯定会导致该问题。
我将为 UART 提供比 GPIO 输入引脚更高的优先级、并将很快更新。
BR、
Keshav Aggrarwal