由于设计上的某些原因,OLED供电瞬间会造成系统3.3V电压跌落至2.4V的毛刺。该情况造成了个别模块的复位。
基于STM32L072RB平台。其中控制端置低开启OLED,置高关闭OLED。
考虑到系统其它程序的调度及中断,该过程启动时间110us,并增加了总中断的关闭和开启。
图示中黄线为3.3V系统电压,绿线是OLED供电,蓝线是OLED控制端。
增加缓启动之后的波形,系统电压(黄线)趋向平稳:
细节图:
OLED缓启动实现的代码如下:
//整个过程耗时110us
void OLED_POW_CTL_EN(void)
{
u32 i=0,j=0;
if(HAL_GPIO_ReadPin(OLED_CTRL_PORT,OLED_CTRL_PIN)==GPIO_PIN_RESET)
return;
__disable_irq();
for(i=0; i<10; i++)
{
OLED_CTRL_PORT->BRR = OLED_CTRL_PIN;//reset
//__NOP();//不可加延时,实测会影响系统电压
OLED_CTRL_PORT->BSRR = OLED_CTRL_PIN;//set
testdelay();
}
for(i=0; i<10; i++)
{
OLED_CTRL_PORT->BRR = OLED_CTRL_PIN;//reset
OLED_CTRL_PORT->BSRR = OLED_CTRL_PIN;//set
__NOP();__NOP();__NOP();__NOP();
}
for(i=0; i<150; i++)
{
OLED_CTRL_PORT->BRR = OLED_CTRL_PIN;//reset
OLED_CTRL_PORT->BSRR = OLED_CTRL_PIN;//set
__NOP();__NOP();
}
for(i=0; i<10; i++)
{
OLED_CTRL_PORT->BRR = OLED_CTRL_PIN;//reset
__NOP();
OLED_CTRL_PORT->BSRR = OLED_CTRL_PIN;//set
__NOP();
}
OLED_CTRL_PORT->BRR = OLED_CTRL_PIN;//set
__enable_irq();
}