关于STM32软件IIC与PCF8563通信 逻辑分析仪0xA2 Missing Ack /NAK排查与解决

2023-10-30

最近在使用PCF8563时 准备用STM32 软件IIC通信时
改了软件IIC后,将所有函数都做了适配。
但是 发现PCF正常初始化 程序无法运行,链接上逻辑分析仪后发现是一直收不到ACK
在这里插入图片描述
发送的A2 地址和0x08都正常
程序正常时先设置时间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
感觉应该是WaitAck函数内有问题,导致了 Missing ACK
看了一下这个博主的帖子:
小小樱桃我最爱:AL库&STM32cubeMX工程软件模拟IIC,改改引脚即可直接使用

uint8_t Soft_IIC_Wait_ACK(void)
{
    uint8_t wait;
    Soft_IIC_Output();
    IIC_SDA_H();
    Soft_IIC_Input();
    IIC_SCL_H();
    IIC_Delay(IIC_DELAY_TIME);
    while (HAL_GPIO_ReadPin(IIC_SDA_PORT, IIC_SDA_PIN))
    {
        wait++;
        if (wait > 200)
        {
            Soft_IIC_Stop();
            return 0;
        }
    }
    IIC_SCL_L();
    return 1;
}
————————————————
版权声明:本文为CSDN博主「小小樱桃我最爱」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43173102/article/details/130559352

而我的是这个:

/********************************************
内部函数,等待ACK
********************************************/
void I2C_WaitACK()
{  
	uchar errtime=20;
	Rtc_SDA_OutMode();
	IIC_SDA_H();
	Delay(); /*读ACK*/
	IIC_SCL_H();
	Rtc_SDA_InMode();
	Delay();
//   		while(SDA)
	while(HAL_GPIO_ReadPin(RTC_SDA_GPIO_Port,RTC_SDA_Pin))
	{  
			errtime--;
			if(!errtime) 
					I2C_Stop();
	}
	IIC_SCL_L();
	Delay();
}

唯一不同的是
SDA引脚转为输入模式是在IIC_SDA_H();后
改了一下,

/********************************************
内部函数,等待ACK
********************************************/
void I2C_WaitACK()
{  
	uchar errtime=20;
	Rtc_SDA_OutMode();
	IIC_SDA_H();
	Rtc_SDA_InMode(); 
	
	Delay(); /*读ACK*/
	IIC_SCL_H();
//	Rtc_SDA_InMode(); 
	Delay();
//  while(SDA)
	while(HAL_GPIO_ReadPin(RTC_SDA_GPIO_Port,RTC_SDA_Pin))
	{  
			errtime--;
			if(!errtime) 
					I2C_Stop();
	}
	IIC_SCL_L();
	Delay();
}

然后就成功了?!!!
不清楚到底是为啥,先跑起来再说

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于STM32软件IIC与PCF8563通信 逻辑分析仪0xA2 Missing Ack /NAK排查与解决 的相关文章

  • c++虚函数、成员变量内存布局

    大家都知道c 的虚函数有个虚表 那这个需要具体在哪呢 在程序的代码段还是数据段的 一个类有成员变量 成员变量在代码段内是怎么分布的呢 如何根据一个对象指针调用某个虚函数 如何根据一个对象的指针直接修改成员变量 如果生成多个对象 那是不是会为
  • Laravel 怎么查看执行的Sql语句

    我的个人博客 逐步前行STEP 1 如果是使用Eloquent ORM操作数据库的话 在sql查询时可以调用toSql 方法来获取sql App User where name like hezehua gt toSql 2 如果是执行原生

