描述:

SPI轮询接收/发送数据函数
HAL_SPI_TransmitReceive(*hspi, *pTxData, *pRxData, Size, Timeout); //SPI发送/接收

  • *hspi: SPI号指针,程序中用到了&hspi1
  • *pTxData: 发送数据指针,程序中用到了data
  • *pRxData: 接收数据指针,程序中用到了data1
  • Size:数据长度
  • Timeout:超时时间
示例:

根据使用的外设,关闭未使用外设的初始化

 /* Initialize all configured peripherals */
 MX_GPIO_Init(); //初始化GPIO
// MX_ADC_Init();
// MX_WWDG_Init();
// MX_IWDG_Init();
// MX_USART1_UART_Init();
// MX_USB_DEVICE_Init();
// MX_TIM3_Init();
 MX_SPI1_Init(); //初始化SPI1
// MX_I2C1_Init();
// MX_USART2_UART_Init();
// MX_TIM2_Init();
// MX_RTC_Init();

编辑主程序,检测到按键按下时,通过SPI1接口发送data中的数据并将接收到的数据存到data1中。

/* Infinite loop */
/* USER CODE BEGIN WHILE */
uint8_t data[2] = {0X50, 0X0A,};
uint8_t data1[2] = {0X00, 0X00,};
while (1)
{
? if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == SET) //检测按键
? {
    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); //亮灯提示
    HAL_SPI_TransmitReceive(&hspi1, data, data1, 2, 100); //SPI发送/接收数据
    while(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == SET); //等待松开按键
  }
? HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); //灭灯
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

以上示例针对eefrog的STM32F042G模块,根据STM32cubeMX综合配置基础上设计,不保证在其它模块上有同样效果。