发现和bluenrg-ms之间的SPI连接

时间:2016-09-05 23:52:33

标签: embedded stm32f4discovery bluenrg

我正在使用stm32f4 Discovery板(stm43f407xx)开展项目,我想与SPBTLE-RF(IDB05A1板)进行通信。

我使用带有预分频器8的SPI2(我有168Mhz,apb1以42 Mhz运行,因此时钟为5.25 Mhz),数据表说bluenrg-ms中的spi clock工作频率高达8Mhz,但我无法通信用芯片。

我尝试过使用一个核板(spi1预分频器4),它工作得非常好,所以硬件没问题,然后我尝试了两个发现板但没有成功。

我已经仔细检查了所有连接,发现的软件与仅针对引脚和时钟修改的核板相同。

任何人都使用过此硬件或可以提出建议吗?

1 个答案:

答案 0 :(得分:0)

我已经解决了!现在我解释一下,我忘了宣布正确的中断处理程序,因为bluenrg使用5线SPI和IRQ引脚,必须由中断处理。

一个有趣的事情是我使用预分频器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);
}