c - STM32f10x -- ADS1115 -- I2C -- AF 标志始终设置

标签 c stm32 i2c

当我发送地址时,我无法从 ADS1115 获得 ACK。 我使用 Embitz IDE 和 STM32 标准外设库。

我总是得到 AF = 1。

这是代码:

#include "stm32f10x_conf.h"

#define ADS1115_Address  0x90

int main(void) {
    GPIO_InitTypeDef GPIO_InitStructure;
    I2C_InitTypeDef I2C_InitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);

    I2C_DeInit(I2C1);

    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_ClockSpeed = 100000;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_OwnAddress1 = 0;
    I2C_Init(I2C1, &I2C_InitStructure);
    I2C_Cmd(I2C1, ENABLE);

    while(1) {
        I2C_GenerateSTART(I2C1, ENABLE);
        I2C_Send7bitAddress(I2C1, ADS1115_Address, I2C_Direction_Transmitter);
    }
}

最佳答案

ads1115 只有 4 个地址 0x48 0x49 0x4A 0x4B

您可以在数据表上找到寻址

ads1115 不能使用 0x90 地址

关于c - STM32f10x -- ADS1115 -- I2C -- AF 标志始终设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48785157/

相关文章:

c - 为什么atoi功能不起作用?

c - C语言如何在不停止程序的情况下使用scanf?

C - 链表 - 插入元素未更新 - 仅添加最后一个输入元素

ssl - 如何在 tls 中使用 STM32 lwip/mqtt api?

c - STM32L072KBU 从应用程序代码跳转到引导加载程序(系统内存)

c++ - I2C-dev : Change write and read parameters

c - 为什么堆栈不传递命令行的输入

c - 在 Linux 的 Raspberry Pi 上使用 C 语言从头开始进行 I²C 通信

c - 为什么我只收到第一个地址字节? (I2C 协议(protocol))

c - STM32F1发送UART时丢失字节