打印
[应用相关]

AT32F403A 硬件I2C中断读,SCL引脚被拉低,如何解决?

[复制链接]
142|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 哪里需要我了 于 2024-12-25 17:56 编辑

while循环里面就这简单的几行,只有第一次读取成功了,执行一次i2c_memory_read_int以后SCL引脚就被拉低了,拿的是官方历程里面的communication_int初始化代码,只改了下引脚,用i2c_master_transmit_int和i2c_master_receive_int也是差不多效果,咋办?
if ((i2c_status = i2c_memory_read_int(&hi2cx, I2Cx_ADDRESS, 0x09, rx_buf, sizeof(rx_buf), I2C_TIMEOUT)) != I2C_OK) {
               
                }
               
                if(i2c_wait_end(&hi2cx, I2C_TIMEOUT) != I2C_OK)      
    {
//      error_handler(i2c_status);
    }      
               
                delay_ms(500);
    at32_led_toggle(LED2);
之前用STM32验证I2C从设备功能正常,也用的硬件I2C,难道AT的硬件I2C比ST还难用么?大家用的是软件模拟还是硬件?
 uint8_t read_voltage_cmd = 0x09;
        uint8_t data_received[2];
        uint16_t device_address = 0x16;

    if (HAL_I2C_Master_Transmit(&hi2c1, device_address, &read_voltage_cmd, 1, HAL_MAX_DELAY) != HAL_OK) {
        // 传输错误处理
    }

    if (HAL_I2C_Master_Receive(&hi2c1, device_address, data_received, sizeof(data_received), HAL_MAX_DELAY) != HAL_OK) {
        // 接收错误处理
    }


1.png (194.17 KB )

1.png

2.jpg (1.52 MB )

2.jpg

3.png (198.38 KB )

3.png

4.png (76.58 KB )

4.png

使用特权

评论回复
沙发
骑着蜗牛狂奔O| | 2024-12-25 18:24 | 只看该作者
你从机是个什么设备?从波形上看,主机时序没有问题,最后一个字节的第9个clk,主机是正常回了NACK的,此时SCL还为低,说明SCL是被从机拉住的

使用特权

评论回复
板凳
骑着蜗牛狂奔O| | 2024-12-25 18:26 | 只看该作者
你可以试下,在出现这个波形的时候,把从机复位,然后应该SCL就会恢复高电平,这样就可以确定是从机的问题

使用特权

评论回复
评论
哪里需要我了 2024-12-25 18:41 回复TA
从机是电池设备,应该可以确定是没问题的- -,刚刚我用i2c_master_transmit和i2c_master_receive测试,发现是正常的,主要是用了中断就这样 
地板
哪里需要我了|  楼主 | 2024-12-25 18:43 | 只看该作者
骑着蜗牛狂奔O 发表于 2024-12-25 18:26
你可以试下,在出现这个波形的时候,把从机复位,然后应该SCL就会恢复高电平,这样就可以确定是从机的问题 ...

从机不太方便复位,电池有电就一直可以I2C通讯

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