Top.Mail.Ru
Уведомления
Очистить все

[Решено] STM32F103 проблема с I2C1.

(@ardim)
New member

Привет! Пытаюсь запустить в проекте 2 модуля I2C. I2C2 работает стабильно, но I2C1 не работает вообще. Код инициализации полностью одинаковый:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

i2c.I2C_ClockSpeed = 100000; 
i2c.I2C_Mode = I2C_Mode_I2C;
i2c.I2C_DutyCycle = I2C_DutyCycle_2;
i2c.I2C_OwnAddress1 = ADDRESS;
i2c.I2C_Ack = I2C_Ack_Disable;
i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;

I2C_Init(I2C1, &i2c);

ADDRESS определен дефайном.

В чем может быть тут дело?

Цитата
Создатель темы Размещено : 13.07.2021 15:17
Метки темы
tech
 tech
(@tech)
Level 3

Добрый день, много может быть вариантов...

Какие устройства подключаются к шинам? Есть ли отличия в схемотехнике? Верный ли адрес устройства для случая, когда не работает? Подтягивающие резисторы? Инициализация выводов gpio для i2c?

ОтветитьЦитата
Размещено : 13.07.2021 15:55
Aveal
(@aveal)
Top level Admin

И еще надо посмотреть под отладчиком значения регистров I2C1->SR2 и I2C2->SR2.

ОтветитьЦитата
Размещено : 13.07.2021 16:04
(@ardim)
New member

Спасибо за ответы! Пока по поводу регистров...

@aveal

I2C1_SR2 = 0x02;

I2C2_SR2 = 0x00;

ОтветитьЦитата
Создатель темы Размещено : 13.07.2021 17:16
Aveal
(@aveal)
Top level Admin

Для I2C1 установлен бит BUSY. Надо проверить, что выводы GPIO для I2C конфигурируются до(!) включения тактирования I2C.

Если в этом нет проблемы, то тогда придется погружаться глубже, как писал @tech.

ОтветитьЦитата
Размещено : 15.07.2021 14:30
(@ardim)
New member
От: @aveal

Для I2C1 установлен бит BUSY. Надо проверить, что выводы GPIO для I2C конфигурируются до(!) включения тактирования I2C.

Если в этом нет проблемы, то тогда придется погружаться глубже, как писал @tech.

Именно в этом и была ошибка! Огромная благодарность )

 

ОтветитьЦитата
Создатель темы Размещено : 15.07.2021 18:33
Поделиться: