[已解决] ESP32-CAM摄像头应用UART乱码问题求助
Posted: Mon May 20, 2019 2:17 am
我最近使用ESP32-CAM做一个图像采集项目,基于这个代码 https://github.com/InfiniteYuan1/esp32- ... web_server,源代码是没问题的。然后我移除了http和WIFI,也能成功采集到图像。
但是我在初始化串口以后,发现串口定期发送乱码干扰串口输出。开机一段时间后,可以看到uart_write_bytes()和printf()发送的内容在乱码中间可以正常显示。
串口初始化代码:
启动以后我运行了几个软件timer,clock_timer_handle中定时调用uarttest():
摄像头引脚定义,里面没有涉及UART2的12和13引脚:
截图说明:乱码后面部分内容可以识别,其中`uart0 test OK`是uart_write_bytes()发送的,其他可识别内容是printf()发送的。
但是我在初始化串口以后,发现串口定期发送乱码干扰串口输出。开机一段时间后,可以看到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!\r\n" : "failed!\r\n");
//开始创建一个重复周期的定时器并且执行
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!\r\n" : "failed!\r\n");
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!\r\n" : "failed!\r\n");
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