当前位置: 首页>>代码示例>>C++>>正文


C++ SPIx_ReadWriteByte函数代码示例

本文整理汇总了C++中SPIx_ReadWriteByte函数的典型用法代码示例。如果您正苦于以下问题:C++ SPIx_ReadWriteByte函数的具体用法?C++ SPIx_ReadWriteByte怎么用?C++ SPIx_ReadWriteByte使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了SPIx_ReadWriteByte函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: SD_WaitDataReady

//等待SD卡写入完成
//返回值:0,成功;
//    其他,错误代码;
u8 SD_WaitDataReady(void)
{
    u8 r1=MSD_DATA_OTHER_ERROR;
    u32 retry;
    retry=0;
    do
    {
        r1=SPIx_ReadWriteByte(0xFF)&0X1F;//读到回应
        if(retry==0xfffe)return 1;
        retry++;
        switch (r1)
        {
        case MSD_DATA_OK://数据接收正确了
            r1=MSD_DATA_OK;
            break;
        case MSD_DATA_CRC_ERROR:  //CRC校验错误
            return MSD_DATA_CRC_ERROR;
        case MSD_DATA_WRITE_ERROR://数据写入错误
            return MSD_DATA_WRITE_ERROR;
        default://未知错误
            r1=MSD_DATA_OTHER_ERROR;
            break;
        }
    } while(r1==MSD_DATA_OTHER_ERROR); //数据错误时一直等待
    retry=0;
    while(SPIx_ReadWriteByte(0XFF)==0)//读到数据为0,则数据还未写完成
    {
        retry++;
        //delay_us(10);//SD卡写等待需要较长的时间
        if(retry>=0XFFFFFFFE)return 0XFF;//等待失败了
    };
    return 0;//成功了
}
开发者ID:blackmiaool,项目名称:miao_keyboard,代码行数:36,代码来源:MMC_SD.C

示例2: MSD_WriteBuffer

//写入MSD/SD数据
//pBuffer:数据存放区
//ReadAddr:写入的首地址
//NumByteToRead:要写入的字节数
//返回值:0,写入完成
//    其他,写入失败
u8 MSD_WriteBuffer(u8* pBuffer, u32 WriteAddr, u32 NumByteToWrite)
{
    u32 i,NbrOfBlock = 0, Offset = 0;
    u32 sector;
    u8 r1;
    NbrOfBlock = NumByteToWrite / BLOCK_SIZE;//得到要写入的块的数目
    SD_CS=0;
    while (NbrOfBlock--)//写入一个扇区
    {
        sector=WriteAddr+Offset;
        if(SD_Type==SD_TYPE_V2HC)sector>>=9;//执行与普通操作相反的操作
        r1=SD_SendCommand_NoDeassert(CMD24,sector,0xff);//写命令
        if(r1)
        {
            SD_CS=1;
            return 1;//应答不正确,直接返回
        }
        SPIx_ReadWriteByte(0xFE);//放起始令牌0xFE
        //放一个sector的数据
        for(i=0; i<512; i++)SPIx_ReadWriteByte(*pBuffer++);
        //发2个Byte的dummy CRC
        SPIx_ReadWriteByte(0xff);
        SPIx_ReadWriteByte(0xff);
        if(SD_WaitDataReady())//等待SD卡数据写入完成
        {
            SD_CS=1;
            return 2;
        }
        Offset += 512;
    }
    //写入完成,片选置1
    SD_CS=1;
    SPIx_ReadWriteByte(0xff);
    return 0;
}
开发者ID:blackmiaool,项目名称:miao_keyboard,代码行数:41,代码来源:MMC_SD.C

示例3: SPI_FLASH_Write_SR

//写SPI_FLASH状态寄存器
//只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以写!!!
void SPI_FLASH_Write_SR(u8 sr)   
{   
	SPI_FLASH_CS=0;                            //使能器件   
	SPIx_ReadWriteByte(W25X_WriteStatusReg);   //发送写取状态寄存器命令    
	SPIx_ReadWriteByte(sr);               //写入一个字节  
	SPI_FLASH_CS=1;                            //取消片选     	      
}   
开发者ID:itecwip,项目名称:stm32f1_stuff,代码行数:9,代码来源:flash.c

示例4: NRF24L01_Read_Buf

