本帖最后由 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.
|