我目前正在使用LoRaWAN技术使用STM32F103C8T6微控制器进行项目开发。对于LoRa,我在全双工主模式(特别是spi1)中使用SPI,而在激活SPI1时在CubeIDE中使用SPI,则自动激活了PA5,PA6和PA7引脚(ver1):
但是,PCB是经过设计和印刷的,遗憾的是这些引脚忙碌。因为在计划使用其他SPI1引脚(PB3,PB4,PB5)(版本2)之前,因为:
因此,当我使用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:我也在电子堆栈交换中也提出了这个问题,但是那里没有答案,所以我决定在这里也分享这个问题。
经过大量尝试,我发现,即使I2C1-SMBA引脚与SP1 MOSI引脚(PB5)重叠,即使您不使用SMBA,重新映射的SPI1也无法与I2C1一起使用。您可以在这里找到有关此内容:STM32F103x8 errata第2.8.7章
所以,我想,我将使用I2C2以避免冲突。我应该在PCB上做的唯一更改是将I2C1引脚重定向到I2C2(2引脚),这比重定向SPI1引脚(3引脚)和其他占用ver1(也是3)引脚的元件要好。