完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我最近使用ESP32-CAM做一个图像采集项目,基于这个代码 https://github.com/InfiniteYuan1/esp32- ... web_server,源代码是没问题的。然后我移除了http和WIFI,也能成功采集到图像。
但是我在初始化串口以后,发现串口定期发送乱码干扰串口输出。开机一段时间后,可以看到uart_write_bytes()和printf()发送的内容在乱码中间可以正常显示。 串口初始化代码:Code: Select all #define RX0_BUF_SIZE (1024)#define TX0_BUF_SIZE (512)#define RX2_BUF_SIZE (1024)#define TX2_BUF_SIZE (512)#define TXD2_PIN (GPIO_NUM_12)#define RXD2_PIN (GPIO_NUM_13)static QueueHandle_t uart0_queue;static QueueHandle_t uart2_queue;void uart_init(void){ //串口参数配置->uart0 uart_config_t uart0_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_0, &uart0_config); //设置串口 uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); //注册串口服务即使能+设置缓存区大小 uart_driver_install(UART_NUM_0, RX0_BUF_SIZE * 2, TX0_BUF_SIZE * 2, 20, &uart0_queue, 0); //串口参数配置->uart2 uart_config_t uart2_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_2, &uart2_config); //设置串口 //IO映射-> T:IO12 R:IO13 uart_set_pin(UART_NUM_2, TXD2_PIN, RXD2_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); //注册串口服务即使能+设置缓存区大小 uart_driver_install(UART_NUM_2, RX0_BUF_SIZE * 2, TX0_BUF_SIZE * 2, 20, &uart2_queue, 0);} Code: Select all void app_uart_main(){ uart_init();}void uarttest(){ uart_write_bytes(UART_NUM_0, " uart0 test OK ", strlen(" uart0 test OK ")); } 启动以后我运行了几个软件timer,clock_timer_handle中定时调用uarttest():Code: Select all err = esp_timer_create(&ntp_timer_arg, &ntp_timer_handle); err = esp_timer_start_once(ntp_timer_handle, 5 * 1000 * 1000); printf("ntp_timer创建状态码: %s", err == ESP_OK ? "ok!rn" : "failed!rn"); //开始创建一个重复周期的定时器并且执行 err = esp_timer_create(&camera_timer_arg, &camera_timer_handle); err = esp_timer_start_periodic(camera_timer_handle, 10 * 1000 * 1000); printf("camera_timer创建状态码: %s", err == ESP_OK ? "ok!rn" : "failed!rn"); err = esp_timer_create(&clock_timer_arg, &clock_timer_handle); err = esp_timer_start_periodic(clock_timer_handle, 1 * 1000 * 1000); printf("clock_timer创建状态码: %s", err == ESP_OK ? "ok!rn" : "failed!rn"); 摄像头引脚定义,里面没有涉及UART2的12和13引脚:Code: Select all #elif CONFIG_CAMERA_MODEL_AI_THINKER#define PWDN_GPIO_NUM 32#define RESET_GPIO_NUM -1#define XCLK_GPIO_NUM 0#define SIOD_GPIO_NUM 26#define SIOC_GPIO_NUM 27#define Y9_GPIO_NUM 35#define Y8_GPIO_NUM 34#define Y7_GPIO_NUM 39#define Y6_GPIO_NUM 36#define Y5_GPIO_NUM 21#define Y4_GPIO_NUM 19#define Y3_GPIO_NUM 18#define Y2_GPIO_NUM 5#define VSYNC_GPIO_NUM 25#define HREF_GPIO_NUM 23#define PCLK_GPIO_NUM 22 截图说明:乱码后面部分内容可以识别,其中`uart0 test OK`是uart_write_bytes()发送的,其他可识别内容是printf()发送的。 |
|
相关推荐
1个回答
|
|
以下是一些建议和解决方案,帮助您解决ESP32-CAM摄像头应用UART乱码问题:
1. 检查串口初始化设置: 确保您的串口初始化设置正确。检查波特率、数据位、停止位和校验位是否与接收端设备匹配。以下是ESP32的串口初始化示例代码: ```c #include "driver/uart.h" void uart_init() { 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_0, &uart_config); uart_driver_install(UART_NUM_0, RX0_BUF_SIZE * 2, TX0_BUF_SIZE * 2, 10, 0, NULL, 0); } ``` 2. 检查串口缓冲区大小: 确保您的串口缓冲区大小足够大,以避免溢出。您已经定义了RX0_BUF_SIZE和TX0_BUF_SIZE,但请确保它们的值足够大以容纳预期的数据量。 3. 检查串口中断: 如果您使用了串口中断,请确保中断处理函数正确实现,并且没有导致乱码的问题。检查中断服务程序中的代码,确保没有意外地修改了串口寄存器或缓冲区。 4. 检查其他硬件问题: 确保您的硬件连接正确,没有接触不良或线路干扰。检查电源、地线和信号线是否连接正确,以及是否有可能的电磁干扰。 5. 使用软件滤波器: 如果问题仍然存在,您可以尝试使用软件滤波器来消除乱码。例如,您可以在接收到的数据中添加一个简单的滤波器,只保留有效的数据。 6. 更新ESP32固件: 确保您的ESP32固件是最新的,以修复可能的已知问题。您可以从Espressif的官方GitHub仓库下载最新的ESP-IDF。 7. 检查代码中的其他潜在问题: 仔细检查您的代码,确保没有其他地方可能导致乱码。例如,检查是否有其他函数或库函数在不经意间修改了串口设置或缓冲区。 8. 使用串口调试助手: 使用串口调试助手(如PuTTY、Tera Term等)来观察串口通信,以便更好地了解问题所在。 |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 18:50 , Processed in 0.749756 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号