ESP32控制LED灯亮灭 (裸机模式&FreeRTOS系统)
1.功能需求
- 裸机模式:以1s间隔点亮/熄灭LED
- FreeRTOS:以任务的方式:1s间隔点亮/熄灭LED
2.硬件原理图
3.软件设计
3.1 裸机代码
1.硬件初始化
- 绑定GPIO引脚
- GPIO功能模式: GPIO推挽输入/输出/开漏输入/输出
- 设置GPIO输出电平
1 | void bsp_GpioInit(void) |
API介绍
头文件路径: #include "driver/gpio.h"
函数名 | 描述 | 案例 |
---|---|---|
void gpio_pad_select_gpio(uint8_t gpio_num); |
绑定GPIO | gpio_pad_select_gpio(4) |
esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode); |
设置GPIO功能模式(输入/输出方向) | gpio_set_direction(4,GPIO_MODE_DISABLE)GPIO_MODE_DISABLE GPIO_MODE_INPUT GPIO_MODE_OUTPUT GPIO_MODE_OUTPUT_OD GPIO_MODE_INPUT_OUTPUT_OD GPIO_MODE_INPUT_OUTPUT |
void vTaskDelay(uint ticks) | 延迟n个节拍 | vTaskDelay(1000 / portTICK_PERIOD_MS) |
主函数
1 | // Hello Bug Example |
效果
;
3.2 FreeRTOS代码
API介绍
函数名 | 描述 | 案例 |
---|---|---|
portBASE_TYPE xTaskCreate(pdTASK_CODE pvTaskCode,const portCHAR * const pcName,unsigned portSHORT usStackDepth,void *pvParameters,unsigned portBASE_TYPE uxPriority,xTaskHandle *pvCreatedTask); |
创建任务句柄 pvTaskCode:指向任务函数,一般死循环 pcName:任务函数的别名,仅仅是方便调试所用 usStackDepth:任务堆栈的深度,定义了堆栈可以包含的变量数,其字节数大小=堆栈深度 * 堆栈宽度。pvParameters:作为参数的指针,当任务创建时 uxPriority:任务的优先级。包括MPU支持的系统可以选择在特权模式创建任务,通过设置优先级参数的portPRIVILEGE_BIT位。比如,创建一个特权任务在优先级2,则uxPriority 应当设置为(2|portPRIVILEGE_BIT) pvCreatedTask:回传一个句柄,以便创建的任务可以被关联。返回值:pdPASS,如果任务成功创建且添加到就绪列表,否则返回一个错误代码,见 projdefs.h |
xTaskCreate(&blink_task,"LED_Task",configMINIMAL_STACK_SIZE,NULL,5,NULL); |
blink_task创建
1 | void blink_task(void *pvParameter) |
主函数
1 | void app_main() |
效果
;