找回密码
 注册
查看: 786|回复: 1
打印 上一主题 下一主题

【问题解答】OLED屏显示与息屏控制

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 16:54
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-8-17 01:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 jacky401 于 2022-11-28 10:50 编辑

    问题:
          1,“OLED屏与mcu之间是通过GPIO口 PB10、PB11模拟IIC与MCU通信,那么用作IIC的GPIO如何配置?“
          2,“这个switch.V3.3就是PB13拉高了之后也不会关机但是供电电压降低到2.5V”,不能拉低?
          3,  代码验证

    问题1解答:
          一般作为IIC 接口的GPIO口不管是复用功能(硬IIC)还模拟的都应配置为推拉模式(GPIO_MODE_OUTPUT_PP),其它模式可能会失败;
          同时 ,由于GPIO的负载能力十分有些,电路上一般要接上拉电阻(典型的如10K)。详细内容请参考GPIO原理部分内容 https://www.eda365.com/thread-226842-1-2.html


    问题2解答:
        实验表明, PB13即使置为高电平,PMOS的电压为2.5V, 仍为逻辑高,但量测MCU端电平已反转,后查明为GPIO连接灌入电流;
                         去掉UART1、UART2的两个跳线帽, 首先实现OLED  IIC是关断PMOS, 通过将GPIO方式配置为OD 、INPUT,并强制拉低发现,
                         PB13如下配置可以关断点亮OLED
    void GPIO_OLED_Reset(uint8_t flag)
    {
            GPIO_InitTypeDef GPIO_InitStruct;
            if(flag)
            {//reset to OD
            
                    /*Configure GPIO pin : PtPin */
                    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
                    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
                    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
                    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
                    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
            }
            else{//set
                    /*Configure GPIO pin : PtPin */
                    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
                    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
                    GPIO_InitStruct.Pull = GPIO_NOPULL;
                    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
                    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
                   
            }
    }


    进一步发现UART也需要如此配置,才能关断
    void HAL_USART_Reset(uint8_t flag)
    {
            GPIO_InitTypeDef GPIO_InitStruct;
            if( flag )
            {//reset to OD
                    if(&huart1 != NULL){
                            GPIO_InitStruct.Pin = Log_TX_Pin|Log_RX_Pin;
                            GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
                            GPIO_InitStruct.Pull = GPIO_NOPULL;
                            GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
                            GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
                            HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
                    }
                   
                    if(&huart2 != NULL){
                            GPIO_InitStruct.Pin = UART2TX_NBRX_Pin|UART2RX_NBTX_Pin;
                            GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
                            GPIO_InitStruct.Pull = GPIO_NOPULL;
                            GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
                            GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
                            HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
                    }
            
            }
            else{//set
                    if(&huart1 != NULL){
                            GPIO_InitStruct.Pin = Log_TX_Pin|Log_RX_Pin;
                            GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
                            GPIO_InitStruct.Pull = GPIO_NOPULL;
                            GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
                            GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
                            HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
                    }        
                    if(&huart2 != NULL){
                            GPIO_InitStruct.Pin = UART2TX_NBRX_Pin|UART2RX_NBTX_Pin;
                            GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
                            GPIO_InitStruct.Pull = GPIO_NOPULL;
                            GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
                            GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
                            HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
                    }        
            }
    }


    问题3解答:
          断开USB连线,烧录hex文件,OLED正常显示后按“KEY2”切换, OLED量屏或息屏




    该用户从未签到

    2#
    发表于 2021-8-17 14:36 | 只看该作者
    屏幕和息屏控制
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-5-24 11:54 , Processed in 0.062500 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表