ESP32 学习笔记【4】:Ubuntu+VScode+ESP-IDF+ESP32-WROOM-32+实现UART接收指定数据控制亮灯模式

串口还是比较简单的,终于顺利了一回。啊哈哈哈。

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include "driver/gpio.h"


#define ECHO_TEST_TXD  (GPIO_NUM_1)//串口发送IO口
#define ECHO_TEST_RXD  (GPIO_NUM_3)//串口接收IO口
#define ECHO_TEST_RTS  (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS  (UART_PIN_NO_CHANGE)
#define EX_UART_NUM UART_NUM_0//串口号
#define BLINK_GPIO 2//灯的IO口

#define BUF_SIZE (1024)
char UART0_RX_data[BUF_SIZE];//串口0接收数据数组
/*------------------------------------串口任务处理-----------------------------------------------------------------------*/
/*------------------------------------串口任务处理-----------------------------------------------------------------------*/
/*------------------------------------串口任务处理-----------------------------------------------------------------------*/
static void echo_task(void *arg)
{
    
    //uint8_t *data = (uint8_t *) malloc(BUF_SIZE);

    while (1) 
    {
        // Read data from the UART
        //int len = uart_read_bytes(EX_UART_NUM, data, BUF_SIZE, 20 / portTICK_RATE_MS);
        uart_read_bytes(EX_UART_NUM, (uint8_t*)UART0_RX_data, BUF_SIZE, 20 / portTICK_RATE_MS);//串口接收API
        // Write data back to the UART
        //uart_write_bytes(EX_UART_NUM, (const char *) data, len);//串口发送API
      
        
    }
}
/*------------------------------------亮灯任务处理-----------------------------------------------------------------------*/
/*------------------------------------亮灯任务处理-----------------------------------------------------------------------*/
/*------------------------------------亮灯任务处理-----------------------------------------------------------------------*/
void blink_task(void *pvPar)
{
    
	while(1)
	{
        if ( (UART0_RX_data[0]==0x22)&&(UART0_RX_data[1]==0x22)/* condition */)
        {
            gpio_set_level(BLINK_GPIO, 0);
            vTaskDelay(100 / portTICK_PERIOD_MS);
            gpio_set_level(BLINK_GPIO, 1);
            vTaskDelay(100 / portTICK_PERIOD_MS);
            /* code */
        }
        if ( (UART0_RX_data[0]==0x33)&&(UART0_RX_data[1]==0x33)/* condition */)
        {
            gpio_set_level(BLINK_GPIO, 0);
            vTaskDelay(1000 / portTICK_PERIOD_MS);
            gpio_set_level(BLINK_GPIO, 1);
            vTaskDelay(1000 / portTICK_PERIOD_MS);
            /* code */
        }
	}
}

void app_main(void)
{
    gpio_pad_select_gpio(BLINK_GPIO);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);

    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,
    };
    uart_driver_install(EX_UART_NUM, BUF_SIZE * 2, 0, 0, NULL, 0);
    uart_param_config(EX_UART_NUM, &uart_config);
    uart_set_pin(EX_UART_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS);

    xTaskCreate(echo_task, "uart_echo_task", 1024, NULL, 10, NULL);
    xTaskCreatePinnedToCore(blink_task,           //任务函数
    		               "task",         //这个参数没有什么作用,仅作为任务的描述
			                2048,            //任务栈的大小
			               NULL,         //传给任务函数的参数
			                2,              //优先级,数字越大优先级越高
			               NULL,            //传回的句柄,不需要的话可以为NULL
			               tskNO_AFFINITY); //指定运行任务的CPU,使用这个宏表示不会固定到任何核上
}
在这里插入代码片
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值