初中生
最后登录1970-1-1
在线时间 小时
注册时间2019-5-23
|
楼主 |
发表于 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 库移植标准库不能这样编写? |
|