找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3592|回复: 0
打印 上一主题 下一主题
收起左侧

关于STM32F10x模拟I2c的OLED(4PIN)显示经验分享

[复制链接]
跳转到指定楼层
楼主
    最近着手做一个项目,没有使用过OLED显示屏,学习了一下,相关心得分享出来,希望大家批评指正。谢谢。

  先从i2c说起吧,STM32F10x片上是有硬件I2c资源的,可以通过配置相关寄存器实现I2c的通信,但是由于IO口资源比较紧张,我选择模拟I2c,通过程序模拟i2c的通信时序,另外上手模拟I2c会让大家对i2c的通信时序有更深入的了解

首先,i2c的物理层,如图:
SCL&SDA总线都要有上拉电阻,这是通信协议规定的,而且是必须的,这一点先不深究,参考值通常4.7K(欧姆),而我采用的中景园0.96寸4PINOLED内部自带上拉,可以直接使用

下面我们开始进行I2c通信协议的模拟:



由于OLED几乎不向主机发送数据,这里我只讨论数据写方向:起始信号+(设备地址+读写方向)发送的数据+应答信号+停止信号
需要分别模拟这四个环节,首先开GPIO资源:
static void I2C_GPIO_Config(){

        GPIO_InitTypeDef GPIO_InitStruct;
        /*开GPIO口时钟*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;/*设置成开漏输出模式*/
        GPIO_InitStruct.GPIO_Pin = I2C_SCL_PIN | I2C_SDA_PIN;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        /***初始化GPIO**/
  GPIO_Init(I2C_GPIO_PORT, &GPIO_InitStruct);
        
        GPIO_SetBits(I2C_GPIO_PORT, I2C_SCL_PIN | I2C_SDA_PIN);

}
使用了一些宏定义,这里输出模式设置成了开漏输出,对于开漏来说输出两种状态,低电平和高阻态,需要外接上拉电阻将高阻态时的电平拉高

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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