你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32s103c8t6 +OLED使用硬件IIC连接不成功

[复制链接]
ldptest 提问时间:2017-10-17 23:40 /
PB6 --------- SCL
PB7---------- SDA
OLED是网上0.96寸12864的OLED,接口为IIC。

void IIC_Init(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

  GPIO_InitTypeDef GPIO_InitStructure;
  /* 配置I2C1----------------------------------------*/
  GPIO_InitStructure.GPIO_Pin   =  GPIO_Pin_6 | GPIO_Pin_7; //IO端口的第6和第7位
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //翻转速度为50M
  //GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_OD;  //端口模式复用开漏输出方式,测试不行???
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);   //用以上几个参数初始化PB口
  
  I2C_InitTypeDef I2C_InitStructure;
  I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;//SMBus主控模式
  I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;//快速模式Tlow / Thigh = 2
  //I2C_InitStructure.I2C_OwnAddress1 = 0x0010;//设备自身地址
  I2C_InitStructure.I2C_OwnAddress1 = OLED_ADDRESS;
  I2C_InitStructure.I2C_Ack = I2C_Ack_Disable;//失能应答
  I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;//应答7位地址
  I2C_InitStructure.I2C_ClockSpeed = 400000;//设置时钟频率,这个值不能高于400KHz
  I2C_Init(I2C1,&I2C_InitStructure);//初始化配置
  
  /* Enable I2C1 ----------------------------------------------------*/
  I2C_Cmd(I2C1, ENABLE);     //使能I2C1
  I2C_AcknowledgeConfig(I2C1,ENABLE);                           //使能IIC2应答状态
}


/*******************************************************************************
* 名    称: OLED_WR_Byte
* 功    能: OLED写入一个数据或命令
* 形    参: Byte:数据内容;DC:命令/数据
* 返    回: 无
* 说    明: 无
* 更新日期:2016-9-16
******************************************************************************/
void OLED_WR_Byte(u8 Byte,u8 DC)
{
I2C_GenerateSTART(I2C1,ENABLE);//产生I2Cx传输START条件
        //while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));  
        I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT);
//I2C_SendData(I2C1,OLED_ADDRESS);        //Slave address,SA0=0
        I2C_Send7bitAddress(I2C1, OLED_ADDRESS, I2C_Direction_Transmitter);
I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT);
        //while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1,DC);          //write command
I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT);
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C1,Byte);
I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT);
        //while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTOP(I2C1,ENABLE);//产生I2Cx传输STOP条件
}
其他部分与软件模拟程序相同,不再列举。

求助:
1、使用软件模拟方法,OLED能正常使用
但使用硬件模拟,不能使用。究竟是哪出的问题。
2、GPIO模式不能设成GPIO_Mode_AF_OD,否则连软件模拟也不能正常运行,这与网说法很大出入。这又是怎么一回事?


收藏 评论6 发布时间:2017-10-17 23:40

举报

6个回答
Draway 回答时间:2017-10-18 09:14:51
首先你要明白,IIC一根是时钟先,一根数据线。时钟只是输出,可以选推挽。SDA输入输出都有,开漏。另外这样的问题应该是不难的,都有现成的代码,移植下就好。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

ldptest 回答时间:2017-10-18 09:29:27
本帖最后由 ldptest 于 2017-10-18 09:31 编辑
Draway 发表于 2017-10-18 09:14
首先你要明白,IIC一根是时钟先,一根数据线。时钟只是输出,可以选推挽。SDA输入输出都有,开漏。另外这样 ...

驱动OLED,找到的都是使用软件模拟的。
折腾,就是为了学习。
我这是移植驱动24C02的,但发现不能正常驱动OLED。
很多注释了的语句,就是发现调不通。
如:
发了开始信号后的
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));  
结果调试时一直卡在那。
ldptest 回答时间:2017-10-18 09:47:35
Draway 发表于 2017-10-18 09:14
首先你要明白,IIC一根是时钟先,一根数据线。时钟只是输出,可以选推挽。SDA输入输出都有,开漏。另外这样 ...

关于端口,有书写用复用推挽_AF_PP
Draway 回答时间:2017-10-19 08:38:07
ldptest 发表于 2017-10-18 09:47
关于端口,有书写用复用推挽_AF_PP

如果有条件,买个逻辑分析仪,调驱动必备的
ldptest 回答时间:2017-10-19 10:34:34
已调通了 。
初始化中:
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_OD;   //开漏模式是有效的,如果不读入可以用PP模式
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;                 //这个设置成允许应答,原来不知抄的是哪家的。

写数据
在最开始增加
while(I2C_GetFLagStatus(I2C1,I2C_FLAG_BUSY));
为了与其他IIC产品驱动通用
后面都恢复带while语句

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

兰博基尼121 回答时间:2018-8-1 16:27:43
楼主,可否发一份代码?1107114564@qq.com

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版