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