chen_hang 发表于 2017-4-22 21:38:53

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

请讲讲怎么使用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);
}

zoomdy 发表于 2017-4-23 11:50:41

用HAL_SPI_TransmitReceive

chen_hang 发表于 2017-4-24 09:02:38

zoomdy 发表于 2017-4-23 11:50
用HAL_SPI_TransmitReceive

可以讲讲 怎么 使用吗 谢谢

发表于 2017-4-24 09:39:04

本帖最后由 安 于 2017-4-24 09:40 编辑

如下代码是我读取ID,先发送后读取:
cmd = 0x9F;
        if(HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK)
        {
                if(HAL_SPI_Receive(&hspi1,data,5,1000) == HAL_OK)
                {                               
                }               
        }

chen_hang 发表于 2017-4-24 20:39:42

本帖最后由 chen_hang 于 2017-4-24 20:40 编辑

安 发表于 2017-4-24 09:39
如下代码是我读取ID,先发送后读取:
谢谢 你的 解答HAL_SPI_Transmit(&hspi1,cmd,1,1000) == HAL_OK 这句什么意思啊

15616384352 发表于 2017-4-25 08:31:18

楼主可以这样封装一下

//SPI 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
uint8_t Flash_ReadWriteByte(uint8_t TxData)
{
uint8_t Rxdata;
HAL_SPI_TransmitReceive(&hSPI1,&TxData,&Rxdata,1, 1000);      
return Rxdata;                            //返回收到的数据               
}
其它函数再把这个函数封装一下就可以了,比如连续读或者写就是一个对这个函数调用及循环

15616384352 发表于 2017-4-25 08:32:14

//SPI 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
uint8_t Flash_ReadWriteByte(uint8_t TxData)
{
uint8_t Rxdata;
HAL_SPI_TransmitReceive(&hspi1,&TxData,&Rxdata,1, 1000);      
        return Rxdata;                            //返回收到的数据               
}
封装一下就可以了

发表于 2017-4-25 09:41:51

先发送命令字,收到后,FLASH会有应答。

chen_hang 发表于 2017-4-25 12:35:54

安 发表于 2017-4-25 09:41
先发送命令字,收到后,FLASH会有应答。

明白了 谢谢

夜月孤狼 发表于 2017-11-24 18:16:13

问题解决没,楼主
页: [1] 2
查看完整版本: STM32 HAL库怎么使用SPI的发送和接收函数?