【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?
-
- Posts: 16
- Joined: Sat May 14, 2016 10:31 am
【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?
Postby pillarpeng » Thu Jun 30, 2016 4:43 pm
环境:
SDK:NONOS_SDK version:1.5.3,
IOT:IOT VERSION = v1.0.5t45772(a)
demo: light 还有 plug
问题:
上电时,GPIO14和GPIO12,会出现400ms的高电平,这是为什么?怎么消除它?
我做过的尝试:
将GPIO14和GPIO12的初始化,放在用户入口程序函数“user_init ()”, 的第一行,任然出现这个问题。
猜测:
应该是进入 入口函数之前做的一些操作了。。。
SDK:NONOS_SDK version:1.5.3,
IOT:IOT VERSION = v1.0.5t45772(a)
demo: light 还有 plug
问题:
上电时,GPIO14和GPIO12,会出现400ms的高电平,这是为什么?怎么消除它?
我做过的尝试:
将GPIO14和GPIO12的初始化,放在用户入口程序函数“user_init ()”, 的第一行,任然出现这个问题。
猜测:
应该是进入 入口函数之前做的一些操作了。。。
-
- Posts: 16
- Joined: Sat May 14, 2016 10:31 am
Re: 【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?
Postby pillarpeng » Fri Jul 01, 2016 10:09 am
Code: Select all
user_light_init
{
// key init: GPIO 4 add by pp 2016.5.20
single_key[0] = key_init_single(LIGHT_KEY_0_IO_NUM, LIGHT_KEY_0_IO_MUX, LIGHT_KEY_0_IO_FUNC, user_light_long_press, user_light_short_press);
keys.key_num = LIGHT_KEY_NUM;
keys.single_key = single_key;
key_init(&keys);
//------------------------------------
spi_flash_read((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
(uint32 *)&light_param, sizeof(struct light_saved_param)); // 读取 PWM 的参数值
if(light_param.pwm_period>10000 || light_param.pwm_period <1000) // 设置 PWM 的周期
{
light_param.pwm_period = 1000;
}
uint32 io_info[][3] = {
{PWM_0_OUT_IO_MUX,PWM_0_OUT_IO_FUNC,PWM_0_OUT_IO_NUM}, // gpio14
{PWM_1_OUT_IO_MUX,PWM_1_OUT_IO_FUNC,PWM_1_OUT_IO_NUM}, // gpio12
{PWM_2_OUT_IO_MUX,PWM_2_OUT_IO_FUNC,PWM_2_OUT_IO_NUM}, // gpio15
{PWM_3_OUT_IO_MUX,PWM_3_OUT_IO_FUNC,PWM_3_OUT_IO_NUM}, // gpio4
{PWM_4_OUT_IO_MUX,PWM_4_OUT_IO_FUNC,PWM_4_OUT_IO_NUM}, // gpio13
};
uint32 pwm_duty_init[PWM_CHANNEL] = {0}; // 初始化 duty 为 0
/*PIN FUNCTION INIT FOR PWM OUTPUT*/
pwm_init(light_param.pwm_period, pwm_duty_init ,PWM_CHANNEL,io_info);
os_printf("LIGHT PARAM: R: %d \r\n",light_param.pwm_duty[LIGHT_RED]); // R: gpio14
os_printf("LIGHT PARAM: G: %d \r\n",light_param.pwm_duty[LIGHT_GREEN]); // G: gpio12
os_printf("LIGHT PARAM: B: %d \r\n",light_param.pwm_duty[LIGHT_BLUE]); // B: gpio15
if(PWM_CHANNEL>LIGHT_COLD_WHITE)
{
os_printf("LIGHT PARAM: CW: %d \r\n",light_param.pwm_duty[LIGHT_COLD_WHITE]); // C: gpio4
os_printf("LIGHT PARAM: WW: %d \r\n",light_param.pwm_duty[LIGHT_WARM_WHITE]); // w: gpio13
}
os_printf("LIGHT PARAM: P: %d \r\n",light_param.pwm_period); // pwm period
uint32 light_init_target[8]={0};
os_memcpy(light_init_target,light_param.pwm_duty,sizeof(light_param.pwm_duty));
light_set_aim(
light_init_target[LIGHT_RED],
light_init_target[LIGHT_GREEN],
light_init_target[LIGHT_BLUE],
light_init_target[LIGHT_COLD_WHITE],
light_init_target[LIGHT_WARM_WHITE],
light_param.pwm_period
);
set_pwm_debug_en(0);//disable debug print in pwm driver
os_printf("PWM version : %08x \r\n",get_pwm_version());
}
但应该不是这个问题,你可以测试一下,下载这个版本的SDK,然后去测试GP14和GP12,应该也会有的。
-
- Posts: 16
- Joined: Sat May 14, 2016 10:31 am
Re: 【问题】NONOS_SDK 1.5.3 上电GPIO14和GPIO12 会出现400ms的高电平,为什么?怎么消除?
Postby pillarpeng » Thu Aug 04, 2016 4:34 pm
先说一下解决的方式:
就是在相应的引脚上加下拉电阻即可。我这里使用的是330欧姆的电阻。可以正常使用,之后置高置低都可以。
ESP8266EX 上电时引脚的初始化状态
问题:
ESP8266EX 使用SDK:NONOS_SDK_1.5.3_16_04_18,IOT_demo中的light。
上电后的350ms内,GPIO12,GPIO13,GPIO14引脚的电平始终为高电平。
在使用ESP8266EX作为MCU做了一个wifi 七彩灯。4路PWM引脚分别为:R(GPIO 14), B(GPIO12), G(GPIO 13), W(GPIO4), 全部引脚设置为PWM引脚,初始占空比为零。
但过程中发现,每次上电后,总会RGB先亮一下,熄灭(然后进入我写的程序)。
解决:
用是逻辑分析仪采样发现RGB三个引脚上有350ms左右的高电平出现,(W引脚没有这个现象),起初以为是软件设置有误,于是将所有的代码全部注释,user_init()中只写RGB初始化为零的语句。再一次上电,发现RGB三个引脚居然还是一样的现象,首先出现350ms的高电平,然后拉低。
由此猜测:
1) ESP8266一上电,会有350ms左右的时间是不受用户控制的(至少是使用官方SDK的用户)。
2) 在上电后的350ms左右,RGB的引脚电平是被拉高的。但是引脚拉高有两种可能性:
第一是:输出功能,并且输出高
第二是:输入功能,并且上拉
为了搞清楚,其上电时,它引脚的状态,设置简单的测试环境。把可能干扰的电路以及其他全部弄掉,仅仅剩下一个ESP8266最小系统模块。这里使用的是ESP8266EX(AI的模块)。
1) 使用官方SDK:NONOS_SDK_1.5.3_16_04_18
2) 使用例程App:IOT_DEMO的light
3) 修改light源码:将user_light中全部注释,然后初始化以下引脚
GPIO(0,2,4,5,12,13,14,15,16),将其设置为输出,然后置低电平。
4) 由于要进入Flash启动模式,所以先让GPIO15 = 0,GPIO2 = 1,GPIO0 = 1; 先判断其他引脚
5) 最后判断GPIO15,GPIO2,GPIO0的初始状态。
实验方法:
使用逻辑分析仪,采样各个引脚的波形,然后分析。
分析分为两个步骤,首先判断上电后,引脚的电平;然后判断是输入还是输出。
1. 首先判定上电后引脚的电平
由于用户程序写的是,上电置低,所以只要观察,上电后,特别是350ms以内,相应引脚的波形是否有高电平出现。
1) 如果有高电平,说明引脚初始电平为高,
2) 如果无高电平,说明引脚初始电平为低。
2. 然后判断是输出还是输入
1) 对于初始状态为高电平,那么其状态就可能有两种,一种是输出置高,另一种是输入上拉两种状态了。判断方法如下:
各引脚使用下拉电阻,然后在上电测量,使用逻辑分析仪采样,观察波形。
如果上电后的350ms内是高电平,则该引脚是初始状态为:输出置高
如果上电后的350ms内是低电平,则该引脚是初始状态为:输入上拉
2) 对于初始状态为低电平,那么其状态就可能有两种,一种是输出置低,另一种是输入下拉两种状态了。判断方法如下:
各引脚使用使用上拉电阻,然后在上电测量,使用逻辑分析仪采样,观察波形。
如果上电后的350ms内是高电平,则该引脚是初始状态为:输入下拉
如果上电后的350ms内是低电平,则该引脚是初始状态为:输出置低
测量后的结果如下:
|----------------------------------------------------------------------------------------|
|----GPIO NO.---|----PIN NO.---|----初始状态----|----初始电平--|
|-----GPIO0------|-----Pin15-----|----输入上拉----|-------H--------|
|-----GPIO2------|-----Pin14-----|----输入上拉----|-------H--------|
|-----GPIO4------|-----Pin16-----|----输入下拉----|-------L--------|
|-----GPIO5------|-----Pin24-----|----输入下拉----|-------L--------|
|-----GPIO12-----|-----Pin10-----|----输入上拉----|-------H--------|
|-----GPIO13-----|-----Pin12-----|----输入上拉----|-------H--------|
|-----GPIO14-----|-----Pin9------|----输入上拉----|-------H--------|
|-----GPIO15-----|-----Pin13-----|----输入上拉----|-------H--------|
|-----GPIO16-----|-----Pin8------|----输出置高----|-------H--------|
|---------------------------------------------------------------------------------------|
Pillarpeng
2016.8.4
就是在相应的引脚上加下拉电阻即可。我这里使用的是330欧姆的电阻。可以正常使用,之后置高置低都可以。
ESP8266EX 上电时引脚的初始化状态
问题:
ESP8266EX 使用SDK:NONOS_SDK_1.5.3_16_04_18,IOT_demo中的light。
上电后的350ms内,GPIO12,GPIO13,GPIO14引脚的电平始终为高电平。
在使用ESP8266EX作为MCU做了一个wifi 七彩灯。4路PWM引脚分别为:R(GPIO 14), B(GPIO12), G(GPIO 13), W(GPIO4), 全部引脚设置为PWM引脚,初始占空比为零。
但过程中发现,每次上电后,总会RGB先亮一下,熄灭(然后进入我写的程序)。
解决:
用是逻辑分析仪采样发现RGB三个引脚上有350ms左右的高电平出现,(W引脚没有这个现象),起初以为是软件设置有误,于是将所有的代码全部注释,user_init()中只写RGB初始化为零的语句。再一次上电,发现RGB三个引脚居然还是一样的现象,首先出现350ms的高电平,然后拉低。
由此猜测:
1) ESP8266一上电,会有350ms左右的时间是不受用户控制的(至少是使用官方SDK的用户)。
2) 在上电后的350ms左右,RGB的引脚电平是被拉高的。但是引脚拉高有两种可能性:
第一是:输出功能,并且输出高
第二是:输入功能,并且上拉
为了搞清楚,其上电时,它引脚的状态,设置简单的测试环境。把可能干扰的电路以及其他全部弄掉,仅仅剩下一个ESP8266最小系统模块。这里使用的是ESP8266EX(AI的模块)。
1) 使用官方SDK:NONOS_SDK_1.5.3_16_04_18
2) 使用例程App:IOT_DEMO的light
3) 修改light源码:将user_light中全部注释,然后初始化以下引脚
GPIO(0,2,4,5,12,13,14,15,16),将其设置为输出,然后置低电平。
4) 由于要进入Flash启动模式,所以先让GPIO15 = 0,GPIO2 = 1,GPIO0 = 1; 先判断其他引脚
5) 最后判断GPIO15,GPIO2,GPIO0的初始状态。
实验方法:
使用逻辑分析仪,采样各个引脚的波形,然后分析。
分析分为两个步骤,首先判断上电后,引脚的电平;然后判断是输入还是输出。
1. 首先判定上电后引脚的电平
由于用户程序写的是,上电置低,所以只要观察,上电后,特别是350ms以内,相应引脚的波形是否有高电平出现。
1) 如果有高电平,说明引脚初始电平为高,
2) 如果无高电平,说明引脚初始电平为低。
2. 然后判断是输出还是输入
1) 对于初始状态为高电平,那么其状态就可能有两种,一种是输出置高,另一种是输入上拉两种状态了。判断方法如下:
各引脚使用下拉电阻,然后在上电测量,使用逻辑分析仪采样,观察波形。
如果上电后的350ms内是高电平,则该引脚是初始状态为:输出置高
如果上电后的350ms内是低电平,则该引脚是初始状态为:输入上拉
2) 对于初始状态为低电平,那么其状态就可能有两种,一种是输出置低,另一种是输入下拉两种状态了。判断方法如下:
各引脚使用使用上拉电阻,然后在上电测量,使用逻辑分析仪采样,观察波形。
如果上电后的350ms内是高电平,则该引脚是初始状态为:输入下拉
如果上电后的350ms内是低电平,则该引脚是初始状态为:输出置低
测量后的结果如下:
|----------------------------------------------------------------------------------------|
|----GPIO NO.---|----PIN NO.---|----初始状态----|----初始电平--|
|-----GPIO0------|-----Pin15-----|----输入上拉----|-------H--------|
|-----GPIO2------|-----Pin14-----|----输入上拉----|-------H--------|
|-----GPIO4------|-----Pin16-----|----输入下拉----|-------L--------|
|-----GPIO5------|-----Pin24-----|----输入下拉----|-------L--------|
|-----GPIO12-----|-----Pin10-----|----输入上拉----|-------H--------|
|-----GPIO13-----|-----Pin12-----|----输入上拉----|-------H--------|
|-----GPIO14-----|-----Pin9------|----输入上拉----|-------H--------|
|-----GPIO15-----|-----Pin13-----|----输入上拉----|-------H--------|
|-----GPIO16-----|-----Pin8------|----输出置高----|-------H--------|
|---------------------------------------------------------------------------------------|
Pillarpeng
2016.8.4
Who is online
Users browsing this forum: No registered users and 14 guests
Login
Newbies Start Here
Are you new to ESP8266?
Unsure what to do?
Dunno where to start?
Start right here!
Latest SDK
Documentation
Complete listing of the official ESP8266 related documentation release by ESPRESSIF!
Must read here!
- All times are UTC+08:00
- Top
- Delete all board cookies
About Us
Espressif Systems is a fabless semiconductor company providing cutting-edge low power WiFi SoCs and wireless solutions for wireless communications and Internet of Things applications. We are the manufacturer of ESP8266EX.