我目前正在使用 STM32F103C8T6 微控制器进行 LoRaWAN 技术项目。对于 LoRa,我在全双工主模式(特别是 spi1)和 CubeIDE 中使用 SPI,当您激活 SPI1 时,会自动激活引脚 PA5、PA6 和 PA7(ver1):
然而,PCB 是设计和印刷的,不幸的是这些引脚很忙。因为,之前计划使用其他 SPI1 引脚(PB3、PB4、PB5)(ver2):
所以,当我使用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:我也在电子堆栈交换中提出过这个问题,但那里没有答案,所以我决定也在这里分享这个问题。