首页 > 其他分享 >关于调试一个I2C设备的问题

关于调试一个I2C设备的问题

时间:2023-07-25 10:23:10浏览次数:39  
标签:Pin bus oled InitStructure Mode GPIO I2C 调试 设备

现象:最近在做一个含有oled屏幕的产品,屏幕使用i2c方式通信,但出现许多奇奇怪怪的问题,如stm32单片机上只能用开漏的方式亮屏,用推挽方式亮不了;在合宙单片机上只能用推挽,用开漏驱动不了。用推挽驱动起来的屏幕显示也是怪怪的,屏幕内容总是抖动。

#ifdef oled_ic_ch1115
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_ResetBits(GPIOA, GPIO_Pin_1);
    delay_ms(500);
    GPIO_SetBits(GPIOA, GPIO_Pin_1);

    oled_n.bus=&oled_n_i2c;
    
    oled_n.addr=OLED_N_ADD<<1;
    oled_n.bus->RCC_APB2 = RCC_APB2Periph_GPIOB;
    oled_n.bus->SCL_Port = GPIOB;
    oled_n.bus->SCL_Pin  = GPIO_Pin_10;
    oled_n.bus->SCL_IO_Mode = GPIO_Mode_Out_OD;
    oled_n.bus->SDA_Port = GPIOB;
    oled_n.bus->SDA_Pin  = GPIO_Pin_1;
    oled_n.bus->SDA_OUT_Mode = GPIO_Mode_Out_OD;
    oled_n.bus->SDA_IN_Mode = GPIO_Mode_IN_FLOATING;
    oled_n.bus->Interval = 1;

#endif

驱动方式使用软件i2c


 

最后解决了问题,解决的方式有两种

第一种:在上面的软件i2c的代码中加入适当的延迟函数,因为我上拉电阻选用的是10k,上拉电阻越大,电平变化的越平缓,也可以说是越缓慢,即若没有延迟函数的话,虽然代码中有高低电平变化的函数,但对于驱动设备而言,并没有高低变化的感觉,所以加上适当的延迟函数即可,当然这可能会使刷屏变慢

第二种:既然是上拉电阻太大,那改小一点就行了,改为1k大小的上拉电阻即可

标签:Pin,bus,oled,InitStructure,Mode,GPIO,I2C,调试,设备
From: https://www.cnblogs.com/KingZhan/p/17579080.html

相关文章

  • Linux驱动:I2C驱动
    一、前言I2C协议是在开发中使用非常频繁的一种协议,相信大家在学习单片机的时候经常会用到支持I2C协议的模块,I2C总线仅仅使用SCL、SDA这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB板布线空间的占用。因此,I2C总线被非常广泛地应用在EEPROM、实时钟、......
  • linux I2C驱动
    1.linuxIIC驱动由于裸机的驱动迎合驱动的分离和分层的思想,分为IIC主机驱动(接口驱动)和IIC设备驱动.这种思想的好处,请看我写的另外一篇文章Linux驱动的分离和分层。其中上面说的裸机驱动请看这篇文章裸机驱动但是裸机的驱动是没有加入操作系统的本文也是遵循Linux驱动的分离和......
  • GB28181设备接入侧如何支持H.265?
    技术背景一直以来,GB28181-2022之前的规范版本让人诟病的一点:没有明确针对H.265的说明,特别是监控摄像机,H.265已然成为标配,GB/T28181-2022规范,终于针对H.265做了明确的说明,让我们来一起解读下规范:基于RTP的视音频数据PS封装基于RTP的PS封装首先按照ISO/IEC13818-1:2019将视音频流封......
  • GB28181设备接入端如何播放语音广播数据
    技术背景语音广播功能是GB28181设备接入端非常重要的功能属性,语音广播让终端和平台之间,有了实时双向互动,可以满足执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工地、雪亮工程、平安乡村、生产运输、车载终端等场景的技术诉求。这里......
  • Visual Studio 启动调试程序 以管理员运行的设置(相比右键管理员运行生成好的exe文件优
    在解决方案文件上,选择添加=>新项目=>应用程序清单文件然后在C#上打开它。在应用程序清单文件上,将“asInvoker”重命名为“requireAdministrator”。生成解决方案。可以管理员权限打开所有应用程序。......
  • Eclipse远程调试Tomcat
    最近,一直在研究Tomcat的工作内幕,主要的方法就是参考《HowTomcatWorks》这本书和Tomcat5.5.26的源代码。 Tomcat的代码结构还是比较清晰的,注释也比较全。但是代码毕竟是静态的,难以彻底弄清类与类之间的协作关系,以及运行时对象的交互关系。 如果能对Tomcat的启动、处理请求和停......
  • 调试init容器
    调试Init容器此页显示如何核查与Init容器执行相关的问题。下面的示例命令行将Pod称为<pod-name>,而Init容器称为<init-container-1>和<init-container-2>。准备开始你必须拥有一个Kubernetes的集群,同时你的Kubernetes集群必须带有kubectl命令行工具。建议在......
  • 调试运行中的Pod
    使用kubectldescribepod命令获取Pod详情与之前的例子类似,我们使用一个Deployment来创建两个Pod。application/nginx-with-request.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentspec:selector:matchLabels:app:ngi......
  • 调试Pod
    诊断问题故障排查的第一步是先给问题分类。问题是什么?是关于Pod、ReplicationController还是Service?调试Pod调试ReplicationController调试Service调试Pod调试Pod的第一步是查看Pod信息。用如下命令查看Pod的当前状态和最近的事件:kubectldescribepods$......
  • 调试service
    调试Service对于新安装的Kubernetes,经常出现的问题是Service无法正常运行。你已经通过Deployment(或其他工作负载控制器)运行了Pod,并创建Service,但是当你尝试访问它时,没有任何响应。此文档有望对你有所帮助并找出问题所在。在Pod中运行命令对于这里的许多步骤,你可能希......