赞
踩
在ESP32 IDF软件包中其实已经支持了printf函数在UART0
/ UART1
之间进行切换,只需要在Menuconfig
配置项中进行配置然后重新编译即可。
这里以ESP32的HelloWorld
Demo为例进行说明:
打开 esp-idf\examples\get-started\hello_world Demo程序目录,输入 idf.py memuconfig 进入可视化配置项,修改如下目录配置项:
选择:Component config --> Common ESP-related
其中UART TX on GPIO#
和 UART RX on GPIO#
修改为自己需要的端口号。
在BootLoader Console 中有以下代码,这也解释了 ESP32 IDF 的调试串口是在Bootloader中进行初始化的,因此在user_main中不需要在此进行初始化操作。
#ifdef CONFIG_ESP_CONSOLE_UART_NONE void bootloader_console_init(void) { esp_rom_install_channel_putc(1, NULL); esp_rom_install_channel_putc(2, NULL); } #endif // CONFIG_ESP_CONSOLE_UART_NONE #ifdef CONFIG_ESP_CONSOLE_UART void bootloader_console_init(void) { const int uart_num = CONFIG_ESP_CONSOLE_UART_NUM; #if !ESP_ROM_SUPPORT_MULTIPLE_UART /* esp_rom_install_channel_put is not available unless multiple UARTs are supported */ esp_rom_install_uart_printf(); #else esp_rom_install_channel_putc(1, esp_rom_uart_putc); #endif // Wait for UART FIFO to be empty. esp_rom_uart_tx_wait_idle(0); #if CONFIG_ESP_CONSOLE_UART_CUSTOM // Some constants to make the following code less upper-case const int uart_tx_gpio = CONFIG_ESP_CONSOLE_UART_TX_GPIO; const int uart_rx_gpio = CONFIG_ESP_CONSOLE_UART_RX_GPIO; // Switch to the new UART (this just changes UART number used for esp_rom_printf in ROM code). #if ESP_ROM_SUPPORT_MULTIPLE_UART esp_rom_uart_set_as_console(uart_num); #endif // If console is attached to UART1 or if non-default pins are used, // need to reconfigure pins using GPIO matrix if (uart_num != 0 || uart_tx_gpio != UART_NUM_0_TXD_DIRECT_GPIO_NUM || uart_rx_gpio != UART_NUM_0_RXD_DIRECT_GPIO_NUM) { // Change default UART pins back to GPIOs gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_U0RXD_U, PIN_FUNC_GPIO); gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_U0TXD_U, PIN_FUNC_GPIO); // Route GPIO signals to/from pins const uint32_t tx_idx = uart_periph_signal[uart_num].tx_sig; const uint32_t rx_idx = uart_periph_signal[uart_num].rx_sig; PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[uart_rx_gpio]); esp_rom_gpio_pad_pullup_only(uart_rx_gpio); esp_rom_gpio_connect_out_signal(uart_tx_gpio, tx_idx, 0, 0); esp_rom_gpio_connect_in_signal(uart_rx_gpio, rx_idx, 0); // Enable the peripheral periph_ll_enable_clk_clear_rst(PERIPH_UART0_MODULE + uart_num); } #endif // CONFIG_ESP_CONSOLE_UART_CUSTOM // Set configured UART console baud rate uint32_t clock_hz = rtc_clk_apb_freq_get(); #if ESP_ROM_UART_CLK_IS_XTAL clock_hz = UART_CLK_FREQ_ROM; // From esp32-s3 on, UART clock source is selected to XTAL in ROM #endif esp_rom_uart_set_clock_baudrate(uart_num, clock_hz, CONFIG_ESP_CONSOLE_UART_BAUDRATE); } #endif // CONFIG_ESP_CONSOLE_UART #ifdef CONFIG_ESP_CONSOLE_USB_CDC /* Buffer for CDC data structures. No RX buffer allocated. */ static char s_usb_cdc_buf[ESP_ROM_CDC_ACM_WORK_BUF_MIN]; void bootloader_console_init(void) { #ifdef CONFIG_IDF_TARGET_ESP32S2 /* ESP32-S2 specific patch to set the correct serial number in the descriptor. * Later chips don't need this. */ rom_usb_cdc_set_descriptor_patch(); #endif esp_rom_uart_usb_acm_init(s_usb_cdc_buf, sizeof(s_usb_cdc_buf)); esp_rom_uart_set_as_console(ESP_ROM_UART_USB); esp_rom_install_channel_putc(1, bootloader_console_write_char_usb); } #endif //CONFIG_ESP_CONSOLE_USB_CDC
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。