找回密码
 立即注册
楼主: HHJuan

STC8H8K64U与ESP32进行IIC通讯,数据错误问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-02 15:38:24

2

主题

22

回帖

86

积分

注册会员

积分
86
发表于 2024-2-27 13:25:00 | 显示全部楼层
乘风*** 发表于 2024-2-27 11:15
能确定RxBuffer里面的内容吗?打印前往RxBuffer写几个固定值试试。

ESP32 IIC主机发送的都是固定值,就是我需要在STC这边分别打印一下RxBuffer的值吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-02 15:38:24

2

主题

22

回帖

86

积分

注册会员

积分
86
发表于 2024-2-27 14:33:09 | 显示全部楼层
乘风*** 发表于 2024-2-27 11:15
能确定RxBuffer里面的内容吗?打印前往RxBuffer写几个固定值试试。

截图202402271432217017.jpg

打印RxBuffer里面的内容,结果是为0
运行结果如下:
截图202402271432528749.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-30 08:50:05
已绑定手机

40

主题

2082

回帖

7177

积分

论坛元老

积分
7177
发表于 2024-2-27 15:13:49 | 显示全部楼层
HHJ*** 发表于 2024-2-27 14:33
打印RxBuffer里面的内容,结果是为0
运行结果如下:

我指的是这样:
Rxbuffer[0] = 0x11;
Rxbuffer[1] = 0x22;
Rxbuffer[2] = 0x33;
Rxbuffer[3] = 0x44;
printf("Rxbuffer[0]=%bd\r\n",Rxbuffer[0]);
printf("Rxbuffer[1]=%bd\r\n",Rxbuffer[1]);
printf("Rxbuffer[2]=%bd\r\n",Rxbuffer[2]);
printf("Rxbuffer[3]=%bd\r\n",Rxbuffer[3]);
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-02 15:38:24

2

主题

22

回帖

86

积分

注册会员

积分
86
发表于 2024-2-27 15:51:57 | 显示全部楼层
乘风*** 发表于 2024-2-27 15:13
我指的是这样:
Rxbuffer[0] = 0x11;
Rxbuffer[1] = 0x22;

我根据您提供的代码放在while(1)里面,加上了1000ms的延时,
截图202402271551304066.jpg


通过查看打印的结果,其字符串输出的结果如下:

截图202402271551524571.jpg

截图202402271541345749.jpg
截图202402271542072499.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-30 08:50:05
已绑定手机

40

主题

2082

回帖

7177

积分

论坛元老

积分
7177
发表于 2024-2-27 17:03:30 | 显示全部楼层
HHJ*** 发表于 2024-2-27 15:51
我根据您提供的代码放在while(1)里面,加上了1000ms的延时,

字符串方式打印出来的值没问题,就是输入的值。
只不过输入固定值0x11,0x22,0x33,0x44是十六进制数据,打印出来的17,34,51,68是十进制数据。
把 %bd 改成 0x%bx 就能打印出 0x11,0x22,0x33,0x44
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-02 15:38:24

2

主题

22

回帖

86

积分

注册会员

积分
86
发表于 2024-2-27 18:44:19 | 显示全部楼层
乘风*** 发表于 2024-2-27 17:03
字符串方式打印出来的值没问题,就是输入的值。
只不过输入固定值0x11,0x22,0x33,0x44是十六进制数据,打 ...

嗯嗯,明白,字符串打印没问题,能理解。
那您的意思是我在实现ESP32和STC8H8K64U之间的IIC通信,主机发过来的数据有问题?
我现在就是想解决输入的值出现的问题。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-02 15:38:24

2

主题

22

回帖

86

积分

注册会员

积分
86
发表于 2024-2-27 18:47:18 | 显示全部楼层
乘风*** 发表于 2024-2-27 17:03
字符串方式打印出来的值没问题,就是输入的值。
只不过输入固定值0x11,0x22,0x33,0x44是十六进制数据,打 ...

在ESP32上,我是直接通过IIC 发送一个固定值过去
ESP32端:
Wire.write(1);    //传送数字字符串
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-02 15:38:24

2

主题

22

回帖

86

积分

注册会员

积分
86
发表于 2024-2-29 15:57:12 | 显示全部楼层
最近记录最新进展:
所做的修改:

STC8H8K64U IIC从机:

                        if(DisplayFlag)
                        {
                                DisplayFlag = 0;
                                if(RxBuffer[0] < 10)
                                {
                                        Test_cnt = RxBuffer[3]+(RxBuffer[2]*10)+(RxBuffer[1]*100)+(RxBuffer[0]*1000);
                                                printf("I2CRXD=%bd\r\n",I2CRXD);  //尝试打印接收到的消息
                                }


ESP32 IIC主机的代码

  Wire.write(num);    //传送数字字符串
  Serial.println(num);
不断发送自增的数字字符串
截图202402291550365878.jpg

测试结果发现:STC8H8K64U接收到的消息是ESP32发送消息*2的内容,但当发送的数据是3位数后,STC接收到的数据是后2位数的结果
请问这是哪里有问题?应该如何修改?


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-02 15:38:24

2

主题

22

回帖

86

积分

注册会员

积分
86
发表于 2024-2-29 17:23:44 | 显示全部楼层
为什么STC8H8K64U作为IIC从机做接收的时候,RxBuffer没有数据,打印出来的都是0?

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-30 23:54 , Processed in 0.126201 second(s), 97 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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