ESP32——串口官方例程改写为主机扫描接收方式

本文介绍如何将原基于从机的UART_events例程修改为支持主机模式,使用GPIO19发送,GPIO18接收,并实现发送数据后等待应答的超时重发功能。内容涉及UART_master.c和.h文件的修改,以及初始化、任务创建和错误处理。

1  改写原因

原例程为“uart_events”。

例程是基于从机方式的,即接收响应的,打算实现一个基于主机方式的,即发送等待应答(带超时处理,失败自动重发2次)。

2  改写内容

硬件上:将串口改为串口2,发送脚GPIO19,接收脚GPIO18。

将例程中串口内容,复制并做部分修改移植到新建的“uart_master.c”和“uart_master.h”文件中。

“uart_master.c”文件内容如下:

#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/uart.h"
#include "esp_log.h"
#include "uart_master.h"

static const char *TAG = "uart_events";

static QueueHandle_t rx_queue;
static uint8_t send_buf[1024]={1,2,3,4,5,6,7,8};
static uint8_t ack_ok = 0;

static void uart_rx_task(void *pvParameters)
{
    uart_event_t event;

    uint8_t* dtmp = (uint8_t*) malloc(1024);
    for(;;) {
        //Waiting for UART event.
        if(xQueueReceive(rx_queue, (void * )&event, (portTickType)portMAX_DELAY)) {
            bzero(dtmp, 1024);
            ESP_LOGI(TAG, "uart[%d] event:", UART_NUM_2);
            switch(event.type) {
                //Event of UART receving data
                /*We'd better handler data event fast, there would be much more data events than
                other types of events. If we take too much time on data event, the queue might
                be full.*/
                case UART_DATA:
   
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值