STM32 F334R8 I2 C GPIO проблема - не работает - PullRequest
0 голосов
/ 26 марта 2020

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

Я настроил файл IO C для включения интерфейса I2 C и интерфейса UART2. Я не меняю свойства интерфейса I2 C, просто включил его. Он успешно компилируется, но когда я пытаюсь запустить его, в консоли отладки он говорит, что больше не отвечает. Я отладил его, чтобы увидеть, где он перестает работать. Это строка, где он инициализирует GP IOs для интерфейса I2 C (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;

С этими переменными: enter image description here

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

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

1 Ответ

0 голосов
/ 26 марта 2020

Ну, решение было довольно простым. Вам просто нужно подключить линии данных I2 C SDA и SCL к различным контактам (PA14 использовался для синхронизации JTAG). В соответствии с Руководством следует использовать PB9 (sda) и PB8 (scl).

...