//在指定位置读出指定长度的数据
//reg:寄存器(位置)
//*pBuf:数据指针
//len:数据长度
//返回值,此次读到的状态寄存器值 
u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len)
	{
	u8 status,u8_ctr;	       
	Clr_NRF24L01_CSN;           //使能SPI传输
	status=SPIx_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值   	   
	for(u8_ctr=0;u8_ctr<len;u8_ctr++)pBuf[u8_ctr]=SPIx_ReadWriteByte(0XFF);//读出数据
	Set_NRF24L01_CSN;       //关闭SPI传输
	return status;        //返回读到的状态值
	}
开发者ID:itecwip,项目名称:stm32f1_stuff,代码行数:14,代码来源:24l01.c

示例5: NRF24L01_Write_Buf

//在指定位置写指定长度的数据
//reg:寄存器(位置)
//*pBuf:数据指针
//len:数据长度
//返回值,此次读到的状态寄存器值
u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len)
{
	u8 status,u8_ctr;	    
 	NRF24L01_CSN = 0;          //使能SPI传输
  	status = SPIx_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值
  	for(u8_ctr=0; u8_ctr<len; u8_ctr++)SPIx_ReadWriteByte(*pBuf++); //写入数据	 
  	NRF24L01_CSN = 1;       //关闭SPI传输
  	return status;          //返回读到的状态值
}				   
开发者ID:Thousandstar,项目名称:16_STM32_Monitoring_Board,代码行数:14,代码来源:24l01.c

示例6: SPI_Flash_ReadSR

//读取SPI_FLASH的状态寄存器
//BIT7  6   5   4   3   2   1   0
//SPR   RV  TB BP2 BP1 BP0 WEL BUSY
//SPR:默认0,状态寄存器保护位,配合WP使用
//TB,BP2,BP1,BP0:FLASH区域写保护设置
//WEL:写使能锁定
//BUSY:忙标记位(1,忙;0,空闲)
//默认:0x00
u8 SPI_Flash_ReadSR(void)   
{  
	u8 byte=0;   
	SPI_FLASH_CS=0;                            //使能器件   
	SPIx_ReadWriteByte(W25X_ReadStatusReg);    //发送读取状态寄存器命令    
	byte=SPIx_ReadWriteByte(0Xff);             //读取一个字节  
	SPI_FLASH_CS=1;                            //取消片选     
	return byte;   
} 
开发者ID:itecwip,项目名称:stm32f1_stuff,代码行数:17,代码来源:flash.c

示例7: NRF24L01_Write_Reg

//SPI写寄存器
//reg:指定寄存器地址
//value:写入的值
u8 NRF24L01_Write_Reg(u8 reg,u8 value)
	{
	u8 status;	
	Clr_NRF24L01_CSN;                 //使能SPI传输
	status =SPIx_ReadWriteByte(reg);//发送寄存器号 
	SPIx_ReadWriteByte(value);      //写入寄存器的值
	Set_NRF24L01_CSN;                 //禁止SPI传输	   
	return(status);       			//返回状态值
	}
开发者ID:itecwip,项目名称:stm32f1_stuff,代码行数:12,代码来源:24l01.c

示例8: SPI_Flash_ReadSR

//读取SPI_FLASH的状态寄存器
//BIT7  6   5   4   3   2   1   0
//SPR   RV  TB BP2 BP1 BP0 WEL BUSY
//SPR:默认0,状态寄存器保护位,配合WP使用
//TB,BP2,BP1,BP0:FLASH区域写保护设置
//WEL:写使能锁定
//BUSY:忙标记位(1,忙;0,空闲)
//默认:0x00
u8 SPI_Flash_ReadSR(void)   
{  
	u8 byte=0;   
	W25Q16_CS_LOW();                            //使能器件   
	SPIx_ReadWriteByte(0x05);    //发送读取状态寄存器命令    
	byte=SPIx_ReadWriteByte(0Xff);             //读取一个字节  
	W25Q16_CS_HIGH();                            //取消片选     
	return byte;   
} 
开发者ID:cjeeks,项目名称:MCU-Development,代码行数:17,代码来源:w25q16.c

示例9: NRF24L01_Read_Reg

//读取SPI寄存器值
//reg:要读的寄存器
u8 NRF24L01_Read_Reg(u8 reg)
	{
	u8 reg_val;	    
	Clr_NRF24L01_CSN;          //使能SPI传输		
	SPIx_ReadWriteByte(reg);   //发送寄存器号
	reg_val=SPIx_ReadWriteByte(0XFF);//读取寄存器内容
	Set_NRF24L01_CSN;          //禁止SPI传输		    
	return(reg_val);           //返回状态值
	}	
