В настоящее время я работаю над проектом с технологией LoRaWAN с использованием микроконтроллера STM32F103C8T6. Для LoRa я использую SPI в режиме Full-Duplex Master (особенно spi1) и в CubeIDE, когда вы активируете SPI1, автоматически активируются контакты PA5, PA6 и PA7 (ver1):
Однако печатная плата разработана и напечатана, и эти контакты, к сожалению, заняты. Потому что до того, как планировалось использовать другие контакты SPI1 (PB3, PB4, PB5) (ver2):
Итак, когда я использую ver1, все хорошо, LoRa подключаетсяна сервер и отправляет данные без проблем. Однако, когда я использую ver2, он не работает вообще. Я отладил, чтобы найти, где проблема, и обнаружил, что чтение SPI не удается (когда читается версия LoRa, он возвращает 0). Таким образом, ASSERT
срабатывает и код застревает в бесконечном цикле. Я не смог найти ссылки на разницу между выводами SPI в интернете.
Может кто-нибудь объяснить разницу между этими выводами? И возможно ли использовать ver2? Заранее спасибо.
PS Я использую HAL Library + 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: я также задавал этот вопрос в электронном стеке, но ответа там не было, поэтому я решил поделиться этим вопросом и здесь.