0

stm32f4 Discovery ボード (stm43f407xx) を使用するプロジェクトに取り組んでいます。SPBTLE-RF (IDB05A1 ボード) と通信したいと考えています。

私はプリスケーラー 8 で SPI2 を使用しています (私は 168Mhz を持っています。apb1 は 42 Mhz で動作するため、クロックは 5.25 Mhz です)。

1 つの nucleo ボード (spi1 prescaler 4) で試してみましたが、非常にうまく機能するので、ハードウェアは問題ありません。その後、2 つのディスカバリー ボードで試しましたが、成功しませんでした。

すべての接続を再確認しましたが、検出されたソフトウェアは、ピンとクロックのみが変更された nucleo ボードと同じです。

このハードウェアを使用したことがある人、または何か提案できる人はいますか?

4

1 に答える 1

0

解決しました!ここで説明しますが、bluenrg は割り込みによって処理する必要がある IRQ ピンを備えた 5 ワイヤ SPI を使用するため、適切な割り込みハンドラを宣言するのを忘れていました。

興味深いのは、プリスケーラー 16 を使用していることです。それ以外の場合は機能しません。なぜなら、プリスケーラー 8 では SPI2 のクロック周波数が最大 8Mhz を下回っているためです。ここに時計の初期化コードがあります:

void SystemClock_Config(void) {

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                          |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
于 2016-09-07T23:36:55.463 に答える