STM32 F334R8 I2C GPIO проблема - не работает

У меня есть Nucleo-F334R8, и я использую STM32Cube IDE. Версия: 1.3.0 Сборка: 5720_20200220_1053 (UTC). UART2 уже работает и правильно печатает, теперь я хочу управлять дисплеем через I2C, но Nucleo, похоже, не может инициализировать GPIO для интерфейса I2C.

Я настроил файл IOC для включения интерфейсов I2C и UART2. Я не меняю никаких свойств интерфейса I2C, просто включил его. Он компилируется успешно, но когда я пытаюсь запустить его, он сообщает в консоли отладки, что больше не отвечает. Я отладил его, чтобы увидеть, где он перестает работать. Это строка, в которой он инициализирует GPIO для интерфейса I2C (PA14, PA15).

 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

В этом методе это заканчивается:

/* Configure Alternate function mapped with the current IO */
    temp = GPIOx->AFR[position >> 3u];
    temp &= ~(0xFu << ((position & 0x07u) * 4u));
    temp |= ((GPIO_Init->Alternate) << ((position & 0x07u) * 4u));
    GPIOx->AFR[position >> 3u] = temp;

Установив эти переменные:

Я не знаю, что делать, чтобы все заработало. Кто-нибудь знает как?

Я заметил странную вещь: когда программа больше не отвечает, и я снова пытаюсь ее отладить, она не находит цель на устройстве. Даже если я снова отключу I2C, он не найдет цель на устройстве. Итак, я создал новый проект, в котором я включил только UART2, и позволил ему отладить. На этот раз отладка выполняется успешно без сообщения об ошибке. Затем я снова попытался загрузить другой проект, в котором я отключил I2C, и на этот раз он успешно работает. Когда я пытаюсь запустить его с включенным I2C, он все равно не работает и больше не отвечает.

1 ответ

Что ж, решение было довольно простым. Вам просто нужно подключить данные I2C SDA и SCL к разным контактам (PA14 использовался для часов JTAG). Согласно руководству должны использоваться PB9(sda) и PB8(scl).

Другие вопросы по тегам