есть stm32 в качестве мастера, в качестве слейвов MCP23008 и INA226, SDA и SCL притянуты к питанию резисторами на 10 кОм питание всей этой радости 3.3В и вот такую картину я вижу когда пытаюсь сформировать START
собственно старт не формируется, бит SB не взлетает подскажите куда смотреть, у меня уже мыслей нет 🙁
BBS
18 авг 2023, 12:57
код?
bodigard
18 авг 2023, 13:06
BBS писал(а):
код?
да все стандартно инициализация
static void MX_I2C1_Initvoid { /* USER CODE BEGIN I2C1_Init 0 */ /* USER CODE END I2C1_Init 0 */ LL_I2C_InitTypeDef I2C_InitStruct = {0}, LL_GPIO_InitTypeDef GPIO_InitStruct = {0}, LL_APB2_GRP1_EnableClockLL_APB2_GRP1_PERIPH_GPIOB, /**I2C1 GPIO Configuration PB6 ——>, I2C1_SCL PB7 ——>, I2C1_SDA */ GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7, GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE, GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH, GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN, LL_GPIO_InitGPIOB, &GPIO_InitStruct, /* Peripheral clock enable */ LL_APB1_GRP1_EnableClockLL_APB1_GRP1_PERIPH_I2C1, /* USER CODE BEGIN I2C1_Init 1 */ /* USER CODE END I2C1_Init 1 */ /** I2C Initialization */ LL_I2C_DisableOwnAddress2I2C1, LL_I2C_DisableGeneralCallI2C1, LL_I2C_EnableClockStretchingI2C1, I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C, I2C_InitStruct.ClockSpeed = 100000, I2C_InitStruct.DutyCycle = LL_I2C_DUTYCYCLE_2, I2C_InitStruct.OwnAddress1 = 0, I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK, I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT, LL_I2C_InitI2C1, &I2C_InitStruct, LL_I2C_SetOwnAddress2I2C1, 0, /* USER CODE BEGIN I2C1_Init 2 */ LL_I2C_EnableI2C1, /* USER CODE END I2C1_Init 2 */ }
единственный момент, у меня нога RESET мс MCP23008 сразу посажена на питание, т.е. я не дергаю её после подачи питания
u37
18 авг 2023, 13:33
Ноги CLK-D не перепутали?
bodigard
18 авг 2023, 13:39
u37 писал(а):
Ноги CLK-D не перепутали?
если про SDA SCL то нет, на 20 раз уже перепроверил-промерил-прозвонил
tonyk
18 авг 2023, 13:40
bodigard писал(а):
у меня нога RESET мс MCP23008 сразу посажена на питание
А вот это зря! Тискал эту микруху. Схема была собрана на китайских перемычках. Не удивительно, что иногда происходили сбои. Но только этот 23008 наглухо зависал. Процедура сброса узла шины, описанная в мурзилках Филипса, не помогала, помогало только выключение питания, потому что сигнал сброса был подключен к питанию. За PCF8574 такого замечено не было.
у меня f103 там LL немного другой, но смысл вроде тот-же я понять не могу почему сначала падает SCL а потом SDA, а не наоборот
Cujo
18 авг 2023, 14:06
да, похоже это проблема либо с кодом, либо с пинами (анализатором может) LL_I2C_GenerateStartCondition(I2C1), – достаточно чтобы SDA в 0 ушло, если I2C включен и не в ошибке
Арсений
Вчера, 12:11
Только недавно читал про баги I2C в STM32 в этой статье. Может быть поможет.
bodigard
Вчера, 12:47
уже разобрался, в физике дело было
x893
Вчера, 16:24
bodigard писал(а):
уже разобрался, в физике дело было
Со школы надо было начинать ?
Viewing 0 reply threads
Вы должны войти в систему, чтобы ответить в этой теме.