RISC-V技术论坛
直播中

游走在01的海洋

4年用户 217经验值
擅长:可编程逻辑 嵌入式技术 接口/总线/驱动 控制/MCU
私信 关注

【乐鑫ESP32-C3 RISC-V处理器IoT开发板试用体验】---UART回调

本帖最后由 游走在01的海洋 于 2021-8-9 10:52 编辑

一、示范
1.简介:使用~esp-idfexamplesperipheralsuartuart_echo例程;使用前将此工程复制到自己创建的工程文件夹中;
2.杜邦线所对应引脚
//绿色  TX(21)      
//红色  RX(20)
//蓝色  GND
3.图片:硬件---开发板、杜邦线、串口模块
远拍.jpg 近拍.jpg
二、代码
1.
  1. /**
  2. * This is an example which echos any data it receives on configured UART back to the sender,
  3. * with hardware flow control turned off. It does not use UART driver event queue.
  4. *
  5. * - Port: configured UART
  6. * - Receive (Rx) buffer: on
  7. * - Transmit (Tx) buffer: off
  8. * - Flow control: off
  9. * - Event queue: off
  10. * - Pin assignment: see defines below (See Kconfig)
  11. */
  12. /**********************************串口引脚宏定义**************************************************/
  13. #define ECHO_TEST_TXD 21//(CONFIG_EXAMPLE_UART_TXD) //修改为ESP32-C3-DevKitM-1开发板对应的TX串口号
  14. #define ECHO_TEST_RXD 20//(CONFIG_EXAMPLE_UART_RXD) //修改为ESP32-C3-DevKitM-1开发板对应的RX串口号
  15. #define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
  16. #define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)
  17. /**********************************与CPU的串口安装有关系**************************************************/
  18. #define ECHO_UART_PORT_NUM (CONFIG_EXAMPLE_UART_PORT_NUM) //此声明在sdkconfig.h文件中,sdkconfig.h随文件的不同而不同,所以不需自己设置?
  19. #define ECHO_UART_BAUD_RATE (CONFIG_EXAMPLE_UART_BAUD_RATE)
  20. #define ECHO_TASK_STACK_SIZE (CONFIG_EXAMPLE_TASK_STACK_SIZE)

  21. #define BUF_SIZE (1024)

  22. static void echo_task(void *arg)
  23. {
  24. /**********************************串口结构体uart_config_t定义***************************************/
  25. /* Configure parameters of an UART driver,
  26. * communication pins and install the driver */
  27. uart_config_t uart_config = {
  28. .baud_rate = ECHO_UART_BAUD_RATE,
  29. .data_bits = UART_DATA_8_BITS,
  30. .parity = UART_PARITY_DISABLE,
  31. .stop_bits = UART_STOP_BITS_1,
  32. .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
  33. .source_clk = UART_SCLK_APB,
  34. };
  35. int intr_alloc_flags = 0;//串口函数uart_driver_install中的中断设置,具体查看 esp_intr_alloc.h文件

  36. #if CONFIG_UART_ISR_IN_IRAM
  37. intr_alloc_flags = ESP_INTR_FLAG_IRAM;
  38. #endif
  39. /*******************************************串口配置过程********************************************/
  40. //1.安装串口驱动程序(软件上) ---个人理解为:开启串口这个模块,并告知整个系统串口模块已开启,并配置了开启后的一些参数
  41. ESP_ERROR_CHECK(uart_driver_install(ECHO_UART_PORT_NUM, BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags));
  42. //2.串口具体参数配置(波特率、数据位数、停止位、校验位、硬件流控、时钟)
  43. ESP_ERROR_CHECK(uart_param_config(ECHO_UART_PORT_NUM, &uart_config));
  44. //3.串口的引脚配置
  45. ESP_ERROR_CHECK(uart_set_pin(ECHO_UART_PORT_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS));

  46. // Configure a temporary buffer for the incoming data
  47. uint8_t *data = (uint8_t *) malloc(BUF_SIZE);
  48. /*******************************************串口执行函数********************************************/
  49. while (1) {
  50. // Read data from the UART
  51. int len = uart_read_bytes(ECHO_UART_PORT_NUM, data, BUF_SIZE, 20 / portTICK_RATE_MS);//每隔20ms从串口接收缓存中读一次数据
  52. // Write data back to the UART
  53. uart_write_bytes(ECHO_UART_PORT_NUM, (const char *) data, len);//如果数据为空(len=0),则返回0;
  54. }
  55. }

  56. void app_main(void)
  57. {
  58. /***************************************申请了一个任务******************************************/
  59. xTaskCreate(echo_task, "uart_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL);
  60. }
2.硬件连接好之后;在ESP-IDF命令工具中编译、下载,打开对应串口工具,发送数据有回复;
三、结果
1.使用USB转串口模块---COM4(我的电脑所识别的)
串口回显.JPG
2.USB下载口可识别的端口号---COM7
串口回显COM7.JPG
四、ESP32-C3-DevKitM-1模块中的串口解释
1.ESP32-C3-DevKitM-1串口引脚
ESP32-C3-DevKitM-1管脚布局.JPG
2.ESP32-C3的串口介绍
1.JPG
五、扩展---串口引脚设置为其他引脚
1.查看ESP32-C3的外设管脚分配---UART
外设管脚分配.JPG
2.修改串口TX(21) 为IO7,RX(20)为IO6
代码中串口引脚改为6-7引脚.JPG
3.结果
1)此时串口数据可以通过IO7、IO6发送和接收;
2)但是此时打开USB下载口的串口后,并不能使用串口回调;
ps:结果图片加载不上去!!!

更多回帖

发帖
×
20
完善资料,
赚取积分