完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
测试ESP32-S3-WROOM-1U-N8R8模块,自己画的板子,用的串口1默认引脚,写数据一直没有数据写出来,同样程序串口0可以写出来。
请教这样问题的原因是什么?如何解决?谢谢。 #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_system.h" #include "esp_log.h" #include "driver/uart.h" #include "string.h" #include "driver/gpio.h" static const int RX_BUF_SIZE = 1024; #define TXD_PIN (GPIO_NUM_10) #define RXD_PIN (GPIO_NUM_11) void init(void) { const uart_config_t uart_config = { .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .source_clk = UART_SCLK_DEFAULT, }; // We won't use a buffer for sending data. uart_driver_install(UART_NUM_1, RX_BUF_SIZE * 2, 0, 0, NULL, 0); uart_param_config(UART_NUM_1, &uart_config); //uart_set_pin(UART_NUM_1, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_set_pin(UART_NUM_1, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); } int sendData(const char* logName, const char* data) { const int len = strlen(data); const int txBytes = uart_write_bytes(UART_NUM_1, data, len); ESP_LOGI(logName, "Wrote %d bytes", txBytes); return txBytes; } static void tx_task(void *arg) { static const char *TX_TASK_TAG = "TX_TASK1"; esp_log_level_set(TX_TASK_TAG, ESP_LOG_INFO); while (1) { sendData(TX_TASK_TAG, "Hello world"); vTaskDelay(2000 / portTICK_PERIOD_MS); } } static void rx_task(void *arg) { static const char *RX_TASK_TAG = "RX_TASK"; esp_log_level_set(RX_TASK_TAG, ESP_LOG_INFO); uint8_t* data = (uint8_t*) malloc(RX_BUF_SIZE+1); while (1) { const int rxBytes = uart_read_bytes(UART_NUM_1, data, RX_BUF_SIZE, 1000 / portTICK_PERIOD_MS); if (rxBytes > 0) { data[rxBytes] = 0; ESP_LOGI(RX_TASK_TAG, "Read %d bytes: '%s'", rxBytes, data); ESP_LOG_BUFFER_HEXDUMP(RX_TASK_TAG, data, rxBytes, ESP_LOG_INFO); } } free(data); } void app_main(void) { init(); xTaskCreate(rx_task, "uart_rx_task", 1024*2, NULL, configMAX_PRIORITIES, NULL); xTaskCreate(tx_task, "uart_tx_task", 1024*2, NULL, configMAX_PRIORITIES-1, NULL); } |
|
相关推荐
1个回答
|
|
首先,我们需要确保您的代码和硬件设置正确。以下是一些建议和解决方案:
1. 检查硬件连接:确保UART1的TXD和RXD引脚正确连接到您的开发板。ESP32-S3-WROOM-1U-N8R8的默认UART1引脚为TXD1(GPIO_NUM_10)和RXD1(GPIO_NUM_9)。 2. 检查代码中的引脚定义:在您的代码中,TXD_PIN已正确定义为GPIO_NUM_10,但RXD_PIN的定义似乎被截断了。请确保RXD_PIN定义为GPIO_NUM_9,如下所示: ```c #define RXD_PIN (GPIO_NUM_9) ``` 3. 初始化UART:确保您已正确初始化UART1。以下是一个示例初始化代码: ```c uart_config_t uart_config = { .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE }; uart_param_config(UART_NUM_1, &uart_config); ``` 4. 检查串口缓冲区:确保您的串口发送和接收缓冲区足够大,以避免数据丢失。在您的代码中,RX_BUF_SIZE已设置为1024,这应该足够大。 5. 检查串口发送和接收函数:确保您使用了正确的UART发送和接收函数。以下是一个发送和接收数据的示例: ```c // 发送数据 char *data_to_send = "Hello, World!"; size_t data_length = strlen(data_to_send); uart_write_bytes(UART_NUM_1, data_to_send, data_length); // 接收数据 uint8_t rx_buffer[RX_BUF_SIZE]; size_t rx_length = 0; uart_read_bytes(UART_NUM_1, rx_buffer, RX_BUF_SIZE, 1000 / portTICK_PERIOD_MS); ``` 6. 检查串口波特率:确保您的发送和接收设备的波特率设置相同。在您的代码中,波特率已设置为115200。 7. 使用串口调试助手:使用串口调试助手(如PuTTY、Tera Term等)来监控UART1的接收数据,以确保数据被正确发送和接收。 8. 检查电源和地线:确保您的开发板的电源和地线连接正确,以避免电源问题影响串口通信。 9. 检查ESP32-S3-WROOM-1U-N8R8模块:如果可能,请尝试使用另一个ESP32-S3-WROOM-1U-N8R8模块,以排除硬件故障的可能性。 通过以上步骤,您应该能够找到问题的原因并解决UART1调试不通的问题。如果问题仍然存在,请检查您的硬件设计和布线,以确保没有其他问题影响串口通信。 |
|
|
|
只有小组成员才能发言,加入小组>>
1138 浏览 1 评论
576浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
462浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 09:05 , Processed in 0.732133 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号