野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10768|回复: 5

关于SPI通信的程序

[复制链接]
发表于 2019-5-28 16:47:04 | 显示全部楼层 |阅读模式
有没有人用stm32f7的hal库编写过与传感器SPI通信的程序,如果有,可以给我发一份吗,邮箱1607236374@qq.com   可以有偿
回复

使用道具 举报

发表于 2019-5-29 08:43:32 | 显示全部楼层
回复

使用道具 举报

发表于 2019-5-29 08:47:17 | 显示全部楼层
spi通信挺简单的了吧,为啥不问问神奇的火哥呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-29 08:59:08 | 显示全部楼层
u32 SPI_ReadPortID(void)
{
        u32 Temp = 0;
        uint8_t msbData,lsbData;

        SPI_CS_LOW();
        SPI_SendByte(0x56);                //Send 0x5600 to ADIS16445
        SPI_SendByte(0x00);
        SPI_CS_HIGH();
               
        SysTick_Delay_Us(10);
               
        SPI_CS_LOW();
        msbData = SPI_SendByte(0x00);                //receive the data
    lsbData = SPI_SendByte(0x00);
        SPI_CS_HIGH();
       
        SysTick_Delay_Us(10);
    Temp = (msbData << 8) | (lsbData & 0xFF);

  return Temp;
}

/**
  * @brief  使用SPI发送一个字节的数据
  * @param  byte:要发送的数据
  * @retval 返回接收到的数据
  */
u8 SPI_SendByte(u8 byte)
{
         SPITimeout = SPIT_FLAG_TIMEOUT;
         /* 等待发送缓冲区为空,TXE事件 */
         while (SPI_I2S_GetFlagStatus(SPIx , SPI_I2S_FLAG_TXE) == RESET)
        {
                if((SPITimeout--) == 0) return SPI_TIMEOUT_UserCallback(0);
    }

        /* 写入数据寄存器,把要写入的数据写入发送缓冲区 */
        SPI_I2S_SendData(SPIx , byte);

        SPITimeout = SPIT_FLAG_TIMEOUT;
        /* 等待接收缓冲区非空,RXNE事件 */
        while (SPI_I2S_GetFlagStatus(SPIx , SPI_I2S_FLAG_RXNE) == RESET)
        {
                if((SPITimeout--) == 0) return SPI_TIMEOUT_UserCallback(1);
        }

        /* 读取数据寄存器,获取接收缓冲区数据 */
        return SPI_I2S_ReceiveData(SPIx );
}

/**
  * @brief  使用SPI发送两个字节的数据
  * @param  word:要发送的数据(字)
  * @retval 返回接收到的数据(字)
  */
u16 SPI_GetData(u16 word)
{
        u32 Temp = 0;
        uint8_t msbSendData,lsbSendData;       
        uint8_t msbReceiveData,lsbReceiveData;

        msbSendData=word>>8;                //取出高位字节
        lsbSendData=word&0x00FF;        //取出低位字节
       
        SPI_CS_LOW();
        SPI_SendByte(msbSendData);                                        //发送高位字节
        SPI_SendByte(lsbSendData);                                        //发送低位字节
        SPI_CS_HIGH();
               
        SysTick_Delay_Us(10);
               
        SPI_CS_LOW();
        msbReceiveData = SPI_SendByte(0x00);                //获取高位字节数据
    lsbReceiveData = SPI_SendByte(0x00);                //获取低位字节数据
        SPI_CS_HIGH();
       
        SysTick_Delay_Us(1);
    Temp = (msbReceiveData << 8) | (lsbReceiveData & 0xFF);

  return Temp;
}

/**
  * @brief  等待超时回调函数
  * @param  None.
  * @retval None.
  */
static  uint16_t SPI_TIMEOUT_UserCallback(uint8_t errorCode)
{
        /* 等待超时后的处理,输出错误信息 */
        ADIS16445_ERROR("SPI 等待超时!errorCode = %d",errorCode);
        return 0;
}
/*********************************************END OF FILE**********************/
火哥,这是用标准库编写的   我准备一直到HAL库,当发送U8一个字节的数据时   状态标志这搞不懂   还是说hal 库移植标准库不能这样编写?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-29 09:02:20 | 显示全部楼层

想回答你就回答   别你妈的装优越   老子刚学   看不惯你这样的  装B货
回复 支持 反对

使用道具 举报

发表于 2019-5-29 09:15:40 | 显示全部楼层
fanzq 发表于 2019-5-29 09:02
想回答你就回答   别你妈的装优越   老子刚学   看不惯你这样的  装B货

?我帮你顶帖而已,这么暴躁?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-30 05:41 , Processed in 0.036244 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表