-2

我有一个 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 的情况下运行时,它仍然不起作用并且不再响应。

4

1 回答 1

-1

好吧,解决方案相当简单。您只需将 I2C SDA 和 SCL 数据线连接到不同的引脚(PA14 用于 JTAG 时钟)。根据手册,应使用 PB9(sda) 和 PB8(scl)。

于 2020-03-25T22:31:28.400 回答