STM32 не работает I2C в slave режиме.
Добавлено: Вс ноя 06, 2022 19:33:03
Не получается реализовать работу I2C в режиме slave c использованием прерываний.
В качестве мастера используется ESP-12F которая раз в секунду передает строку 11 символом "Hello STM32"
Со стороны STM32 проект сгенерен в CubeMX включен I2C1. Поправил только функцию main вот так.
И судя по тому что показывает логический анализатор на шине, все работает......

Как только я пытаюсь заменить вот это
вот на это
Что в моем пониаение эквивалентно. Все резко перестает рботать.
На шиге это выглядит вот так.

т.е. slave перестает говорить ACK на свой адрес?
Я что то забыл включить? Как это поправить?
В качестве мастера используется ESP-12F которая раз в секунду передает строку 11 символом "Hello STM32"
Код: Выделить всё
#include <Arduino.h>
#include <Wire.h>
void setup() {
Wire.begin(D1, D2); /* join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */
}
void loop() {
Wire.beginTransmission(0x08); /* begin with device address 8 */
Wire.write("Hello STM32"); /* sends hello string */
Wire.endTransmission(); /* stop transmitting */
delay(1000);
}
Код: Выделить всё
#include "main.h"
#include "i2c.h"
#include "gpio.h"
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
uint8_t buf[32];
while (1) {
HAL_I2C_Slave_Receive(&hi2c1, buf, 11, 5000);
}
Как только я пытаюсь заменить вот это
Код: Выделить всё
HAL_I2C_Slave_Receive(&hi2c1, buf, 11, 5000);
Код: Выделить всё
HAL_I2C_Slave_Receive_IT(&hi2c1, buf, 11);
while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_LISTEN);
На шиге это выглядит вот так.
т.е. slave перестает говорить ACK на свой адрес?
Я что то забыл включить? Как это поправить?