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).