0

我目前正在使用 STM32F103C8T6 微控制器进行 LoRaWAN 技术项目。对于 LoRa,我在全双工主模式(特别是 spi1)和 CubeIDE 中使用 SPI,当您激活 SPI1 时,会自动激活引脚 PA5、PA6 和 PA7(ver1): SPI1的配置

然而,PCB 是设计和印刷的,不幸的是这些引脚很忙。因为,之前计划使用其他 SPI1 引脚(PB3、PB4、PB5)(ver2): SPI1 v2的配置

所以,当我使用ver1时,一切都很好,LoRa连接到服务器并发送数据没有问题。但是,当我使用 ver2 时,它根本不起作用。我调试发现问题出在哪里,发现SPI读取失败(读取LoRa版本时,它返回0)。因此,ASSERT火灾和代码陷入无限循环。我在互联网上找不到任何关于 SPI 引脚差异的参考。

谁能解释这些引脚的区别?是否可以使用ver2?预先感谢。

PS 我正在使用 HAL 库 + LMIC 库(用于 LoRa),并且 SPI 的配置对于 ver1 和 ver2 都是相同的。如果需要,这是配置代码:

void MX_SPI1_Init(void)
{

  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }

}

PSS:我也在电子堆栈交换中提出过这个问题,但那里没有答案,所以我决定也在这里分享这个问题。

4

1 回答 1

1

经过多次尝试,我发现重新映射的 SPI1 不能与 I2C1 一起使用,因为 I2C1-SMBA 引脚与 SP1 MOSI 引脚(PB5)重叠,即使您不使用 SMBA。您可以在此处找到相关信息:STM32F103x8 勘误表第 2.8.7 章

所以,我想,我会使用 I2C2 来避免碰撞。我应该对 PCB 进行的唯一更改是将 I2C1 引脚重定向到 I2C2(2 个引脚),这比重定向 SPI1 引脚(3 个引脚)和其他占用 ver1(也是 3 个)引脚的元素要好得多。

于 2019-10-05T09:22:00.243 回答