[应用相关] AT32F403A 硬件I2C中断读,SCL引脚被拉低,如何解决?

[复制链接]
4425|11
 楼主| 哪里需要我了 发表于 2024-12-25 17:21 | 显示全部楼层 |阅读模式
本帖最后由 哪里需要我了 于 2024-12-30 14:40 编辑

问题已经解决,使用最新AT32F403A_407_Firmware_Library_V2.2.0.zip内例程,使用I2C中断不会有时钟信号被拉低的问题。
Firmware Library在雅特力官网 -> 产品讯息 -> xxxMCU -> xxx系列 ->下拉找到“BSP”一栏下载。
之前都是在 雅特力官网 -> 技术与开发支持 -> Example code里面找的例程,看日期是有点老了
感谢 [backcolor=rgba(255, 255, 255, 0.9)][size=1.75]骑着蜗牛狂奔O 大佬!


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

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

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


1.png
2.jpg
3.png
4.png
5.png
6.png
5789667723e40b5272.png
骑着蜗牛狂奔O 发表于 2024-12-25 18:24 | 显示全部楼层
你从机是个什么设备?从波形上看,主机时序没有问题,最后一个字节的第9个clk,主机是正常回了NACK的,此时SCL还为低,说明SCL是被从机拉住的
骑着蜗牛狂奔O 发表于 2024-12-25 18:26 | 显示全部楼层
你可以试下,在出现这个波形的时候,把从机复位,然后应该SCL就会恢复高电平,这样就可以确定是从机的问题

评论

@哪里需要我了 :如果这个是正常的,你用BSP里面的demo试一下,是不是你移植的时候改到什么地方了  发表于 2024-12-26 09:20
从机是电池设备,应该可以确定是没问题的- -,刚刚我用i2c_master_transmit和i2c_master_receive测试,发现是正常的,主要是用了中断就这样  发表于 2024-12-25 18:41
 楼主| 哪里需要我了 发表于 2024-12-25 18:43 | 显示全部楼层
骑着蜗牛狂奔O 发表于 2024-12-25 18:26
你可以试下,在出现这个波形的时候,把从机复位,然后应该SCL就会恢复高电平,这样就可以确定是从机的问题 ...

从机不太方便复位,电池有电就一直可以I2C通讯
骑着蜗牛狂奔O 发表于 2024-12-26 09:19 | 显示全部楼层
哪里需要我了 发表于 2024-12-25 18:43
从机不太方便复位,电池有电就一直可以I2C通讯

从机是一个传感器芯片还是MCU?

评论

@骑着蜗牛狂奔O :我现在改用I2C1 引脚PB6 PB7,中断发收就正常了,看了下买的开发板原理图I2C2 PB11上接了个0欧电阻,又连了个电容接地,但是开发板上电容都没焊,按道理应该也是引脚直出的。也不知道是初始化哪里改错了,大佬帮忙看下  发表于 2024-12-26 17:52
@哪里需要我了 :如果还不能解决可以加我微信,我远程给你看一下18983915772  发表于 2024-12-26 17:47
@哪里需要我了 :你问题解决没有?  发表于 2024-12-26 15:16
ti的电量计芯片,一般是smbus通讯,不过i2c也差不多可以用  发表于 2024-12-26 09:24
 楼主| 哪里需要我了 发表于 2024-12-30 14:29 | 显示全部楼层
问题解决了,从AT官网下载最新的AT32F403A_407_Firmware_Library_V2.2.0.zip,用里面例程就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

35

帖子

0

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