串口还是比较简单的,终于顺利了一回。啊哈哈哈。
#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,使用这个宏表示不会固定到任何核上
}
在这里插入代码片