开发者ID:itecwip,项目名称:stm32f1_stuff,代码行数:11,代码来源:24l01.c

示例10: SPI_Flash_Erase_Sector

//擦除一个扇区
//Dst_Addr:扇区地址 0~511 for w25x16
//擦除一个山区的最少时间:150ms
void SPI_Flash_Erase_Sector(u32 Dst_Addr)   
{   
	Dst_Addr*=4096;
    SPI_FLASH_Write_Enable();                  //SET WEL 	 
    SPI_Flash_Wait_Busy();   
  	SPI_FLASH_CS=0;                            //使能器件   
    SPIx_ReadWriteByte(W25X_SectorErase);      //发送扇区擦除指令 
    SPIx_ReadWriteByte((u8)((Dst_Addr)>>16));  //发送24bit地址    
    SPIx_ReadWriteByte((u8)((Dst_Addr)>>8));   
    SPIx_ReadWriteByte((u8)Dst_Addr);  
	SPI_FLASH_CS=1;                            //取消片选     	      
    SPI_Flash_Wait_Busy();   				   //等待擦除完成
}  
开发者ID:itecwip,项目名称:stm32f1_stuff,代码行数:16,代码来源:flash.c

示例11: SPI_Flash_Write_Page

//SPI在一页(0~65535)内写入少于256个字节的数据
//在指定地址开始写入最大256字节的数据
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大256),该数不应该超过该页的剩余字节数!!!	 
void SPI_Flash_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{
 	u16 i;  
    SPI_FLASH_Write_Enable();                  //SET WEL 
	SPI_FLASH_CS=0;                            //使能器件   
    SPIx_ReadWriteByte(W25X_PageProgram);      //发送写页命令   
    SPIx_ReadWriteByte((u8)((WriteAddr)>>16)); //发送24bit地址    
    SPIx_ReadWriteByte((u8)((WriteAddr)>>8));   
    SPIx_ReadWriteByte((u8)WriteAddr);   
    for(i=0;i<NumByteToWrite;i++)SPIx_ReadWriteByte(pBuffer[i]);//循环写数  
	SPI_FLASH_CS=1;                            //取消片选 
	SPI_Flash_Wait_Busy();					   //等待写入结束
} 
开发者ID:itecwip,项目名称:stm32f1_stuff,代码行数:18,代码来源:flash.c

示例12: SD_WriteMultiBlock

//写入SD卡的N个block(未实际测试过)
//输入:u32 sector 扇区地址(sector值,非物理地址)
//     u8 *buffer 数据存储地址(大小至少512byte)
//     u8 count 写入的block数目
//返回值:0: 成功
//       other:失败
u8 SD_WriteMultiBlock(u32 sector, const u8 *data, u8 count)
{
    u8 r1;
    u16 i;
    //SPIx_SetSpeed(SPI_SPEED_HIGH);//设置为高速模式
    if(SD_Type != SD_TYPE_V2HC)sector = sector<<9;//如果不是SDHC,给定的是sector地址,将其转换成byte地址
    if(SD_Type != SD_TYPE_MMC) r1 = SD_SendCommand(ACMD23, count, 0x00);//如果目标卡不是MMC卡,启用ACMD23指令使能预擦除
    r1 = SD_SendCommand(CMD25, sector, 0x00);//发多块写入指令
    if(r1 != 0x00)return r1;  //应答不正确,直接返回
    SD_CS=0;//开始准备数据传输
    SPIx_ReadWriteByte(0xff);//先放3个空数据,等待SD卡准备好
    SPIx_ReadWriteByte(0xff);
    //--------下面是N个sector写入的循环部分
    do
    {
        //放起始令牌0xFC 表明是多块写入
        SPIx_ReadWriteByte(0xFC);
        //放一个sector的数据
        for(i=0; i<512; i++)
        {
            SPIx_ReadWriteByte(*data++);
        }
        //发2个Byte的dummy CRC
        SPIx_ReadWriteByte(0xff);
        SPIx_ReadWriteByte(0xff);

        //等待SD卡应答
        r1 = SPIx_ReadWriteByte(0xff);
        if((r1&0x1F)!=0x05)
        {
            SD_CS=1;    //如果应答为报错,则带错误代码直接退出
            return r1;
        }
        //等待SD卡写入完成
        if(SD_WaitDataReady()==1)
        {
            SD_CS=1;    //等待SD卡写入完成超时,直接退出报错
            return 1;
        }
    } while(--count);//本sector数据传输完成
    //发结束传输令牌0xFD
    r1 = SPIx_ReadWriteByte(0xFD);
    if(r1==0x00)
    {
        count =  0xfe;
    }
    if(SD_WaitDataReady()) //等待准备好
    {
        SD_CS=1;
        return 1;
    }
    //写入完成,片选置1
    SD_CS=1;
    SPIx_ReadWriteByte(0xff);
    return count;   //返回count值,如果写完则count=0,否则count=1
}
开发者ID:blackmiaool,项目名称:miao_keyboard,代码行数:62,代码来源:MMC_SD.C

