新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2021-2-23
- 在线时间
- 7 小时
|
1金钱
在使用开发板调SPI通信 ,发现速度怎么都上不去,SPI配置如下void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;//SPI_NSS_HARD_OUTPUT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
//hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
}
速度配置为2分频
SPI1_SetSpeed(SPI_BAUDRATEPRESCALER_2);
如果使用HAL库带的函数,连续读20M,大约花费63S,也就是320Kbyte/S(2.56Mbit/s)
u8 SPI1_ReadWriteByte(u8 TxData)
{
u8 Rxdata;
HAL_SPI_TransmitReceive(&hspi1,&TxData,&Rxdata,1, 1000);
return Rxdata; //返回收到的数据
}
或者
HAL_StatusTypeDef SPI1_ReadWriteBlock(uint8_t *pTxData, uint8_t *pRxData,uint16_t Size)
{
HAL_StatusTypeDef eror;
eror = HAL_SPI_TransmitReceive(&hspi1,pTxData,pRxData,Size, 1000);
return eror;
}
如果使用寄存器方式,连续读20M,大约花费34S,也就是588Kbyte/S(4.7Mbit/s)
u8 SPI1_ReadWriteByte(u8 TxData)
{
u16 retry=0;
while((SPI1->SR&1<<1)==0) //等待发送区空
{
retry++;
if(retry>=0XFFFE)
{
printf(" SPI1_ReadWriteByte time out -1- \r\n");
return 0; //超时退出
}
}
SPI1->DR=TxData; //发送一个byte
retry=0;
while((SPI1->SR&1<<0)==0) //等待接收完一个byte
{
retry++;
if(retry>=0XFFFE)
{
printf(" SPI1_ReadWriteByte time out -2- \r\n");
return 0; //超时退出
}
}
return SPI1->DR; //返回收到的数据
}
已经设置为最大速度,理论上稳定最高速度在 2.25Mbyte/s(18Mbit/s),外部芯片的最大理论值是33Mbit/s,无论怎么改变调,速度都达不到,请问可能是什么问题?
|
|