【STM32】OLED缓启动的实现

由于设计上的某些原因,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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值