[STM32F4] stm32F4之用示波器解码I2C协议

[复制链接]
2957|11
 楼主| tpgf 发表于 2021-9-9 12:17 | 显示全部楼层 |阅读模式
   当我们调试I2C的时候,有时候我们并不清楚,I2C协议有没有正常工作,借助示波器,我们可以很直观的看到通过I2C协议发出数据。所以掌握示波器对I2C进行解码也是很重要的,这里我使用的是 SIGLENT 公司的示波器,型号为 SDS 1202X,支持I2C,SPI解码等。

一.用示波器解码I2C的相关代码

主函数代码

int main(void)
{
    u8 read;
        //初始化延时函数
        delay_init(168);
        //初始化串口
        usart_init(115200);
        //初始化24c02
    Init_24c02();       

        while(1)
        {
                sendOneByte(0x00,0x20);
                read=receiveOneByte(0x00);
                USART_SendData(USART1,read);
            delay_ms(1000);
        }

}
24c02实现读写的代码

void Init_24c02()
{

        IIC_init();

}
//发送一个字节的数据
void sendOneByte(u8 Adddr_send, u8 data_send)
{
        IIC_start();
        IIC_Send_Byte(0xA0);
        IIC_Wait_Ack();
        IIC_Send_Byte(Adddr_send);
        IIC_Wait_Ack();
        IIC_Send_Byte(data_send);
        IIC_Wait_Ack();
        IIC_stop();
        delay_ms(10);
}
//接收一个字节的数据
u8 receiveOneByte(u8 Addr_receive)
{
        u8 receive=0;
        IIC_start();
        IIC_Send_Byte(0xA0);
        IIC_Wait_Ack();
        IIC_Send_Byte(Addr_receive);
        IIC_Wait_Ack();
        IIC_start();
        IIC_Send_Byte(0xA1);
        IIC_Wait_Ack();
        receive=IIC_Read_Byte(0);
        IIC_stop();
        return receive;
}


 楼主| tpgf 发表于 2021-9-9 12:17 | 显示全部楼层
二.示波器的使用

1.先设置解码参数,点击右边的decode,屏幕下方就会出现几个选项,选择串行总线1,IIC解码,信号源设置(设置CH1为SCK,CH2为SDA),地址7位,指得是设备地址,显示开启(可以看到解码出来的数据)
3391561398adfb0baf.png
2.设置解码触发

点击下图中的触发设置


watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzOTc0MTY3,size_16,color_FFFFFF,t_70.jpg

选择总线1(与之前选的解码总线保持一致),触发条件为开始条件

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzOTc0MTY3,size_16,color_FFFFFF,t_70.jpg


 楼主| tpgf 发表于 2021-9-9 12:18 | 显示全部楼层

方法一,此时若要捕捉,可以先按解码,然后按触发中的normal,然后上电,若操作正常,应能捕捉的到(本程序是一直循环,方便捕捉)

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzOTc0MTY3,size_16,color_FFFFFF,t_70.jpg


 楼主| tpgf 发表于 2021-9-9 12:18 | 显示全部楼层

方法二:在已上完电的情况下,点击auto,左右旋转Horizontal键,找到适当的地方(可以看到数据在传输),点击normal,也可以解码触发 watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzOTc0MTY3,size_16,color_FFFFFF,t_70.jpg

这样就可以在示波器上,看到解码的I2C数据


cyclefly 发表于 2021-9-9 14:18 | 显示全部楼层
我觉得,这个是教学示波器的使用
tail066 发表于 2021-9-10 10:02 | 显示全部楼层
我的示波器,怎么没有这个钮啊
redone 发表于 2021-9-11 10:47 | 显示全部楼层
都是上来就试,不行的话,找逻辑分析仪。
示波器这种高级功能不会用
学习了
aoyi 发表于 2021-10-5 18:03 | 显示全部楼层
iic必须要通过示波器查看一下
drer 发表于 2021-10-5 18:09 | 显示全部楼层
我也喜欢用示波器
gwsan 发表于 2021-10-5 18:12 | 显示全部楼层
iic对时序要求的很严格
kxsi 发表于 2021-10-5 18:21 | 显示全部楼层
有时候示波器会引入干扰
nawu 发表于 2021-10-5 18:27 | 显示全部楼层
使用示波器事半功倍
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2384

主题

17635

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部