使用Cube 的 生成的HAL 库SPI代码,只能发送一次数据
本帖最后由 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==0x01)
{
//CDC_Transmit_FS(UserRxBufferFS,len_usbrx);
id=w25_rdid3();
UsbPrintf("SPI id:%x \r\n",id);
}
只有第一次调用的时候,正确返回w25Q64的id(值:ef4016),第二次第三次后面所有的都是返回0.。。。
好郁闷,求指点。。。。
我的软件不能用。。。。 单步一下吧。
页:
[1]