略
一,printf
printf是将东西放入Bafer(缓存),用 "\n" 或 fflush 到串口
其他和C语言差不多
#include <stdio.h>
int year = 2023;
int month = 5;
int day = 10;
float temperature1 = 20.12345;
float temperature2 = -21.12345;
float temperature3 = 4312.12345;
void app_main(void)
{
printf("Hello World\n");
printf("%d year,%d month,%d day\n", year, month, day);
printf("temperature1 % 10.2f\n", temperature1);
printf("temperature2 %010.2f\n", temperature2);
printf("temperature1 %10.2f\n", temperature3);
fflush(stdout);
}
二,日志
#include <stdio.h>
#include "esp_log.h"
const char* tagTraffic = "jtd";
void app_main(void)
{
uint16_t ap_count = 0;
ESP_LOGE("jtd","bll");
ESP_LOGW("jtd","live have 5%%");
ESP_LOGI(tagTraffic, "Total APs scanned = %u", ap_count);
ESP_LOGD("jtd","Live1000 , shiyong200");
ESP_LOGV("jtd","zml");
fflush(stdout);
}
发现ESP_LOGD和ESP_LOGV没有打印出来,去查一下这几个函数的日志属性。
跳到 log output 中选择 Verbose 就可以打印出所有的了。
三,eclipse注意
1,终端的打开和设置方法
按照这样设置就可以了
2,eclipse的快捷建
ctrl + 鼠标左键: 跳转到引用的方法
alt + left : 从所跳转到引用的方法返回原方法
alt + right: 从原处返回到引用的方法
引用文章
3,不要打开多个工程文件不然会出现很多奇怪的错误
添加
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
四,GPIO
#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "sdkconfig.h"
#define LED_bink_PIN GPIO_NUM_38
#define DELAYMS 2000
uint32_t status1 = 0;
void app_main(void)
{
gpio_reset_pin(LED_bink_PIN);
gpio_set_direction(LED_bink_PIN,GPIO_MODE_OUTPUT);
while(true)
{
status1 = !status1;
gpio_set_level(LED_bink_PIN,status1);
vTaskDelay(1000/portTICK_PERIOD_MS);
}
}
1,例程讲解
设置GPIO口电平
static void blink_led(void)
{
/* Set the GPIO level according to the state (LOW or HIGH)*/
gpio_set_level(BLINK_GPIO, s_led_state);
}
初始化GPIO口
static void configure_led(void)
{
ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
gpio_reset_pin(BLINK_GPIO);
/* Set the GPIO as a push/pull output */
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}
GPIO口的结构体
GPIO的模式(不解释了,到时候看注释)
GPIO中断的类型(类似STM32)
解释
//1ULL 就是 让编译器把 1 当作unsigned long long的数
//0000 0000 64个0 << GPIO_OUTPUT_IO_0
#define GPIO_OUTPUT_PIN_SEL ((1ULL<<GPIO_OUTPUT_IO_0) | (1ULL<<GPIO_OUTPUT_IO_1))
五,Tick的延迟和设置
原理没听
vTaskDelay();可以将死循环中的CPU空出去执行其他程序
#include <stdio.h>
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "sdkconfig.h"
int count = 0;
void app_main(void)
{
count = 1;
ESP_LOGI("COUNTER","Tick(ms) : %d",(int)portTICK_PERIOD_MS);
while (1)
{
ESP_LOGI("COUNTER","Count Value is %d",count);
count++;
}
}