背景

  最近在淘宝发现了合宙通信推出的ESP32C3开发板,价格相对便宜(9.9包邮),官方主要提倡使用luat快速开发,笔者习惯用C/C++开发,邃本文中笔者使用ESP-IDF进行开发。

API函数库及思路

采用与STM32HAL库一样的开发思路,使用串口1作为与外界CH340连接的调试串口(串口0已被下载和调试电路占用)
参考乐鑫的IDF文档

代码

uart.c

#include "main.h" const int RX_BUF_SIZE = 1024;#define TXD_PIN (GPIO_NUM_0)
#define RXD_PIN (GPIO_NUM_1)void uart_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_APB,};// 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);
}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;
}void tx_task(void *arg)
{static const char *TX_TASK_TAG = "TX_TASK";esp_log_level_set(TX_TASK_TAG, ESP_LOG_INFO);while (1) {sendData(TX_TASK_TAG, "Hello world");vTaskDelay(2000 / portTICK_PERIOD_MS);}
}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_RATE_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);
}

uart.h

#ifndef __UART_H
#define __UART_Hextern void uart_init(void);
extern int sendData(const char* logName, const char* data);
extern void tx_task(void *arg);
extern void rx_task(void *arg);#endif

main.h

#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"#include "esp_spi_flash.h"
#include "esp_log.h"#include "driver/uart.h"
#include "string.h"
#include "driver/gpio.h"
#include "uart.h"

Cmakelists.txt

idf_component_register(SRCS "ESP32X_Demo.c""../hal/src/uart.c"INCLUDE_DIRS ".""../hal/inc")

main.c

#include "main.h"void uart_task()
{uart_init();xTaskCreate(tx_task, "uart_tx_task", 1024*2, NULL, configMAX_PRIORITIES-1, NULL);
}void app_main(void)
{//    printf("I Love FPGA and ASICer.\n");
//    fflush(stdout);
//    esp_restart();uart_task();}

实验现象

ESP32C3串口通信相关推荐

  1. 启明云端分享|ESP32-C3 IO口控制灯的应用及串口通信示例

    启明云端作为乐鑫代理,一直都尽最大可能做完善的教程能帮助更多的开发小伙伴快速上手各种应用:今天小明为大家带来ESP32-C3IO口控制灯的应用及串口通信示例,每一个步骤我们都分享出来供小伙伴们参考! ...

  2. ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)

    测试第三课,ESP32-C3的串口通信测试 老样子,使用Enocean无线模块和ESP32-C3进行串口通信. 目录 前言 1.UART示例测试 1.1 UART 基础测试 1.2 与Enocean无 ...

  3. python第三方库之学习pyserial库--串口通信

    pyserial串口通信库 1.安装pyserial库 2.填写串口参数的注意事项 3.简单封装一下 4.碰到的bug 1.安装pyserial库 pip install pyserial versi ...

  4. VC串口通信编程-2

    VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...

  5. Linux ROS与嵌入式的串口通信

    1.根据ros wiki的官方教程 学习即可,并且有许多例子可供学习 http://wiki.ros.org/rosserial_arduino/Tutorials 2.用ASIO读写设备串行口 AS ...

  6. 投影串口测试程序_【原创】串口通信测试程序

    源代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  7. labVIEW与单片机实现串口通信的设计过程

    1.概述 在现代测控系统中,我们经常会采用上位机和下位机的开发控制模式.下位机主要是用来采集数据,可以通过嵌入式控制器.单片机控制器.PLC等来实现.上位机主要是图形界面,用来实时显示采集数据,并进行 ...

  8. chord协议模拟实现_C#.NET和单片机串口通信实现监控单片机数字量输入继电器输出模拟量输入模拟量输出...

    一.必备软件和硬件: 1.C#.NET: 2.单片机开发板: 3.通信电缆. 二.通信参数: 1.数据位:8位 2.校验方式:无校验 3.停止位:1位 4.波特率:9600bps 5.通信协议:自定义 ...

  9. java串口通信DataRecive_串口通信之DataReceive事件触发时机

    环境:Windows PC.本机虚拟COM2连接COM3.串口调试助手COM2发数据 图1 1> ReceivedBytesThreshold为默认值1:2> 一次发送41个字节:3> ...

最新文章

  1. 在Python中检查类型的规范方法是什么?
  2. 深入浅出: Java回调机制(异步)
  3. 使用 python 获取 httpd 程序所占用物理内存
  4. [翻译]你或许还未听说过的一些ASP.NET 2.0要诀
  5. amd为什么还用针脚_为什么AMD不取消cpu上的针脚?
  6. python中三级菜单讲解_Python字典实现简单的三级菜单(实例讲解)
  7. Java开发环境!为什么MySQL不推荐使用uuid作为主键
  8. Go语言实战 : API服务器 (2) 运行流程
  9. mongoDB 使用手册
  10. linux rps值大小,Linux系统中RPS/RFS介绍
  11. Android模拟器卡死的解决方案
  12. GnuTLS recv error (-54): Error in the pull function(解决方法)
  13. MSNP18协议分析(一)--- MSN协议介绍
  14. android当无线鼠标代码,如何将安卓手机变身为无线鼠标
  15. 日常生活记账,如何将所有账目打印
  16. 笔记本内置键盘的外接改造(上篇)
  17. Java List 过滤重复数据
  18. excel 导入文本数据乱码问题
  19. python 使用twilio免费发送短信
  20. driller fuzz arm问题解决记录

热门文章

  1. [codeforces366C]Dima and Salad
  2. docker修改容器内nginx配置文件
  3. VVC/VSEI 高层语法
  4. 计算机公式above,word表格中求和公式是SUM(ABOVE).请问:括号中ABOVE是什么意思呢?
  5. Java Agent 型内存马调试系列 (一)
  6. 惠普总裁孙振耀的退休感言
  7. AppStore上架过程记录(五)-后记
  8. Edge浏览器,找不到本地书签或收藏夹更新时丢失了,我该怎样找回?
  9. 胡适最著名演讲:天下没有白费的努力!
  10. 腾讯ISUX:精益设计 “纸上谈兵”的说服力