STM32F103 SPI不同的引脚不起作用

问题描述 投票:0回答:1

我目前正在使用LoRaWAN技术使用STM32F103C8T6微控制器进行项目开发。对于LoRa,我在全双工主模式(特别是spi1)中使用SPI,而在激活SPI1时在CubeIDE中使用SPI,则自动激活了PA5,PA6和PA7引脚(ver1):Configuration of SPI1

但是,PCB是经过设计和印刷的,遗憾的是这些引脚忙碌。因为在计划使用其他SPI1引脚(PB3,PB4,PB5)(版本2)之前,因为:Configuration of SPI1 v2

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

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

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

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();
  }

}

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

spi lora stm32f1 stm32cubemx
1个回答
0
投票

经过大量尝试,我发现,即使I2C1-SMBA引脚与SP1 MOSI引脚(PB5)重叠,即使您不使用SMBA,重新映射的SPI1也无法与I2C1一起使用。您可以在这里找到有关此内容:STM32F103x8 errata第2.8.7章

所以,我想,我将使用I2C2以避免冲突。我应该在PCB上做的唯一更改是将I2C1引脚重定向到I2C2(2引脚),这比重定向SPI1引脚(3引脚)和其他占用ver1(也是3)引脚的元件要好。

© www.soinside.com 2019 - 2024. All rights reserved.