здравствуйте, вообщем на 1 плате(vl-disocvery) i2c неделю назад я запустил, теперь пытаюсь сделать 2ое устройство - slave на L-DISCOVERY. Через резисторы на i2c 2ой платы подтянуто питание +3.3В всё как надо, при вкл на линии 0.Т.е. неправильно сконфигурированы выходы...делал по
http://we.easyelectronics.ru/STM32/stm3 ... tenko.html1) альтернативная функция портов
2) Output open-drain
3) Pull-up
4) скорость пытался и 2МГц и 400Кгц т.к. написано разное в инете.
5) AF4 на обоих портах
висит в 0... если отк шину то 1ая плата норм работает тут же высылает адрес...
Код:
void i2c_init()
{
//RCC->AHBENR |=RCC_AHBENR_GPIOBEN; // тактирование порт Б
RCC->APB1ENR |=RCC_APB1ENR_I2C2EN; // тактирование I2C2
//GPIOB->MODER |=GPIO_MODER_MODER10_0 | GPIO_MODER_MODER11_0; // Alternate function mode
GPIOB->MODER |=GPIO_MODER_MODER10_1 | GPIO_MODER_MODER11_1; // Alternate function mode
GPIOB->OTYPER |=GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_11; // Output open-drain
GPIOB->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR10_0 | GPIO_OSPEEDER_OSPEEDR11_0;
GPIOB->PUPDR |=GPIO_PUPDR_PUPDR10_0 | GPIO_PUPDR_PUPDR11_0;
GPIOB->AFRH |=(1<<10) | (1<<14);
//GPIOB->ODR |=GPIO_ODR_ODR_10 | GPIO_ODR_ODR_11;
I2C2->CR2 |= 2; // делители времени итп
I2C2->CCR |= 10;
I2C2->TRISE = 3;
I2C2->OAR1|=3; // адресс
I2C1->CR1 |= (I2C_CR1_ACK | I2C_CR1_PE); // вкл перийферию i2c
while (!(I2C1->CR1&I2C_CR1_PE)){}
}