野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17171|回复: 0

如何减小HAL_SPI_Receive 函数的等待时间?

[复制链接]
发表于 2020-10-9 02:34:11 | 显示全部楼层 |阅读模式
本帖最后由 stefan2005 于 2020-10-9 14:59 编辑

我外接两个SPI接口的12bit ADC同时收数据,所以片子上开了两个SPI接口,想要在5µs的中断内接受数据,但是发现在限定的中断时间内没有完成下面的两道命令
HAL_SPI_Receive(&hspi1,(uint8_t *)&data_in_1,1,1);
HAL_SPI_Receive(&hspi4,(uint8_t *)&data_in_2,1,1);

结果就把其中的一个函数放到main循环中看要执行多长时间。发现两次接受得16µs.
所以想问一下有没有办法把这个间隔等待时间缩短。
SPI SCK 18MHz 没毛病,但是两个HAL_SPI_RECEIVE 函数之间的等待时间却为惊人的8µs,竟然远大于<1µs 的信号传送时间,我的问题是,如何减小这个等待时间? 必须自己写底层函数吗?
SPI configuration:
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;[url=]Url[/url]
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }


测试放到main中的循环中
while(1)
{
uint16_t data_in;
HAL_SPI_Receive(&hspi1,(uint8_t *)&data_in,1,1);
}
下面是测试结果,时钟没问题 16 次, 18MHz. 但是两次接收之间的等待时间却是惊人的8µs.

225508mqyw5e3e4o5s0hhz.jpg
230420ln3izvqs3fozi1vs.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 06:46 , Processed in 0.044094 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表