关于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排查与解决 的相关文章

  • allegro画PCB如何更新元件的PCB封装

    allegro画PCB如何更新元件的PCB封装 一 更新单个器件的PCB封装 首先菜单栏选择Place gt Update Symbols 如下图 注意此案例是更新了C0805封装 中更新封装 就将上图第二个红色方框中的勾选即可 二 更新某
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

    目录 一 ECP5701 二 FS312A 三 CH221K 四 HUSB238 五 AS225KL 在如今快节奏生活不断蔓延的背景下 人们对各种事情的处理也渐渐地开始要求在保证质量的情况下 不断加快 手机快充就是一个典型的例子 从开始的1
  • 【MCU简单且容易理解的工作原理】

    SOC是啥 System on Chip 一个芯片 但是片上有好多东西的意思 市面上的AI芯片 包括你知道的麒麟xxx 骁龙xxx等等一些列手机芯片都是SOC 对于SOC设计者来讲 显然要知道码农们码出来的一行行代码是如何在SOC上跑起来的
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • 无法使用 OpenOCD 找到脚本文件

    我正在尝试按照本教程将 OpenOCD 与我的 ST 发现板一起使用 https japaric github io discovery README html https japaric github io discovery READM
  • 学习STM32正点原子好吗?

    今日话题 学习STM32正点原子好吗 正点原子的教程内容简单明了 代码也清晰直接 使初学者能够轻松理解其功能和使用方法 尤其对于需要快速完成大学作业等任务的大学生来说 可以直接借鉴并稍作修改 便可满足需求 正点原子提供的资料通俗易懂 适合用
  • 会stm32有机会进大公司吗?

    今日话题 会stm32有机会进大公司吗 我本科期间参与了飞思卡尔和电赛等比赛 使用过多种单片机 但渐渐发现单片机只是其中的一小部分 不要过分迷恋所谓的单片机基础和技巧 更值得深入研究的是C语言 如果你对此感兴趣 我愿意无偿分享一个资源包 其
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • 太阳诱电 | 陶瓷电容器的静电容量相关

    陶瓷电容器的静电容量会因温度而变化吗 电容器的静电容量的温度特性是什么 陶瓷电容器的静电容量随周围的温度而变化 静电容量因温度而变化的现象 称为静电容量的温度特性 这是由于陶瓷电容器使用的材料造成的 也是所有陶瓷电容的常有现象 以下是本公司
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • 【学习分享】全志平台TWI子系统源码分析(1)从设备树到寄存器

    全志平台TWI子系统源码分析 1 从设备树到寄存器 前言 一 名词解释 二 从设备树入手看源码 1 TWI设备树 2 TWI源码位置 3 TWI总线相关寄存器 总结 前言 这次开坑主要是想把全志平台TWI子系统在源
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板

随机推荐

  • 前端开发规范

    开发规范 本文档主要包括以下是三个部分 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都正常 程序正常时先设置时