У меня 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;
С этими переменными:
Я не знаю, что делать, чтобы это работало. Кто-нибудь знает как?
Странная вещь, которую я заметил: когда программа больше не отвечает, и я пытаюсь снова ее отладить, она не находит цель на устройстве. Даже если я снова отключу I2 C, он не найдет цель на устройстве. Поэтому я создал новый проект, в котором я включил только UART2 и позволил отлаживать его. На этот раз он успешно отлаживается без сообщения об ошибке. Затем я попытался загрузить другой проект снова, где я отключил I2 C, и на этот раз он успешно работает. Когда я пытаюсь запустить его с включенным I2 C, он все равно не работает и больше не отвечает.