- 1、你是怎么判断输入和输出的,输入和输出是一种相对的状态,假如你输出高电平,然后把引脚接GND,那么内部读取当然是低电平了,内部默认配置上拉电阻使能,相当于内部一个电阻接VCC,然后接单片机引脚,这只是一个状态,内部寄存器去读取当前引脚的电平,你可以外部去干扰它,也可以去读取程序输出设置的状态,一般不建议输出模式下外部强制改变状态,可能会烧掉单片机引脚。
- 2、我们的IO是采用枚举的方案实现的,是可以直接用数字去代替枚举变量,但是有的编译器的筛查等级比较高的话,就会识别出这是枚举类型的变量,不能用立即数,一般都会以警告的方式提醒,如果你想深入的理解这个知识点的话,可以去百度枚举enum的使用。
2.IO口宏定义成数字时,直接赋值给gpio_reset_pin等函数会提示数据类型错误,需要在宏定义时加入(gpio_num_t)强制类型转换,不过例程都不需要,是怎么回事?
Code: Select all
#define LED_B ((gpio_num_t)4)
#define LED_W ((gpio_num_t)2)
ESP_LOGI(TAG, "Hello, OB_helth!");
st_key_queue = xQueueCreate(1, sizeof(enum SYS_KEY_STATE));
power_state_Semaphore = xSemaphoreCreateBinary();
gpio_reset_pin(LED_B);
gpio_reset_pin(LED_W);
gpio_set_direction(LED_B, GPIO_MODE_OUTPUT);
gpio_set_direction(LED_W, GPIO_MODE_OUTPUT);
gpio_set_level(LED_B, 1);
gpio_set_level(LED_W, 0);
ESP_LOGI(TAG, "LED INIT");
I (315) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (325) app_main: Hello, OB_helth!
I (325) gpio: GPIO[4]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (335) gpio: GPIO[2]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (345) app_main: LED INIT
I (355) motor: MOTOR_deal