
使用 HAL 库,spi 读写函数,? 具体如下: 方法 1: _SPI_FLASH_TATUS_T SPI_FlashReadBuffer(uint8_t * _pBuf, uint32_t _uiReadAddr, uint32_t _uiSize) { SPI_FLASH_CS_L; // 芯片 W25Q256, 512 是 32bit地址 if(g_tFlash.ChipID >= JEDEC_W25Q256FVSG_ID) //如果是W25Q256的话地址为4字节的,要发送最高8位 { uint8_t TxAddr[5] ; TxAddr[0] = W25Q_ReadData; TxAddr[1] = (uint8_t)((_uiReadAddr)>>24); TxAddr[2] = (uint8_t)((_uiReadAddr)>>16); TxAddr[3] = (uint8_t)((_uiReadAddr)>>8); TxAddr[4] = (uint8_t)((_uiReadAddr)>>0); HAL_SPI_Transmit(&hspi2, &TxAddr[0], 5, 0x1fff); } else { uint8_t TxAddr[5] ; TxAddr[0] = W25Q_ReadData; TxAddr[1] = (uint8_t)((_uiReadAddr)>>16); TxAddr[2] = (uint8_t)((_uiReadAddr)>>8); TxAddr[3] = (uint8_t)((_uiReadAddr)>>0); HAL_SPI_Transmit(&hspi2, &TxAddr[0], 4, 0x1fff); } HAL_SPI_Receive( &hspi2, _pBuf, _uiSize, 0x3fffff); // 采用此方法接收数据速度至少快4倍或以上 SPI_FLASH_CS_H; return SPI_FLASH_OK; } 方法2: static uint8_t SPI_ReadWriteByte(uint8_t TxData) { uint8_t Rxdata; HAL_SPI_TransmitReceive(&hspi2, &TxData, &Rxdata, 1, 1000); return Rxdata; //返回收到的数据 } _SPI_FLASH_TATUS_T SPI_FlashReadBuffer(uint8_t * _pBuf, uint32_t _uiReadAddr, uint32_t _uiSize) { SPI_FLASH_CS_L; SPI_ReadWriteByte(W25Q_ReadData); // 芯片 W25Q256, 512 是 32bit地址 if(g_tFlash.ChipID >= JEDEC_W25Q256FVSG_ID) //如果是W25Q256的话地址为4字节的,要发送最高8位 { SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>24)); } SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>16)); // 发送 24 bit 地址 SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>8)); SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>0)); while (_uiSize--) { *_pBuf++ = SPI_ReadWriteByte(0XFF); // 读一个字节并存储到pBuf,读完后指针自加1 } SPI_FLASH_CS_H; return SPI_FLASH_OK; } 上述两种方法,方法一,程序有时不稳定, 方法二,每次都可以,但是速度较慢, 请教下,这是何故啊 ?? |
第一种: 2个字节以上的数据按16位方式发送中间不停连续发,从设备只接收8位中间要停下导致处理不过来16位数据速度过快,
第二种:是8位方式发送,这个速度不是很快8个位之间有停,所以从设备能处理的过来.所以稳定
评分
查看全部评分
原来是这样啊,多些多些了啊