• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32 HAL库怎么使用SPI的发送和接收函数?

hanghang 2017-04-22 浏览量:18261

请讲讲怎么使用HAL_SPI_Transmit()​;HAL_SPI_Receive();HAL_SPI_TransmitReceive()​;发送和接收一个Byte吗?

用的CUBEMX生成的SPI3的配置

void MX_SPI3_Init(void)
{

  hspi3.Instance = SPI3;
  hspi3.Init.Mode = SPI_MODE_MASTER;
  hspi3.Init.Direction = SPI_DIRECTION_2LINES;
  hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi3.Init.NSS = SPI_NSS_SOFT;
  hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi3.Init.CRCPolynomial = 7;
  hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi3.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  if (HAL_SPI_Init(&hspi3) != HAL_OK)
  {
    Error_Handler();
  }

}

我下面这样写对吗?


void SPI_WriteByte(uint8_t TxData)

{  
    HAL_SPI_Transmit(&hspi3,&TxData,1,0xffff);

}

uint8_t SPI_ReadByte(uint8_t RxData)
{  
    HAL_SPI_Receive(&hspi3,RxData, 1, 0xffff); 
}


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 嗨,您寫入應該要包含Address資訊,如果不包含的話,這樣是傳送和接收一個Byte沒錯唷

    這行應該是

    HAL_SPI_Receive(&hspi3,&RxData, 1, 0xffff); 
    另外給您參考MPU9255的寫法
    //SPI写寄存器
    
    //reg:指定的寄存器地址
    
    //value:写入的值
    
    uint8_t MPU9255_Write_Reg(uint8_t reg,uint8_t value)
    
    {
    
    	uint8_t status;
    
    	SPI_MPU9255_CS_L;											  //使能SPI传输
    
    	status = HAL_SPI_Transmit(&hspi1, &reg, 1, 0xFFFF);
    
    	status = HAL_SPI_Transmit(&hspi1, &value, 1, 0xFFFF);
    
    	SPI_MPU9255_CS_H;										  	//禁止MPU9255
    
    	Delay(0xFFF);
    
    	return(status);													//返回状态值
    
    }
    
    
    
    //SPI读取指定寄存器
    
    //reg:指定寄存器的地址
    
    uint8_t MPU9255_Read_Reg(uint8_t reg)
    
    {
    
    	uint8_t reg_val;
    
    	SPI_MPU9255_CS_L;	
    
    	reg = reg|0x80;
    
    	HAL_SPI_Transmit(&hspi1, &reg, 1, 0xFFFF);	 	//发送读命令+寄存器号
    
     	HAL_SPI_Receive(&hspi1, &reg_val, 1, 0xFFFF);				//读取寄存器值
    
    	SPI_MPU9255_CS_H;																//禁止SPI传输
    
    	Delay(0xFFF);
    
    	return(reg_val);
    
    }
    其中SPI_MPU9255_CS是片選,以上供參考

    • 发布于 2017-04-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:3
  • void SPI_RF_WriteByte(uint8_t *WriteBuff, uint16_t Size)
    {
     HAL_StatusTypeDef status = HAL_ERROR;
        status =HAL_SPI_TransmitReceive(&hspi2, WriteBuff, WriteBuff, Size,3000);//3000

     if(status != HAL_OK)
     {
          
     }

    }

    以上~

    • 发布于2017-04-24
    • 举报
    • 评论 0
    • 1
    • 0

  • 不对吧,库函数库是这么写的

    SPI_SendData(SPI1, 0xA5);​

    ReceivedData = SPI_ReceiveData(SPI2);

    • 发布于2017-04-22
    • 举报
    • 评论 1
    • 0
    • 0
hanghang 回复了 afeiafei309 :我说的是HAL库 你说的是标准库 回复

相关问题

问题达人换一批

STM32 HAL库怎么使用SPI的发送和接收函数?