我有一个 Nucleo-F334R8 并且正在使用 STM32Cube IDE 版本:1.3.0 构建:5720_20200220_1053 (UTC)。UART2 已经可以正常工作并正确打印内容,现在我想通过 I2C 控制显示器,但 Nucleo 似乎无法为 I2C 接口初始化 GPIO。
我配置了 IOC 文件以启用 I2C 和 UART2 接口。我没有更改 I2C 接口的属性,只是启用了它。它编译成功,但是当我尝试让它运行时,它在调试控制台中说它不再响应。我对其进行了调试以查看它停止工作的位置。它在其中初始化 I2C 接口(PA14、PA15)的 GPIO。
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 的情况下运行时,它仍然不起作用并且不再响应。