STM32F103 SPI разные контакты не работает - PullRequest
0 голосов
/ 05 октября 2019

В настоящее время я работаю над проектом с технологией LoRaWAN с использованием микроконтроллера STM32F103C8T6. Для LoRa я использую SPI в режиме Full-Duplex Master (особенно spi1) и в CubeIDE, когда вы активируете SPI1, автоматически активируются контакты PA5, PA6 и PA7 (ver1): Configuration of SPI1

Однако печатная плата разработана и напечатана, и эти контакты, к сожалению, заняты. Потому что до того, как планировалось использовать другие контакты SPI1 (PB3, PB4, PB5) (ver2): Configuration of SPI1 v2

Итак, когда я использую 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: я также задавал этот вопрос в электронном стеке, но ответа там не было, поэтому я решил поделиться этим вопросом и здесь.

1 Ответ

1 голос
/ 05 октября 2019

После многих попыток я обнаружил, что переназначенный SPI1 не работает вместе с I2C1 из-за перекрытия выводов I2C1-SMBA с выводом SP1 MOSI (PB5), даже если вы не используете SMBA. Вы можете найти об этом здесь: STM32F103x8 опечаток глава 2.8.7

Так что, я думаю, я буду использовать I2C2 для избежания столкновения. Единственное изменение, которое я должен сделать на печатной плате, - это перенаправление контактов I2C1 на I2C2 (2 контакта), что намного лучше, чем перенаправление контактов SPI1 (3 контакта) и других элементов, занимающих контакты ver1 (также 3).

...