随机推荐

  • 前端开发规范

    开发规范 本文档主要包括以下是三个部分 vue 框架构建及开发规范 webpack 打包优化 前端错误日志收集 文章目录 开发规范 前言 1 vue 框架构建及开发规范 1 1 规范目的 1 2 vue 项目框架搭建 1 2 1 脚手架构建
  • python 绝对值_Python绝对值– abs()

    python 绝对值 Python abs function returns the absolute value of the number It s one of the built in functions in python bui
  • 给定三维空间里的任意三个点来确定一个平面方程Ax+By+Cz+D=0的求解过程及伪代码的实现

    给定三维空间里的任意三个点来确定一个平面方程Ax By Cz D 0的求解过程及伪代码的实现 其思想就是 1 先求解该平面的法向量n 2 由点法式将其中的任意一点代入公式即可以求得平面方程Ax By Cz D 0的系数ABCD 3 伪代码实
  • thingking in java test3.8练习(8)(9)

    题目 展示用十六进制和八进制计数法来操作Long值 用long toBinaryString 来显示结果 Java中十六进制八进制的表示方法同c语言相同 十六进制以0x开头 八进制以0开头 注意这里都是 零 public class tes
  • 数据结构(一)--合并两个数组为有序数组

    写在开头 最近复习数据结构 想来把数据结构中的算法或者代码都用python实现一下 分割线 描述 有两个无序数组 A B 将两个数组合并为从小到大排序的有序数组 如A 3 8 11 5 B 2 6 11 8 9 20 15 应该得到数组为
  • QT 5.13保姆级安装教程

    辨清关系 要想学习一个新的东西 我们必须知其事 达其理 悟其道 然后才能无往而不利也 我们常听到QT Qt Creator 和 Qt SDK 这三者究竟是什么 他们之间的关系又是如何的 在安装QT之前我们先来了解一下他们之间的关系 Qt Q
  • neo4j入门到精通——3、neo4j目录结构和配置文档

    本文主要对neo4j图数据库的目录结构和配置文档做简单介绍 neo4j的目录结构截图如下 其中 bin目录 用于存储Neo4j的可执行程序 conf目录 用于控制Neo4j启动的配置文件 data目录 用于存储核心数据库文件 import目
  • 大数源码解析

    大数的功能实现可以不用做追究 知道用处就好的 感兴趣的可以看源码研究 构造器就不展示了 BigInteger public class BigInteger extends Number implements Comparable
  • RT-Thread记录(十三、I/O 设备模型之PIN设备)

    讲完UART设备之后 我们已经熟悉RT Thread I O 设备模型了 回头看看基本的 PIN 设备 目录 前言 一 PIN 设备模型解析 1 1 初识 GPIO 操作函数 1 2 PIN 设备框架 1 3 PIN 设备驱动框架层 实现的
  • html safari错误,HTML5的本地存储的错误:“quota_exceeded_err Safari:DOM例外22:试图存储超过定额补充一下。”...

    Rubens Mariuzzoleiyonglin提出了一个问题 html5 localStorage error with Safari QUOTA EXCEEDED ERR DOM Exception 22 An attempt was
  • Web开发必备的 9 个开源项目

    1 AdminLTE Github Star 数 24969 Github 地址 https github com almasaeed2010 AdminLTE 2 vue Element Admin Github Star 数 19546
  • LinearAlgebraMIT_9_LinearIndependence/SpanningASpace/Basis/Dimension

    这节课我们主要学习一下 Linear Independence 线性无关 spanning a space 生成空间 basis 基和 dimension 维度 同时我们要注意这四个很重要的基本概念的描述对象 我们会说向量组线性无关 由一个
  • WIN10操作系统下如何修改MySQL5.7数据库的ROOT用户密码(亲测有效)

    由于工程项目需要 需要修改MySQL5 7数据库的ROOT用户密码 但是发现网上很多方法都是针对MySQL5 6数据库系统的 并不适合MySQL5 7数据库 一 查看MySQL5 7数据库的服务名 可以观察到 MySQL5 7数据库的服务名
  • 黑马程序员jvm笔记(四)--字节码部分心得

    10 字节码部分 这部分 主要介绍了类的字节码文件 以及从更深层的角度去理解类是怎么被加载的 jvm的内存结构 10 1 字节码文件的分析 1 获得字节码文件 得到如下的字节码文件 0000000 ca fe ba be 00 00 00
  • MySQL(十)—线上MySQL锁超时了怎么办?update操作怎么上了个表锁啊?

    文章目录 一 异常错误 二 尽量还原这个错误 1 准备数据 2 阐述业务 3 分析原因 三 线上如何解决这个异常呢 1 设置锁超时时间 2 使用online ddl方式建立唯一索引 3 动态增加服务节点 一 异常错误 先上一个出现异常的截图
  • STC89C51——定时器/计数器介绍及程序配置

    前言 本文介绍基于常见的51单片机 即如下图的芯片 AT89C51具备2个定时器 计数器 即定时器 计数器 0 定时器 计数器 1 简称 T0 T1 T0 有 4 种工作方式 T1 有 3 种工作方式 2个定时器前3种工作方式一样 但是在T
  • IS-IS协议 HCIP

    我需要 最狂的风 和最静的海 HCIP IS IS协议基本原理 场景应用 历史起源 路由计算过程 地址结构 路由器分类 邻居HELLO报文 邻居关系建立 DIS及DIS与DR的类比 链路状态信息的载体 链路状态信息的交互 路由算法 网络分层
  • IO和NIO的区别

    在这里不再过多描述IO的具体API用法 总的来说reader writer是处理字符的 而inputsream 和 outputstream是处理字节的 eg 图片什么的 其实现在大多Web应用上传图片时候也不会使用字节流而是上传一个图片存
  • elasticsearch中节点都启动但是无法形成集群问题

    近日 单台机器 8个节点的es集群 8个节点都正常started了 但是就是无法形成集群 后来看日志 日志中出现一堆的MasterNotDiscoveredException这种异常 完整日志如下 2016 04 27 15 08 22 4
  • 关于STM32软件IIC与PCF8563通信 逻辑分析仪0xA2 Missing Ack /NAK排查与解决

    最近在使用PCF8563时 准备用STM32 软件IIC通信时 改了软件IIC后 将所有函数都做了适配 但是 发现PCF正常初始化 程序无法运行 链接上逻辑分析仪后发现是一直收不到ACK 发送的A2 地址和0x08都正常 程序正常时先设置时