示例13: SPI_Flash_Read

//读取SPI FLASH  
//在指定地址开始读取指定长度的数据
//pBuffer:数据存储区
//ReadAddr:开始读取的地址(24bit)
//NumByteToRead:要读取的字节数(最大65535)
void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   
{ 
 	u16 i;    												    
	SPI_FLASH_CS=0;                            //使能器件   
    SPIx_ReadWriteByte(W25X_ReadData);         //发送读取命令   
    SPIx_ReadWriteByte((u8)((ReadAddr)>>16));  //发送24bit地址    
    SPIx_ReadWriteByte((u8)((ReadAddr)>>8));   
    SPIx_ReadWriteByte((u8)ReadAddr);   
    for(i=0;i<NumByteToRead;i++)
	{ 
        pBuffer[i]=SPIx_ReadWriteByte(0XFF);   //循环读数  
    }
	SPI_FLASH_CS=1;                            //取消片选     	      
}  
开发者ID:itecwip,项目名称:stm32f1_stuff,代码行数:19,代码来源:flash.c

示例14: SD_SendCommand

//向SD卡发送一个命令
//输入: u8 cmd   命令
//      u32 arg  命令参数
//      u8 crc   crc校验值
//返回值:SD卡返回的响应
u8 SD_SendCommand(u8 cmd, u32 arg, u8 crc)
{
    u8 r1;
    u8 Retry=0;
    SD_CS=1;
    SPIx_ReadWriteByte(0xff);//高速写命令延时
    SPIx_ReadWriteByte(0xff);
    SPIx_ReadWriteByte(0xff);
    //片选端置低,选中SD卡
    SD_CS=0;
    //发送
    SPIx_ReadWriteByte(cmd | 0x40);//分别写入命令
    SPIx_ReadWriteByte(arg >> 24);
    SPIx_ReadWriteByte(arg >> 16);
    SPIx_ReadWriteByte(arg >> 8);
    SPIx_ReadWriteByte(arg);
    SPIx_ReadWriteByte(crc);
    //等待响应,或超时退出
    while((r1=SPIx_ReadWriteByte(0xFF))==0xFF)
    {
        Retry++;
        if(Retry>200)break;
    }
    //关闭片选
    SD_CS=1;
    //在总线上额外增加8个时钟,让SD卡完成剩下的工作
    SPIx_ReadWriteByte(0xFF);
    //返回状态值
    return r1;
}
开发者ID:blackmiaool,项目名称:miao_keyboard,代码行数:35,代码来源:MMC_SD.C

示例15: SPIx_Init

/*
 * 函数名:SPIx_Init
 * 描述  :SPI1的初始化
 * 输入  :无
 * 输出  :无
 * 调用  :外部调用
 */
void SPIx_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义IO口配置 结构体

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1,ENABLE);//SPI GPIOA 时钟使能 
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//选中引脚5,6,7
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO输出速度50Hz
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_Init(GPIOA,&GPIO_InitStructure);//配置引脚
	GPIO_SetBits(GPIOA, GPIO_Pin_5 | GPIO_Pin_6| GPIO_Pin_7);//PA 5,6,7 输出高
	
	SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI设置为双线双向全双工
	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//设置为主 SPI  
	SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//SPI发送接收 8 位帧结构  
	SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//选择了串行时钟的稳态:时钟悬空高
	SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿 
	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//波特率预分频值为 256   
	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//数据传输从 MSB 位开始 
	SPI_InitStructure.SPI_CRCPolynomial = 7;//SPI_CRCPolynomial定义了用于 CRC值计算的多项式 
	SPI_Init(SPI1, &SPI_InitStructure); //配置SPI1
	
	SPI_Cmd(SPI1, ENABLE);//SPI1使能
	SPIx_ReadWriteByte(0xFF);//启动传输	
}
开发者ID:zou-can,项目名称:si-zou,代码行数:33,代码来源:spi.c


注:本文中的SPIx_ReadWriteByte函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。