STM32
直播中

李猛

8年用户 1604经验值
私信 关注
[问答]

请问stm32f103VCT6的spi1的两处接口可以混用吗?

我在设计硬件时spi连岔了线,为了尽可能少改动已有的线,我发现spi1在STM32f103vct6上有两处。我想用PB5作为MOSI,用PA5PA6作为SCK和MISO,但是在cubemx设置发现不能同时设置,如果不用cubemx而是靠标准库写的话能做到我上面所述的操作吗?

回帖(1)

手托初梦

2024-7-22 17:08:17
STM32F103VCT6的SPI1确实有两个不同的引脚配置,但是它们不能同时混用。这是因为SPI1的时钟线(SCK)、主出线(MOSI)和主入线(MISO)需要保持一致,以确保数据传输的正确性。

在您的情况下,您希望使用PB5作为MOSI,PA5作为SCK,PA6作为MISO。这是可能的,但您需要手动配置SPI1的引脚和时钟设置,而不是依赖CubeMX。

以下是使用标准库实现您所需配置的步骤:

1. 首先,您需要启用SPI1的时钟。在您的初始化代码中添加以下行:

```c
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
```

2. 接下来,您需要配置GPIO引脚。对于PB5、PA5和PA6,您需要设置它们为复用功能模式,并选择正确的复用功能。以下是示例代码:

```c
GPIO_InitTypeDef GPIO_InitStructure;

// PB5作为MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

// PA5作为SCK
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// PA6作为MISO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
```

3. 配置SPI1的参数。您需要设置SPI1的工作模式、数据大小、时钟极性、时钟相位等。以下是示例代码:

```c
SPI_InitTypeDef SPI_InitStructure;

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;

SPI_Init(SPI1, &SPI_InitStructure);
```

4. 最后,您需要启用SPI1:

```c
SPI_Cmd(SPI1, ENABLE);
```

通过以上步骤,您应该可以实现使用PB5作为MOSI,PA5作为SCK,PA6作为MISO的SPI1配置。请注意,这仅适用于标准库,如果您使用HAL库或其他库,可能需要进行相应的调整。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分