本帖最后由 wofei1314 于 2015-11-20 09:42 编辑
如题,使用HAL库
SPI读写代码:
- uint8_t w25_exchangebyte(uint8_t txbyte)
- {
- uint8_t rxbyte=0;
- HAL_StatusTypeDef status;
-
- status = HAL_SPI_TransmitReceive(&hspi2,&txbyte,&rxbyte,1,100);
- if(status == HAL_OK)
- return rxbyte;
- else
- return 255;
- }
复制代码 都W25Q64的代码,以前测试好用的,现在只有第一次读好用,第二次调用都出来的就是 0 ,不知何故,求解答。。。代码如下:uint32_t w25_rdid3(void)
{
uint32_t dd=0;
AT_CS_LOW();
w25_exchangebyte(W25X_JedecDeviceID);
dd = w25_exchangebyte(Dummy) << 16;
dd |= w25_exchangebyte(Dummy) << 8;
dd |= w25_exchangebyte(Dummy);
//HAL_SPI_TransmitReceive(&hspi2,(uint8_t *)(&w25_tmp),(uint8_t *)(&dd),4,100);
AT_CS_HIGH();
return dd;
}
main函数中有如下代码(都是CubeMX自动生成的,配置了GPIO引脚,时钟、SPI。。。。):
MX_GPIO_Init();
MX_SPI2_Init();
while循环里使用USB来触发读命令
if(UserRxBufferFS[0]==0x01)
{
//CDC_Transmit_FS(UserRxBufferFS,len_usbrx);
id=w25_rdid3();
UsbPrintf("SPI id:%x \r\n",id);
}
只有第一次调用的时候,正确返回w25Q64的id(值:ef4016),第二次第三次后面所有的都是返回0.。。。
好郁闷,求指点。。。。
|